)]}'
{
  "commit": "638853642a113acc85581c7e314f4833e7f02a22",
  "tree": "3da6357680ee5e1211c3a737a7efcb752b075b11",
  "parents": [
    "0c0a1dfe57cd9ecd3533fcde7f27d35a4757cc98"
  ],
  "author": {
    "name": "Aleksei Bavshin",
    "email": "a.bavshin@f5.com",
    "time": "Wed Jun 01 20:17:23 2022 -0700"
  },
  "committer": {
    "name": "Aleksei Bavshin",
    "email": "a.bavshin@f5.com",
    "time": "Wed Jun 01 20:17:23 2022 -0700"
  },
  "message": "Resolver: make TCP write timer event cancelable.\n\nSimilar to 70e65bf8dfd7, the change is made to ensure that the ability to\ncancel resolver tasks is fully controlled by the caller.  As mentioned in the\nreferenced commit, it is safe to make this timer cancelable because resolve\ntasks can have their own timeouts that are not cancelable.\n\nThe scenario where this may become a problem is a periodic background resolve\ntask (not tied to a specific request or a client connection), which receives a\nresponse with short TTL, large enough to warrant fallback to a TCP query.\nWith each event loop wakeup, we either have a previously set write timer\ninstance or schedule a new one.  The non-cancelable write timer can delay or\nblock graceful shutdown of a worker even if the ngx_resolver_ctx_t-\u003ecancelable\nflag is set by the API user, and there are no other tasks or connections.\n\nWe use the resolver API in this way to maintain the list of upstream server\naddresses specified with the \u0027resolve\u0027 parameter, and there could be third-party\nmodules implementing similar logic.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6d129e56aff9bbe64f34125d6045f8c0ec6d485f",
      "old_mode": 33188,
      "old_path": "src/core/ngx_resolver.c",
      "new_id": "b3947f5fd1691d8532e89075fda578db6c4ba62e",
      "new_mode": 33188,
      "new_path": "src/core/ngx_resolver.c"
    }
  ]
}
