)]}'
{
  "commit": "48d5b6cf76e541bcfd6c37372d792d06a38984c0",
  "tree": "3ad7e18dcb1dce8607acd7c1dd3caea1b1348663",
  "parents": [
    "edefd3d10fc321548bd828e9e0d867cd8fac4cc0"
  ],
  "author": {
    "name": "Ajay Gupta",
    "email": "ajagup@qti.qualcomm.com",
    "time": "Mon Oct 26 07:01:35 2026 +0530"
  },
  "committer": {
    "name": "Ajay Gupta",
    "email": "ajagup@qti.qualcomm.com",
    "time": "Tue Oct 27 07:41:15 2026 +0530"
  },
  "message": "Ignore files not named by a sha1 in the replication task storage\n\nOn NFS, deleting or renaming a file that a process on the same client\nstill has open turns it into a hidden \".nfsXXXX\" file, which the client\nremoves once the process closes it. If the process dies first, the file\nstays behind for good. With several primaries sharing the task storage,\nthis can happen to a task file that a primary is reading while it starts\nor finishes the same task.\n\nReplicationTasksStorage listed such a file as a task, keyed by its file\nname instead of the sha1 of the task. With the replication distributor\nenabled this loops forever: every distribution cycle replays the file,\nthe resulting push cannot match the stored task by sha1, so it is pruned\nas externally completed and scheduled again on the next cycle, on every\nprimary. The push never runs, since starting it renames the file named\nafter the sha1, which does not exist. For an ..all.. task this schedules\nand cancels a full push of the project every few seconds, for as long as\nthe file exists.\n\nTask files are always named after the sha1 of their task, so skip files\nwhose name is not a sha1 when walking the storage. This also covers other\nstray files, such as editor or rsync leftovers.\n\nRelease-Notes: Ignore files not named by a sha1, such as NFS \".nfsXXXX\" files, in the replication task storage, which the distributor kept rescheduling forever\nChange-Id: I907be49b01103f11e483f8afdd2b6f2d983432fd\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bc0d9008df0e41fa2695becfa84ad5820c9c4d2a",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationTasksStorage.java",
      "new_id": "02d50f9eacbd729ca25038c72fd243a1507a2d99",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationTasksStorage.java"
    },
    {
      "type": "modify",
      "old_id": "5256bbe5b47069821b1f18aa2e493143ddc44558",
      "old_mode": 33188,
      "old_path": "src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationDistributorIT.java",
      "new_id": "db4137691069dd5ff895127e7dd37cfe1a785ffd",
      "new_mode": 33188,
      "new_path": "src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationDistributorIT.java"
    },
    {
      "type": "modify",
      "old_id": "cb1d5411f0baa901f0998097392230d2f3f4fd49",
      "old_mode": 33188,
      "old_path": "src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationTasksStorageTest.java",
      "new_id": "4ba85455367ac03c28d872a9bfe0b98a08d89ffa",
      "new_mode": 33188,
      "new_path": "src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationTasksStorageTest.java"
    }
  ]
}
