)]}'
{
  "commit": "7e7c2417c7a9cccd6e408955acf271c68c359bb3",
  "tree": "6d8f7cef36ebbbabbbe360f28cded82a522d72dd",
  "parents": [
    "54898d71ffa30bcdaa0f37f968efb0985d9bca64"
  ],
  "author": {
    "name": "Kaushik Lingarkar",
    "email": "klingarkar@nvidia.com",
    "time": "Wed Jul 22 12:37:16 2026 -0700"
  },
  "committer": {
    "name": "Kaushik Lingarkar",
    "email": "klingarkar@nvidia.com",
    "time": "Thu Jul 23 13:27:43 2026 -0700"
  },
  "message": "Allow setting remote.NAME.threads\u003d0 for persist-only mode\n\nSetting \u0027remote.NAME.threads\u0027 to 0 now puts a remote into a\npersist-only mode on the current node. No thread pool is created and\nthe node performs no pushes, project deletions or HEAD updates for\nthat remote. Replication tasks are still written to the task storage.\n\nThis supports multi-primary deployments where a user-facing primary\nonly records replication work, while a separate non user-facing\nprimary (configured with threads \u003e 0 and distributor enabled) picks\nthe tasks up from the shared storage and performs the actual pushes.\nAlso, when a node has no push-enabled remotes, both recovery and the\nstartup replay are skipped entirely.\n\nA caveat to setting threads to \u00270\u0027 is that project deletions and HEAD\nupdates originating on a persist-only node are not replicated by other\nnodes, as they are not persisted to the task storage. If needed, support\nfor persisting them can be added in future changes.\n\nChange-Id: I022865cbd7105563b5760ca05ae85847e0d7b97b\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f83e1df7c91e5e1cafb154687dadbe7891f94217",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java",
      "new_id": "b35a5d1fd9e1a76fe714fb75d334150dde4897da",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java"
    },
    {
      "type": "modify",
      "old_id": "59acb205c84dd5d3ba71e5d16865605cbaf411a4",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java",
      "new_id": "9abf407ff385e0eb2d77c2ec595110cbf0006f10",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java"
    },
    {
      "type": "modify",
      "old_id": "7fc4acb486f579160874f726206b74615e64bc71",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationTasksStorage.java",
      "new_id": "bc0d9008df0e41fa2695becfa84ad5820c9c4d2a",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationTasksStorage.java"
    },
    {
      "type": "modify",
      "old_id": "305bb2812cdc97f58ec6be454a31aa762bdb181a",
      "old_mode": 33188,
      "old_path": "src/main/resources/Documentation/config.md",
      "new_id": "eb96d29a8926255497dbf1561b09a06930fa25e7",
      "new_mode": 33188,
      "new_path": "src/main/resources/Documentation/config.md"
    },
    {
      "type": "modify",
      "old_id": "d0affe25cdd7147c7e1a7f9f5c12a208c53415d4",
      "old_mode": 33188,
      "old_path": "src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationStorageIT.java",
      "new_id": "bfcf5be93f5c2d0fab52b75c0b001c86c06872a4",
      "new_mode": 33188,
      "new_path": "src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationStorageIT.java"
    },
    {
      "type": "modify",
      "old_id": "6d334fae746b81d768a2b3f70cfffef69a7156a7",
      "old_mode": 33188,
      "old_path": "src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationTasksStorageTest.java",
      "new_id": "cb1d5411f0baa901f0998097392230d2f3f4fd49",
      "new_mode": 33188,
      "new_path": "src/test/java/com/googlesource/gerrit/plugins/replication/ReplicationTasksStorageTest.java"
    }
  ]
}
