)]}'
{
  "commit": "8a87ebcbc9f5f399bb58c4cba1bda972a4ea8c03",
  "tree": "af2a6873da0b4f55b3710f78205b5ee1042ab291",
  "parents": [
    "d5404ebf1a0ccf5ed75a16268db3f2ad520f8e7b"
  ],
  "author": {
    "name": "Kaushik Lingarkar",
    "email": "klingarkar@nvidia.com",
    "time": "Thu Jul 30 13:38:33 2026 -0700"
  },
  "committer": {
    "name": "Kaushik Lingarkar",
    "email": "klingarkar@nvidia.com",
    "time": "Thu Jul 30 15:12:55 2026 -0700"
  },
  "message": "Describe ITS change events without resolving the patch set\n\nEventHandler.toString() described a patch set event by resolving\nPatchSetEvent#patchSet. That supplier is not cheap because it needs to\nopen the repository, and it is also unsafe because it can throw an\nexception when it cannot find a patch set.\n\nA worker thread\u0027s name is set using task.toString() before the task is\ninvoked. This is done in Gerrit core\u0027s WorkQueue and ideally should be\nfixed to protect its executor against this. An exception during\ntoString() causes the worker thread to never run the task. With the\ncurrent implementation of async event processing, this results in a\nleaked semaphore permit because the task never runs and releaseIfReady()\nends up not being called from ThrottledTask.run().\n\nThis change updates EventHandler.toString() to describe the event\ndirectly from its fields. Although this omits the patch set ref from the\nthread description, it now includes the change key to correlate a queue\nentry with a change. It also eliminates the need to open the repository.\n\nAn event without a patch set still fails in PropertyExtractor, which\nresolves the same supplier while doing the actual work. However, that\nfailure is caught and logged, allowing the permit to be safely released.\n\nChange-Id: I2fd7d20e5a819bf6fc9d3808c0946c4096f190cb\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4b5a4236f3eab06f894d1fb42cf965b2415d0107",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/its/base/workflow/ActionController.java",
      "new_id": "74bf8e660eb07cffb40cb5ae304aaf77999c86be",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/its/base/workflow/ActionController.java"
    }
  ]
}
