)]}'
{
  "commit": "3248921e01f774c23094d53bbf8ac1271b767e31",
  "tree": "6ebfdf2048d890cb66044af1f2ffe93a56969571",
  "parents": [
    "1cecb058b257aa96386382b3fc9414a71c333059"
  ],
  "author": {
    "name": "Martin Fick",
    "email": "martin.fick@linaro.org",
    "time": "Thu Jun 30 14:57:02 2022 -0600"
  },
  "committer": {
    "name": "Martin Fick",
    "email": "martin.fick@linaro.org",
    "time": "Wed Sep 07 14:45:51 2022 -0600"
  },
  "message": "Remove cached Change subNodes on Node completion\n\nPreviously when a TaskTree Node\u0027s subNodes required a reload, they were\ncached until the Node was refreshed which was the next time the Nodes\nwas used, which can be many changes later, or never. On Node refresh, it\nwould finally dump any Change subNodes, which are unreusable, that it\nhad. Since these Change subNodes would not be re-used, they just\nconsumed extra memory which could be significant if they had a full\nsubtree such as would be the case when walking each change\u0027s ancestors.\nAvoid caching these Change subNodes by clearing them as soon as the node\nprocessing is complete.\n\nBefore this change, a task.config which walks all dependencies for a\nchange would not complete after an hour with a 58000m heap when run with\nstatus:open --no-limit. At the time of attempting to run the query, it\nis visible that lots of CPU is being spent using top, more than a 1000%,\nlikely for java GC. After this change it completes in around 30mins\n(5800m) heap, and 50mins (48000m) heap!\n\nChange-Id: I88c3862e886e016b5731c8074da810da20480e47\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6df4b9db7f817f9c0db899a8159eedbc44af80c4",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java",
      "new_id": "977564301923d42abf676755f11c33dd75f5c500",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/task/TaskTree.java"
    }
  ]
}
