)]}'
{
  "log": [
    {
      "commit": "28e784b3d99c969cd850d35670bf0e05478a7d10",
      "tree": "a0d8f25417d96acbbb133e6c1ea309d39db1ae4c",
      "parents": [
        "61b1a79d56df9fbb296bce401b9dd5c4b553620e"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 03 09:23:30 2025 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 03 09:24:42 2025 -0700"
      },
      "message": "Add deprecation notice\n\nChange-Id: I2c019128d7e25fc9c5eee80432ca0d5da8edb0d1\n"
    },
    {
      "commit": "61b1a79d56df9fbb296bce401b9dd5c4b553620e",
      "tree": "defe9a915b2fa802eedd48791092c50829087e9c",
      "parents": [
        "a15181b1b88ed69c04ca7ea0d23a3777b7f53a4e"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Aug 25 21:40:32 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Aug 25 21:40:32 2025 +0100"
      },
      "message": "Remove unused ProjectIndexer\n\nChange-Id: I033d9ecacfa4ce0fcb078704a49a2eff1b61f2f1\n"
    },
    {
      "commit": "a15181b1b88ed69c04ca7ea0d23a3777b7f53a4e",
      "tree": "b67a52c570d5a23c4cffc09be03033d7c9e895a0",
      "parents": [
        "dfef6cada6e73e6b5b93959b8cc154e490e5cf75",
        "2adae4632e3bb6d64831c74534f08068ec4635e5"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Aug 13 11:06:13 2025 -0600"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Aug 19 11:17:33 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.12\u0027\n\n* stable-3.12:\n  Log cancelled fetch collisions without reschedule\n  Add per-project shared lock to avoid fetch collisions\n  Revert \"Prevent concurrent fetches on the same repository\"\n  Revert \"Extract QueueInfo into its own class\"\n  Extract QueueInfo into its own class\n  Throw LockFailureException from filterAndLock interface\n  Expose new constructor for LockFailureException\n  Prevent concurrent fetches on the same repository\n\nChange-Id: I2b8240bb840056d1f836d8a98d651f7115e1d96b\n"
    },
    {
      "commit": "2adae4632e3bb6d64831c74534f08068ec4635e5",
      "tree": "397952da073b84018b14a9645e68bddb276d9f90",
      "parents": [
        "d7dfef02991c66b8cc8c23cc122f27af4b70d7b9",
        "f834b85b2171c11b275bbb6db05c40599eb2d671"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Aug 13 11:03:21 2025 -0600"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Aug 13 11:03:21 2025 -0600"
      },
      "message": "Merge branch \u0027stable-3.11\u0027 into stable-3.12\n\n* stable-3.11:\n  Log cancelled fetch collisions without reschedule\n  Add per-project shared lock to avoid fetch collisions\n  Revert \"Prevent concurrent fetches on the same repository\"\n  Revert \"Extract QueueInfo into its own class\"\n  Extract QueueInfo into its own class\n  Throw LockFailureException from filterAndLock interface\n  Expose new constructor for LockFailureException\n  Prevent concurrent fetches on the same repository\n\nChange-Id: I0adf7d7984887c4672e56698ff9412605322a8bc\n"
    },
    {
      "commit": "f834b85b2171c11b275bbb6db05c40599eb2d671",
      "tree": "6cc27c25d6a930674bd7c74ec3212c87a637a5c8",
      "parents": [
        "9e39df6361889c6b34edb0f0c7a0272624039767",
        "77cc5298547c9bf846a9dba886ecfe487998f3cf"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Aug 13 10:50:12 2025 -0600"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Aug 13 10:50:12 2025 -0600"
      },
      "message": "Merge branch \u0027stable-3.10\u0027 into stable-3.11\n\n* stable-3.10:\n  Log cancelled fetch collisions without reschedule\n  Add per-project shared lock to avoid fetch collisions\n  Revert \"Prevent concurrent fetches on the same repository\"\n  Revert \"Extract QueueInfo into its own class\"\n  Extract QueueInfo into its own class\n  Throw LockFailureException from filterAndLock interface\n  Expose new constructor for LockFailureException\n  Prevent concurrent fetches on the same repository\n\nChange-Id: Id1aa990ab3a59f0232418738b084ea20c977d183\n"
    },
    {
      "commit": "77cc5298547c9bf846a9dba886ecfe487998f3cf",
      "tree": "2af2d1b74bac87373c2d4828b8a109d338007e6e",
      "parents": [
        "0dcfc0c60b98f2589557bfc60cde51d09ce9e3f4"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Aug 13 06:38:47 2025 -0600"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Aug 13 07:13:49 2025 -0700"
      },
      "message": "Log cancelled fetch collisions without reschedule\n\nLog when a fetch task is cancelled and the project is locked by another\nin-flight fetch. In this case the task is not rescheduled; previously\nthis path exited silently, making it harder to diagnose why a\nreplication did not retry.\n\nChange-Id: I0abc0dc2f5d38014ce79a46958f295ebf32c9c4f\n"
    },
    {
      "commit": "0dcfc0c60b98f2589557bfc60cde51d09ce9e3f4",
      "tree": "1daed25245e08b2fc67097fa391bd819756e53bf",
      "parents": [
        "53a1bd279bc154a88b93295f0a20ab024c65b2e4"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Aug 12 17:13:22 2025 -0600"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Aug 13 15:12:10 2025 +0100"
      },
      "message": "Add per-project shared lock to avoid fetch collisions\n\nIntroduce a singleton ProjectsLock to coordinate fetches across sources\non a per-project basis without blocking. FetchOne now tries to acquire a\nnon-blocking lock for the project before proceeding; if the lock is busy\nwe reschedule the task to avoid colliding with an in-flight fetch. When\nacquired, the lock is held via a try-with- resources token and we still\nhonor the async runway check.\n\nPrevious changes (I3c3d7b97, I7883e680) attempted to centralize\ncoordination with a shared projects queue, but it dropped the fetch\norigin, which led to fetch events being lost. The new lock-based\napproach keeps the source context intact and guarantees at most one\nconcurrent fetch per project across sources.\n\nBug: Issue 437805590\nChange-Id: I2ce2f5a8532a7282f03f245f3670e8c318de0a61\n"
    },
    {
      "commit": "53a1bd279bc154a88b93295f0a20ab024c65b2e4",
      "tree": "69c632440a1952491e6d56ba2d516b0934c504ef",
      "parents": [
        "368cae4f7d8021f41d4f29cead117135e880010b"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Aug 12 13:57:05 2025 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Aug 12 13:59:06 2025 -0700"
      },
      "message": "Revert \"Prevent concurrent fetches on the same repository\"\n\nThis reverts commit eebcfdd1c3ece403247a37f5a766cb7facdb94c0.\n\nReason for revert: This would break replication consistency when having a single source with multiple URIs\n\nBug: Issue 437805590\nChange-Id: I499244441b01ddee42d61655b908576b3af316e4\n"
    },
    {
      "commit": "368cae4f7d8021f41d4f29cead117135e880010b",
      "tree": "395dd4bbb82bc585c1c82a8e3b03b438d5ea375c",
      "parents": [
        "e5ffe261c4309d84c2d5f8af00df611dc1917e8f",
        "b7573ac60a0f5e3a1961299c9226993256e3247b"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Aug 12 13:58:57 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 12 13:58:57 2025 -0700"
      },
      "message": "Merge \"Revert \"Extract QueueInfo into its own class\"\" into stable-3.10"
    },
    {
      "commit": "b7573ac60a0f5e3a1961299c9226993256e3247b",
      "tree": "c90bdbfb4de58a1ee2e43401f0026e907904dfd4",
      "parents": [
        "5ffac84cd4024a548055836a6000e57a9283214f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Aug 12 13:58:03 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 12 13:58:03 2025 -0700"
      },
      "message": "Revert \"Extract QueueInfo into its own class\"\n\nThis reverts commit 5ffac84cd4024a548055836a6000e57a9283214f.\n\nReason for revert: Not strictly needed\n\nChange-Id: Ice65f4fbe6c04b15bb4da831fb284222ffcad1da\n"
    },
    {
      "commit": "e5ffe261c4309d84c2d5f8af00df611dc1917e8f",
      "tree": "22f5ce3978f21fb45ce8acb3ec3d4270c6844295",
      "parents": [
        "5ffac84cd4024a548055836a6000e57a9283214f",
        "9ed2b7bb3d6a8e6373ffe035d38b9c1122723ea1"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Aug 12 10:09:20 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 12 10:09:20 2025 -0700"
      },
      "message": "Merge \"Throw LockFailureException from filterAndLock interface\" into stable-3.10"
    },
    {
      "commit": "5ffac84cd4024a548055836a6000e57a9283214f",
      "tree": "14cab109bd14f6af9c0511804f70302bb89620ec",
      "parents": [
        "453e7845428fd6ced6fafde54a24f1302b6d4973"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Aug 12 10:19:44 2025 -0600"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Aug 12 10:22:13 2025 -0600"
      },
      "message": "Extract QueueInfo into its own class\n\nThis change is propedeutic to allow the injection\nof a QueuInfo singletlon to be shared among Sources\nto avoid triggering multiple fetches for the same project.\n\nChange-Id: I41e0b60ed8366f3bfa5a3b91aa3fa8d983c08811\n"
    },
    {
      "commit": "9ed2b7bb3d6a8e6373ffe035d38b9c1122723ea1",
      "tree": "395dd4bbb82bc585c1c82a8e3b03b438d5ea375c",
      "parents": [
        "453e7845428fd6ced6fafde54a24f1302b6d4973"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Mon Aug 11 15:54:45 2025 +0100"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Aug 12 17:00:15 2025 +0100"
      },
      "message": "Throw LockFailureException from filterAndLock interface\n\nIc2e619ce22b needs this change to allow the filtering and lock to throw\na LockException.\n\nBug: Issue 437621330\nChange-Id: I3b8f97593fab476ba44df9d0746e493fec93f742\n"
    },
    {
      "commit": "453e7845428fd6ced6fafde54a24f1302b6d4973",
      "tree": "c90bdbfb4de58a1ee2e43401f0026e907904dfd4",
      "parents": [
        "eebcfdd1c3ece403247a37f5a766cb7facdb94c0"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Mon Aug 11 15:52:09 2025 +0100"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Aug 12 06:39:53 2025 -0700"
      },
      "message": "Expose new constructor for LockFailureException\n\nBug: Issue 437621330\nChange-Id: I946d7ce711934e12a5b7f1f3c0f4def37010d62f\n"
    },
    {
      "commit": "eebcfdd1c3ece403247a37f5a766cb7facdb94c0",
      "tree": "1e4c27577ad92fc8d5bf37f25ddc7383de79f67b",
      "parents": [
        "85514e0976b59a84e1c3ac1f9c5f49046f14b323"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Aug 11 08:29:21 2025 -0600"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Aug 11 09:35:17 2025 -0600"
      },
      "message": "Prevent concurrent fetches on the same repository\n\nRunning multiple fetches concurrently on the same repository\nis unnecessary and often counterproductive, as one or more of\nthem are likely to fail.\n\nTo avoid this, ensure that only one fetch is executed at a time\nper repository.\n\nBug: Issue 437805590\nChange-Id: I7883e680e018705fcc0d307356b1c541fe8ecc93\n"
    },
    {
      "commit": "dfef6cada6e73e6b5b93959b8cc154e490e5cf75",
      "tree": "ebc8470bf861ac334f0d92ebbef082ef24e8aba7",
      "parents": [
        "71538ca6e051b58dd1f71eb023f6226786246337"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 28 00:29:27 2025 +0200"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Jul 27 22:12:02 2025 -0700"
      },
      "message": "Set JAVA_HOME in example-setup Dockerfile\n\nChange-Id: Ib952c1f225a1e7c44399689ec98999c4e4f7ac77\n"
    },
    {
      "commit": "71538ca6e051b58dd1f71eb023f6226786246337",
      "tree": "f42cc9686e3735d76a470fd6fd5071afc74a013e",
      "parents": [
        "ac66e589c8b03f4c7ea7b48c7bb3df7ba71df4b7"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Jul 26 18:13:57 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 28 07:11:27 2025 +0200"
      },
      "message": "Consider the headName value when creating a new repository\n\nThe creation of a new repository is notified through the\nProjectCreatedEvent but the headName was ignored, causing the new\nproject to be always created with a default head.\n\nUse the headName in the ProjectCreatedEvent and use it for creating the\nnew empty repository.\n\nAlso consider the \u0027headName\u0027 parameter when the creation happens via\nREST-API, even though the client-side of the replication via HTTP isn\u0027t\nimplemented yet in this change and will be expanded in a follow-up\nchange.\n\nBug: Issue 430486435\nChange-Id: I2a37b01e55c1acbc5e51bde365dd84c9943c9b31\n"
    },
    {
      "commit": "ac66e589c8b03f4c7ea7b48c7bb3df7ba71df4b7",
      "tree": "6bb817f9061cd0c28f47c4c169f03fc6116af63b",
      "parents": [
        "09aab23ccb7c1e5e32b242112cfb8a4bc6378fd2",
        "d7dfef02991c66b8cc8c23cc122f27af4b70d7b9"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 28 00:06:02 2025 +0200"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 28 00:06:02 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.12\u0027\n\n* stable-3.12:\n  Update Gerrit in example-setup Dockerfile to 3.12.1\n  Update Gerrit in example-setup Dockerfile to 3.11.4\n\nChange-Id: Ia9ba55d4830e708154ff3d04bb339795f66855b4\n"
    },
    {
      "commit": "d7dfef02991c66b8cc8c23cc122f27af4b70d7b9",
      "tree": "740d7ab28261d78669a049e134bc72f4292206e4",
      "parents": [
        "290b9e899967ac9e0abd18b0c100f21c0d19d18d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 28 00:05:05 2025 +0200"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 28 00:05:05 2025 +0200"
      },
      "message": "Update Gerrit in example-setup Dockerfile to 3.12.1\n\nChange-Id: I5eb661b43c1b9856fd3e75d6318cb4c1d2797f4d\n"
    },
    {
      "commit": "290b9e899967ac9e0abd18b0c100f21c0d19d18d",
      "tree": "f2f51d15344da1089631c51d8a4e4f867ae3617e",
      "parents": [
        "c9491076e2b27cf753886ef3e982cda378336305",
        "9e39df6361889c6b34edb0f0c7a0272624039767"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 28 00:04:28 2025 +0200"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 28 00:04:28 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.11\u0027 into stable-3.12\n\n* stable-3.11:\n  Update Gerrit in example-setup Dockerfile to 3.11.4\n\nChange-Id: Ifc723b46077d0d289470fa9c4d338eaaa615d9fa\n"
    },
    {
      "commit": "9e39df6361889c6b34edb0f0c7a0272624039767",
      "tree": "f1bbba8e06955b24849d9d087acf675798dc4dfe",
      "parents": [
        "7532ea37e8addde175ed8a357c5c5391060f287f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 28 00:03:53 2025 +0200"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 28 00:03:53 2025 +0200"
      },
      "message": "Update Gerrit in example-setup Dockerfile to 3.11.4\n\nChange-Id: I0c29f924639491843d944f02c08cb84f2f33e323\n"
    },
    {
      "commit": "09aab23ccb7c1e5e32b242112cfb8a4bc6378fd2",
      "tree": "8ac5cf693ce22f3274c7db9cac7c92f2c8332f4d",
      "parents": [
        "ebeb261600e8916fb654861ec241dd2e2b4a6fec"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jul 01 21:07:02 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jul 03 11:46:14 2025 +0100"
      },
      "message": "Adapt to HealthCheck.StatusSummary being a Java record\n\nFollowing I7fdaf8d053, the use of HealthCheck\u0027s StatusSummary needs to\nchange to a Java record.\n\nChange-Id: Iead52b8b25dc2e0978955fcd38b00f5b05cb62dc\n"
    },
    {
      "commit": "ebeb261600e8916fb654861ec241dd2e2b4a6fec",
      "tree": "119f462fd2fb4783ab3dbda1471974852ae2e797",
      "parents": [
        "5557818c449cd88a1d2951ca14496fbf6675b3f2",
        "c9491076e2b27cf753886ef3e982cda378336305"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed May 21 18:13:34 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed May 21 18:13:34 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.12\u0027\n\n* stable-3.12:\n  Do not notify failures on collisions\n  Fixed erroneous increment of the rescheduled metric\n  Ensure failures are only incremented in RunnableWithMetrics\n  Move ProjectDeletionAction/CacheDeleteHandler PullReplicationModule\n\nChange-Id: I2616c70936ed4a6169b3ebed062b202081740c8c\n"
    },
    {
      "commit": "c9491076e2b27cf753886ef3e982cda378336305",
      "tree": "119f462fd2fb4783ab3dbda1471974852ae2e797",
      "parents": [
        "5557818c449cd88a1d2951ca14496fbf6675b3f2",
        "7532ea37e8addde175ed8a357c5c5391060f287f"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed May 21 18:13:05 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed May 21 18:13:05 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.11\u0027 into stable-3.12\n\n* stable-3.11:\n  Do not notify failures on collisions\n  Fixed erroneous increment of the rescheduled metric\n  Ensure failures are only incremented in RunnableWithMetrics\n  Move ProjectDeletionAction/CacheDeleteHandler PullReplicationModule\n\nChange-Id: Idf22185207dc94bd184be6e4130e526ef16a2ca5\n"
    },
    {
      "commit": "7532ea37e8addde175ed8a357c5c5391060f287f",
      "tree": "00fc83229ecb23668d2ce242c100de6d1dae13f6",
      "parents": [
        "7bff49d1e087fea66be399f535106d62a0b61e27",
        "85514e0976b59a84e1c3ac1f9c5f49046f14b323"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed May 21 18:12:24 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed May 21 18:12:24 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.10\u0027 into stable-3.11\n\n* stable-3.10:\n  Do not notify failures on collisions\n  Fixed erroneous increment of the rescheduled metric\n  Ensure failures are only incremented in RunnableWithMetrics\n\nChange-Id: I60714422558caf9d332fce3f19b8fea66c6c2e9a\n"
    },
    {
      "commit": "85514e0976b59a84e1c3ac1f9c5f49046f14b323",
      "tree": "78d86f80068ecd95a8bcc617b6e0708c665ad05c",
      "parents": [
        "add670b070b47e1d2c0eee95a1897aaa936bce0b"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue May 20 19:05:11 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed May 21 06:26:00 2025 -0700"
      },
      "message": "Do not notify failures on collisions\n\nCurrently, when a replication task is rescheduled due to a collision, it\nis not marked as a retry.\n\nHowever, the failure notification logic only suppresses notifications\nfor tasks explicitly flagged as retries.\n\nThis change adds an additional check to prevent failure notifications\nfor tasks that are rescheduled because of collisions.\n\nThe same logic was applied to the replication plugin with change Ibf1ca6247.\n\nBug: Issue 418811956\nChange-Id: If489f6b9ac4cdb307a4332bbf23dcf2b51f5178a\n"
    },
    {
      "commit": "7bff49d1e087fea66be399f535106d62a0b61e27",
      "tree": "685436945dcf70595dbd49b55e789a3bb739f2b1",
      "parents": [
        "1f3fb748c8732fcc57185f3a7faca7fe3aa327b2",
        "f70150f8ffaff77c7cb553eff690bf51a59f597e"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu May 01 14:19:24 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 01 14:19:24 2025 -0700"
      },
      "message": "Merge \"Move ProjectDeletionAction/CacheDeleteHandler PullReplicationModule\" into stable-3.11"
    },
    {
      "commit": "add670b070b47e1d2c0eee95a1897aaa936bce0b",
      "tree": "4b649128e5aa05aa62ff9670440eddb30c66289d",
      "parents": [
        "95a5b4ef90f9f7e1ab315a5a73135f2e6b09c929"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Thu Apr 10 12:03:46 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Thu Apr 10 12:18:08 2025 +0200"
      },
      "message": "Fixed erroneous increment of the rescheduled metric\n\nRescheduled metric was incorrectly incremented during merge.\n\nChange-Id: I9007b28a2a13c5df527e214b8ba38008dc1252eb\n"
    },
    {
      "commit": "95a5b4ef90f9f7e1ab315a5a73135f2e6b09c929",
      "tree": "7a0b3b873540d3520830ec76911ca2d5354533de",
      "parents": [
        "829165e5e422ff2ac4dab99be81616f511ad3ae7"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Thu Apr 03 18:49:58 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Thu Apr 03 18:55:44 2025 +0200"
      },
      "message": "Ensure failures are only incremented in RunnableWithMetrics\n\nTo maintain consistency, task and fetch ref failure counters should\nonly be incremented within RunnableWithMetrics.\n\nThe Runnable::run() method is the only place with visibility into the\nfinal outcome of a task, which can either complete successfully\nor fail.\n\nThe following metric should always converge to zero:\n\nplugins_pull_replication_tasks_started_total -\nplugins_pull_replication_tasks_completed_total -\nplugins_pull_replication_tasks_failed_total\n\nIntermediate statuses should continue to be handled outside the\nRunnable implementation, but final state metrics must be updated\nonly from within it.\n\nChange-Id: I2f07a12b7afca32d3d222d1c06262e4d34ae003f\n"
    },
    {
      "commit": "5557818c449cd88a1d2951ca14496fbf6675b3f2",
      "tree": "7bfcda86ebb79515c2f63729545088b27aa440a7",
      "parents": [
        "f426afbc98efb346538d26cf08cdaafd75827060",
        "1f3fb748c8732fcc57185f3a7faca7fe3aa327b2"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Mar 22 10:49:06 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Mar 22 10:49:06 2025 +0000"
      },
      "message": "Merge branch \u0027stable-3.11\u0027\n\n* stable-3.11:\n  Do not lock refs when not executing a fetch\n  Allow locking refs whilst filtering for fetch requests\n  Remove unused Transport in FetchOneTest\n  Avoid mocking ReplicationFetchFilter\n  Remove redundant public modifier in ReplicationFetchFilter\n  Record replication metrics for retrying tasks\n\nChange-Id: I63317ad5f0f98e988844bf40f81522fec014641a\n"
    },
    {
      "commit": "1f3fb748c8732fcc57185f3a7faca7fe3aa327b2",
      "tree": "3ea407665d47b413ba89259a44f037e3996f1f13",
      "parents": [
        "2dacb24719a6006f1929eb338dcd9d80c068d1f0",
        "829165e5e422ff2ac4dab99be81616f511ad3ae7"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Mar 22 10:04:15 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Mar 22 10:24:45 2025 +0000"
      },
      "message": "Merge branch \u0027stable-3.10\u0027 into stable-3.11\n\n* stable-3.10:\n  Do not lock refs when not executing a fetch\n  Allow locking refs whilst filtering for fetch requests\n  Remove unused Transport in FetchOneTest\n  Avoid mocking ReplicationFetchFilter\n  Remove redundant public modifier in ReplicationFetchFilter\n  Record replication metrics for retrying tasks\n\nChange-Id: I4bbbbd665e155205f691041ac0140b68ec041df6\n"
    },
    {
      "commit": "829165e5e422ff2ac4dab99be81616f511ad3ae7",
      "tree": "3a3981f8e227163311f626ee1d5fbf0b8a830b0d",
      "parents": [
        "2696625397d9fe05483b5cbe6f93ee370b7b0350"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Mar 19 10:57:45 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Mar 19 13:07:44 2025 -0700"
      },
      "message": "Do not lock refs when not executing a fetch\n\nLocking the local refs is needed only when executing a Git fetch,\notherwise keep on using the filtering logic without introducing any\nlocal lock.\n\nAlso remove the recursion in FetchOne.runImpl() and replace with a\nwhile/loop for avoiding the nested locking.\n\nChange-Id: I57475e3f264efa340765dd357ef6b8bc8e61c284\n"
    },
    {
      "commit": "2696625397d9fe05483b5cbe6f93ee370b7b0350",
      "tree": "c56303cae0ca657f408d4e83e58906b515dcc87d",
      "parents": [
        "3f4ec303fb38426c5d358eebcb598f752759661f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Mar 16 11:31:15 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Mar 17 10:06:49 2025 -0700"
      },
      "message": "Allow locking refs whilst filtering for fetch requests\n\nAllow the lock/unlock pattern when filtering the refs to fetch. This\nmechanism is used for making sure that the refs selected for the fetch\nreplication operation do not move throughout the replication process.\n\nThis is needed for preventing a ref-update operation happening\nconcurrently with the replication process invalidating the filtering\nvalidity.\n\nChange-Id: I6a30aff43a81f00d671554186eb6e796446b148d\n"
    },
    {
      "commit": "3f4ec303fb38426c5d358eebcb598f752759661f",
      "tree": "11d646637b9cb487f1722ec0ba1c7c249a0d3759",
      "parents": [
        "ac2b7f34762dade40cc00c24e474cde71473b0b7"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Mar 16 20:35:29 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Mar 16 20:35:41 2025 +0000"
      },
      "message": "Remove unused Transport in FetchOneTest\n\nChange-Id: Ib4056a3d4bda56aa5dbad6c3a957084d115a2309\n"
    },
    {
      "commit": "ac2b7f34762dade40cc00c24e474cde71473b0b7",
      "tree": "a4569cd169770e451139bc0fead78552aea2d7a5",
      "parents": [
        "c6cf0415a0596e900270f996345da95d8e884247"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Mar 16 20:06:21 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Mar 16 20:34:37 2025 +0000"
      },
      "message": "Avoid mocking ReplicationFetchFilter\n\nReplicationFetchFilter is a simple interface that can\nbe implemented with lambdas and there is no need\nto use complex Mockito magic.\n\nChange-Id: I2b8d715707c9d9c02fc58c84b7b91aada45de656\n"
    },
    {
      "commit": "c6cf0415a0596e900270f996345da95d8e884247",
      "tree": "48de63a735d76c9f217683a1b96faa623903d582",
      "parents": [
        "1e1592f6447ea6ec4537a79fed8a26b5177a6c51"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Mar 16 11:28:47 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Mar 16 11:28:47 2025 +0000"
      },
      "message": "Remove redundant public modifier in ReplicationFetchFilter\n\nChange-Id: Iea3c561026afe52efec06c22a1a3071d1cf41167\n"
    },
    {
      "commit": "f70150f8ffaff77c7cb553eff690bf51a59f597e",
      "tree": "8df72cbcf1f470245fb3d87cc1d9c383961b62b6",
      "parents": [
        "2dacb24719a6006f1929eb338dcd9d80c068d1f0"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Feb 22 12:48:50 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Mar 12 07:03:27 2025 -0700"
      },
      "message": "Move ProjectDeletionAction/CacheDeleteHandler PullReplicationModule\n\nFollowing I31cb7378ba7a the classes responsible for providing the delete\nproject functionality need to be moved to PullReplicationModule as it is\nused also in the stream event listener and therefore used even without\nthe HTTP REST-APIs.\n\nHaving the binding in the HttpModule caused two conflicting bindings,\none done just-in-time indirectly by the StreamEventListener and another\none explicitly bound in the PullReplicationModule which was making the\nplugin failing to load because of a double binding.\n\nChange-Id: I9dd29693ee48851a45bff79078f7de27d7c631fc\n(cherry picked from commit f426afbc98efb346538d26cf08cdaafd75827060)\n"
    },
    {
      "commit": "1e1592f6447ea6ec4537a79fed8a26b5177a6c51",
      "tree": "dd5d1ad1dd8797e4bd9e59f80c040a92de842570",
      "parents": [
        "9f16df24c3c5aba042b1f3aeef0b0bb6610d4267"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Mar 04 16:33:12 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Mar 04 17:53:59 2025 +0000"
      },
      "message": "Record replication metrics for retrying tasks\n\nBug: Issue 400654646\nChange-Id: Ifb81f29965575fd0072e7aa10cda997c92f658b5\n"
    },
    {
      "commit": "f426afbc98efb346538d26cf08cdaafd75827060",
      "tree": "f2960601409545094625c1e3e0a77a51246d7b81",
      "parents": [
        "fbe3b345424c021df76d0982eef1786ba815829d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Feb 22 12:48:50 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Feb 22 04:54:09 2025 -0800"
      },
      "message": "Move ProjectDeletionAction/CacheDeleteHandler PullReplicationModule\n\nFollowing I31cb7378ba7a the classes responsible for providing the delete\nproject functionality need to be moved to PullReplicationModule as it is\nused also in the stream event listener and therefore used even without\nthe HTTP REST-APIs.\n\nHaving the binding in the HttpModule caused two conflicting bindings,\none done just-in-time indirectly by the StreamEventListener and another\none explicitly bound in the PullReplicationModule which was making the\nplugin failing to load because of a double binding.\n\nChange-Id: I9dd29693ee48851a45bff79078f7de27d7c631fc\n"
    },
    {
      "commit": "fbe3b345424c021df76d0982eef1786ba815829d",
      "tree": "b286dbd8fdb86aadb218d7bf903a7d2f1771c285",
      "parents": [
        "b9cba775af0e2a8d9ba3d3419044f81190475022",
        "2dacb24719a6006f1929eb338dcd9d80c068d1f0"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 20 16:55:01 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 20 16:55:01 2025 +0000"
      },
      "message": "Merge branch \u0027stable-3.11\u0027\n\n* stable-3.11:\n  Prevent the synchronous replication of create-refs via apply-object\n  Flag ref-updates events creating a new ref\n  Fix the create/delete of ref-specs in FetchOne delta\n  Report deletions as succeeded in the fetch-ref-replicated events\n\nChange-Id: I65c2b8e161dd5b165fd2929c6861aa34e8d71d35\n"
    },
    {
      "commit": "2dacb24719a6006f1929eb338dcd9d80c068d1f0",
      "tree": "74698213d2577920743fea43ba897455d3f1538f",
      "parents": [
        "801d36fd7ec4eefc6a4eeb9580b319ae8cb9a229",
        "9f16df24c3c5aba042b1f3aeef0b0bb6610d4267"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 20 16:54:30 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 20 16:54:30 2025 +0000"
      },
      "message": "Merge branch \u0027stable-3.10\u0027 into stable-3.11\n\n* stable-3.10:\n  Prevent the synchronous replication of create-refs via apply-object\n  Flag ref-updates events creating a new ref\n  Fix the create/delete of ref-specs in FetchOne delta\n  Report deletions as succeeded in the fetch-ref-replicated events\n\nChange-Id: Iab9798f9327e2661e3c937c16ed8bd0b7cb677b3\n"
    },
    {
      "commit": "9f16df24c3c5aba042b1f3aeef0b0bb6610d4267",
      "tree": "464cd9c193daab261861d1fb4531ace7ca4ba5c6",
      "parents": [
        "9e649acbf65d01cbbff91d52d952a34f0af81c71"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 20 15:18:14 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 20 08:38:22 2025 -0800"
      },
      "message": "Prevent the synchronous replication of create-refs via apply-object\n\nAllow to prevent the create-refs replication events from being\nreplicated via apply-object synchronously.\n\nThis helps fixing the inconsistencies created by out-of-order execution\nof multiple create/delete of the same ref multiple times. Replicating\nmultiple non-ff updates such as create/delete refs may lead to\ninconsistencies due to the unpredictable order of their execution on the\nremote endpoints.\n\nBy default all the create-refs are still being replicated via\napply-object, however, should some refs being created and deleted\nmultiple times, it is possible to disable their synchronous replication\nusing the following setting on the replication.config:\n\n[replication]\n  applyObjectBannedCreateRefs \u003d refs/heads/myvolatile/*\n\nThe above configuration will disable the synchronous replication of all\ncreate-refs under refs/heads/myvolatile/*.\n\nBug: Issue 397737226\nChange-Id: I60577748ca127264dde937a9d242aa0338ad758d\n"
    },
    {
      "commit": "9e649acbf65d01cbbff91d52d952a34f0af81c71",
      "tree": "7e33e68ac2b79544bd9433206d76d802e974637b",
      "parents": [
        "ec59c07ac0291a02de672c86e8752853e3732d8d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 20 13:50:05 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 20 08:26:30 2025 -0800"
      },
      "message": "Flag ref-updates events creating a new ref\n\nThe creation of a new ref needs a special management\nin the way it is replicated to the remote endpoints.\n\nStore the creation into a flag of the ref-updates\nin the replication queues so that can be managed\ndifferently throughout the chain.\n\nChange-Id: I63bcaba70c1be15535d1433406a90ef85b98b63b\n"
    },
    {
      "commit": "ec59c07ac0291a02de672c86e8752853e3732d8d",
      "tree": "498ae84fbfc17b596426f8992f3c087cb883f7e5",
      "parents": [
        "625f3db11b819453b9e71c8a0e5b19075c9a455d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 20 06:29:37 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 20 08:46:47 2025 +0000"
      },
      "message": "Fix the create/delete of ref-specs in FetchOne delta\n\nWhen adding a ref-update to a ref-delete on FetchOne or\nref-delete to an existing ref-update, the existing operation\nshould be removed and only the last one should take effect.\n\nChange-Id: I1d2a3a492db0a1b45bfbdf0ce89030656ebbb338\n"
    },
    {
      "commit": "625f3db11b819453b9e71c8a0e5b19075c9a455d",
      "tree": "1130f4337af85ccf9feaee8c209fd1929829c197",
      "parents": [
        "82193b4e8cae0ae70528af041bd16e3c8d3d936d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Feb 19 07:59:17 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Feb 19 16:31:13 2025 -0800"
      },
      "message": "Report deletions as succeeded in the fetch-ref-replicated events\n\nThe refs deletions were always reported as failing on the stream event\nfetch-ref-replicated, because of a mismatch in the ref-spec reported for\ndeletions.\n\nPrefix the refs deletions with \":\", as per git specs[1], for reporting\nthem correctly in the status map and therefore generating more useful\nevents on the replication status.\n\n[1] https://git-scm.com/book/en/v2/Git-Internals-The-Refspec under\n\"Deleting References\"\n\nChange-Id: Ibd1b9c97cdc79f4972a65cba8001530bf0a64ab5\n"
    },
    {
      "commit": "b9cba775af0e2a8d9ba3d3419044f81190475022",
      "tree": "d4bc1577212aaf266ba84158c015e0e6b993f159",
      "parents": [
        "bf1d499ecce4bbdb259285650d905587307e9db2",
        "801d36fd7ec4eefc6a4eeb9580b319ae8cb9a229"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 06 18:17:12 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 06 18:17:12 2025 +0000"
      },
      "message": "Merge branch \u0027stable-3.11\u0027\n\n* stable-3.11:\n  FetchOne: consider order of create/delete events when replicating deletions\n  Consume only relevant stream events\n  Use stream events to delete repositories\n\nChange-Id: Iaf74d8b0011de854da6b92ab95f2af3f72a93aaa\n"
    },
    {
      "commit": "801d36fd7ec4eefc6a4eeb9580b319ae8cb9a229",
      "tree": "651b69ae5926a25ff5f4ef2682f88f0a291b81e0",
      "parents": [
        "43fa361181500c62a587cb236fc20bf192f4340d",
        "82193b4e8cae0ae70528af041bd16e3c8d3d936d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 06 15:23:28 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 06 18:16:55 2025 +0000"
      },
      "message": "Merge branch \u0027stable-3.10\u0027 into stable-3.11\n\n* stable-3.10:\n  FetchOne: consider order of create/delete events when replicating deletions\n  Consume only relevant stream events\n  Use stream events to delete repositories\n\nChange-Id: Ib3318cee50d8c43a3ff44bf5f50c2b73174a7c73\n"
    },
    {
      "commit": "82193b4e8cae0ae70528af041bd16e3c8d3d936d",
      "tree": "7f22bccf2f91e0e8f20ed38afaa2c58527017fbd",
      "parents": [
        "3d6db5b6dae9a56cc81eaab670a40fa505fc6a26"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 06 14:03:56 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 06 14:07:45 2025 +0000"
      },
      "message": "FetchOne: consider order of create/delete events when replicating deletions\n\nThe previous logic for detecting which refs had to be deleted as a result\nof a replication queue refspecs to be replicated did not take into\nconsideration the order of the create/delete events for the same ref.\n\nAs a result, the multiple create+delete of the same ref was potentially\ncausing missed replication events as it was only resulting into a\ndeletion.\n\nExample:\n1. create refs/foo/bar + delete refs/foo/bar \u003d\u003e delete refs/foo/bar\n2. delete refs/foo/bar + create refs/foo/bar \u003d\u003e create refs/foo/bar\n\nThe step 2. was resulting into a delete refs/foo/bar instead of a create.\n\nMake the extraction of the refs to delete more intelligent so that\nall operations are considered and properly calculated in order for\ngetting the final results of the create + delete of the same ref.\n\nBug: Issue 394760809\nChange-Id: I83d3b38cbb8e3391ca7af2af8ddea245258c4413\n"
    },
    {
      "commit": "bf1d499ecce4bbdb259285650d905587307e9db2",
      "tree": "4ec083b61ace2d73b8b89bfca4060b536febb5ff",
      "parents": [
        "840b659dc4cea58f53937336401b0cba2e868b72"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Wed May 03 17:46:37 2023 +0200"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Mon Jan 27 15:50:37 2025 +0000"
      },
      "message": "Add README.md\n\nSimply renamed about.md to README.md to aid navigation of the repo.\n\nChange-Id: I612fc43913daa9cca9acdf14dfd968237de6a2f8\n"
    },
    {
      "commit": "3d6db5b6dae9a56cc81eaab670a40fa505fc6a26",
      "tree": "2a98ab2ccc6363788389ae971df70e598286e78d",
      "parents": [
        "8e71724800ecb69efd13198deca0e5db3225ad06"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Jan 17 12:11:37 2025 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Jan 17 12:20:09 2025 +0100"
      },
      "message": "Consume only relevant stream events\n\nThe pull-replication plugin is uninterested in the vast majority of\nProjectEvent specifications, which include numerous types such as\nChangeAbandoned, CommentAdded, and FetchRefReplicatedEvent, among\nothers.\n\nInstead, pull-replication focuses solely on events that trigger the\ncreation, update, or removal of Git repositories. Specifically, these\nevents are:\n\n- ProjectDeletedEvent\n- ProjectCreatedEvent\n- RefUpdatedEvent\n- ProjectHeadUpdatedEvent\n\nAll other ProjectEvent types are unnecessary for pull-replication and\ncan be safely ignored when consuming stream events. This change ensures\nthat only relevant events are processed, improving efficiency and\nreducing noise.\n\nChange-Id: I5914f3752d44776eb6e2c25ec9b7ca60a0e6eeee\n"
    },
    {
      "commit": "8e71724800ecb69efd13198deca0e5db3225ad06",
      "tree": "cd1bfb69940017b69ae2018607a2a400700c1942",
      "parents": [
        "85f2493eb2564abb33ea75535bd0d659381eaccd"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jan 16 14:15:28 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jan 16 09:13:04 2025 -0800"
      },
      "message": "Use stream events to delete repositories\n\nThis functionality in combination with events-broker and multi-site\nprovides a backfill mechanism for REST API calls missed when the node\nwas unreachable.\n\nCo-Authored-By: Marcin Czech \u003cmaczech@gmail.com\u003e\nBug: Issue 40014693\nChange-Id: I31cb7378ba7aa5a5532ba7007fc5780db2723908\n"
    },
    {
      "commit": "840b659dc4cea58f53937336401b0cba2e868b72",
      "tree": "b876a0979038388d317d6e308aea568f86f0259c",
      "parents": [
        "62d7320afadcbcb1068836df305243f2d63816c4",
        "43fa361181500c62a587cb236fc20bf192f4340d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Dec 31 10:30:38 2024 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Dec 31 10:30:38 2024 +0000"
      },
      "message": "Merge branch \u0027stable-3.11\u0027\n\n* stable-3.11:\n  NOOP fetches are to be considered succeded\n  Reformat with GJF 1.24.0\n\nChange-Id: Ie3f8f957d6c968fc7e51695ede2c65ed471d6008\n"
    },
    {
      "commit": "43fa361181500c62a587cb236fc20bf192f4340d",
      "tree": "b876a0979038388d317d6e308aea568f86f0259c",
      "parents": [
        "62d7320afadcbcb1068836df305243f2d63816c4",
        "85f2493eb2564abb33ea75535bd0d659381eaccd"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Dec 31 10:30:03 2024 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Dec 31 10:30:03 2024 +0000"
      },
      "message": "Merge branch \u0027stable-3.10\u0027 into stable-3.11\n\n* stable-3.10:\n  NOOP fetches are to be considered succeded\n  Reformat with GJF 1.24.0\n\nChange-Id: I5c05b7838800edc0fcb230d1ad2d2b356fcc2e81\n"
    },
    {
      "commit": "85f2493eb2564abb33ea75535bd0d659381eaccd",
      "tree": "13b775455820ea8357bb5907ab65be89ba79c19c",
      "parents": [
        "e5dd42590029a7743b35bc39ccb61a05bbd86b89"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Dec 30 20:37:37 2024 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Dec 30 14:01:35 2024 -0800"
      },
      "message": "NOOP fetches are to be considered succeded\n\nWhen the FetchOne does not fetch any remote, the\nsucceeded flag was never processed, therefore the\nreplication was considered failed, even though it\ndid not raise any exception.\n\nChange-Id: Ida29ec037db4a85311d5910b68dc990731a229dc\n"
    },
    {
      "commit": "e5dd42590029a7743b35bc39ccb61a05bbd86b89",
      "tree": "b4f1d4d0f70724bcfa1362869bb867ad87cd13dd",
      "parents": [
        "face5cf0e97e1edc2b41316ac6967000d76cf8af"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Dec 30 20:50:55 2024 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Dec 30 13:52:29 2024 -0800"
      },
      "message": "Reformat with GJF 1.24.0\n\nChange-Id: Ic3ef95bc7b78d21dcd50b93d741be2135daadaf3\n"
    },
    {
      "commit": "62d7320afadcbcb1068836df305243f2d63816c4",
      "tree": "d20c391728d89b21a7fdcc8bf484b8951563b28c",
      "parents": [
        "ddd6f89a328030f3a1d2683287e160a8ac30e448",
        "face5cf0e97e1edc2b41316ac6967000d76cf8af"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 15 19:43:58 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 15 19:43:58 2024 +0100"
      },
      "message": "Merge branch \u0027stable-3.10\u0027\n\n* stable-3.10:\n  Do not SPAM pull_replication_log when updating drafts\n  ApplyObjectCommand: fix typo in exception message\n  Add tests for asynchronous fetch replication\n  Make the replication of deletion more prominent in logs\n  Do not wait for async fetches to be completed\n  Delete refs as part of the replication queue execution\n  Introduce FetchRefSpec over the whole replication queue processing\n  Ban synchronous ref-delete via apply-object(s)\n  Avoid NPE when creating a project without initial revision data\n\nChange-Id: Ie9e1ec18ae5f988f6cd56e2c3a7a61db77fd4276\n"
    },
    {
      "commit": "face5cf0e97e1edc2b41316ac6967000d76cf8af",
      "tree": "e77a0e75f77c2bb026d23ae51c713d6f2697011b",
      "parents": [
        "9bd52ec305f1e300ee2d1c6400eedbcdb3ab6787"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 15 18:22:41 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 15 18:26:48 2024 +0100"
      },
      "message": "Do not SPAM pull_replication_log when updating drafts\n\nThe update of draft comments relies on the continuous forced\nupdate of the refs/drafts-comments/\u003c\u003e in the All-Users project.\nPerforming a forced update with the apply-object is rejected\nand the operation should naturally fallback to a git fetch.\n\nThere is no need to display a full stacktrace of the exception\nand report the REJECTED execution status on the pull_replication_log.\n\nChange-Id: I566e16043a482686d455d16ac7ac865d1d8352d7\n"
    },
    {
      "commit": "9bd52ec305f1e300ee2d1c6400eedbcdb3ab6787",
      "tree": "99fb64639a1f2053b84a3f391676de18a5cf785c",
      "parents": [
        "6fdc36b353c881192e7b74eb3937b398a3efe520"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 15 18:13:28 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 15 18:13:28 2024 +0100"
      },
      "message": "ApplyObjectCommand: fix typo in exception message\n\nChange-Id: I0a9087a36fe704bedcdfe7e7ef12a3efc9aa14ec\n"
    },
    {
      "commit": "6fdc36b353c881192e7b74eb3937b398a3efe520",
      "tree": "3e8695b6e25c011c32b871bbe6803be94f365c12",
      "parents": [
        "808a76c97fc3c57b3c739b8547a4bc2ba5dd1a8d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Sep 30 23:05:35 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 01 10:48:25 2024 +0000"
      },
      "message": "Add tests for asynchronous fetch replication\n\nMake sure that ref/batch-ref updates are tested\nin asynchronous fetch replication as well, managing also\nthe situation where replication tasks are retrying and\nupdate/delete need to be applied in the correct order.\nTest timeout is set to a maximum of 2-times the replication\ndelay, rather than 2k-times which was leading to\ntests starvation after over 2h (4000 sec) of waiting for a\ncondition to be completed.\n\nChange-Id: I0984ac1af805ac79b3c4dd5e96cf122f671ba3b6\n"
    },
    {
      "commit": "808a76c97fc3c57b3c739b8547a4bc2ba5dd1a8d",
      "tree": "a092be8d03f3a5e8ab2de65f13cfd9b5014d79c8",
      "parents": [
        "254fdee451ed78cc34eb05861001db4a913d604c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 01 09:30:55 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 01 10:48:15 2024 +0000"
      },
      "message": "Make the replication of deletion more prominent in logs\n\nWhen replicating the deletion of a ref, the logs should not only\ninclude the ref name but also the fact that the fetching causes\na deletion.\n\nInclude the \"\u003c\u003cDELETED\u003e\u003e\" prefix so that the operation is more\nvisible and searchable.\n\nChange-Id: I6d5878fa2c8dad1e12c5738c0fcbf0358ff1475d\n"
    },
    {
      "commit": "254fdee451ed78cc34eb05861001db4a913d604c",
      "tree": "436959fc6af6324c386105482cdf1cabb5120f69",
      "parents": [
        "d112646fb979a89324e51c564f1a326db77de034"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 01 09:47:06 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Oct 01 11:47:51 2024 +0100"
      },
      "message": "Do not wait for async fetches to be completed\n\nFix an issue where async fetch were not executed\nin background but the incoming REST-API was blocking until\nthe fetch completion, which was unintentional for async\noperations.\n\nChange-Id: I559c92863de89e82a2c392dbfb4b254ddaf33b92\n"
    },
    {
      "commit": "d112646fb979a89324e51c564f1a326db77de034",
      "tree": "f61343b5a0289b3a7cd2026a862c93627d900960",
      "parents": [
        "1cbd490dd8fc1bd34be92f5655a8efb5c45b8cbd"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Sep 24 18:23:27 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Sep 30 16:41:34 2024 +0100"
      },
      "message": "Delete refs as part of the replication queue execution\n\nDo not delete refs synchronously in any case and use\ninstead the same queue for the regular fetch operations.\nThis allows to keep the ordering of the delete refs\nagainst any other fetch.\n\nAlso remove the now unused async DeleteRefJob because the\ndeletion is managed in the same replication queue as any\nother ref.\n\nBug: Issue 367651566\nChange-Id: I3b43c0c5fb5e9e1189bf0e3990b7981e3e68cd92\n"
    },
    {
      "commit": "1cbd490dd8fc1bd34be92f5655a8efb5c45b8cbd",
      "tree": "cddc3ab1fdacd9ef6729af9ab0725488bc754198",
      "parents": [
        "60a831a30604393b0864ab8b2e415f6dfad40704"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Sep 24 15:31:09 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Sep 30 15:21:39 2024 +0000"
      },
      "message": "Introduce FetchRefSpec over the whole replication queue processing\n\nDo not rely on simple String ref renames for tracking\nreplication tasks and keep the full RefSpec all throughout\nthe processing, expanding it further using the configured\nRefSpec. This allows to represent further fetch operations like\nrefs deletion, which is leveraged as a follow-up of this\nchange.\n\nIntroduce FetchRefSpec as a subclass of RefSpec with additional\nutility methods for translating from/to a refname and a plain\nRefSpec.\n\nChange-Id: I9141eade50058c128c0f14e33fec9d755fea16c7\n"
    },
    {
      "commit": "60a831a30604393b0864ab8b2e415f6dfad40704",
      "tree": "a4c9edbbec75b420e0c7f59068cf2028420f1218",
      "parents": [
        "2f1309300577509a89a8218a9b03491979cdad1f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Sep 24 11:18:50 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Sep 30 15:21:33 2024 +0000"
      },
      "message": "Ban synchronous ref-delete via apply-object(s)\n\nRef deletion is a non-fast-forward operation and it may\nhave different outcome with other forced operations when\nnot executed in the correct order.\n\nBan the use of ref-delete via apply-object returning a 400\nand force the client to run an asynchronous fetch instead\nwhich would also go through global-refdb validation.\nFor example, a forced update and a delete cannot be swapped.\n\nBug: Issue 367651566\nChange-Id: I978c3079fbb9db4ea5b4fcbb63df711430ad0ce8\n"
    },
    {
      "commit": "2f1309300577509a89a8218a9b03491979cdad1f",
      "tree": "f1a7e8f18d147a375a0916f8a21c6acd2b691dda",
      "parents": [
        "705d35dcdf75a863969e70eeb88b82d775df725f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Sep 30 15:53:34 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Sep 30 16:21:18 2024 +0100"
      },
      "message": "Avoid NPE when creating a project without initial revision data\n\nWhen creating a new project without an initial configuration would\ntrigger the execution of the pull-replication create project API\nwithout the revision data.\n\nAvoid to throw NPE when the repository revision data is null.\n\nChange-Id: I46950f88651d8b1b536ea58d4759c3350e44d663\n"
    },
    {
      "commit": "ddd6f89a328030f3a1d2683287e160a8ac30e448",
      "tree": "7cd197f651e9d09f4f5b554bf5e7a95667c4bb9c",
      "parents": [
        "617686251c8742e9fb43f73a7602f4f4fab8853d",
        "705d35dcdf75a863969e70eeb88b82d775df725f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jul 03 22:47:24 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jul 03 22:47:24 2024 +0100"
      },
      "message": "Merge branch \u0027stable-3.10\u0027\n\n* stable-3.10:\n  Fix incorrect documentation about excludeRefs\n  Document replicateHiddenProjects setting\n  Log stacktrace when replication fails\n\nChange-Id: Ibb7f73a16bd8aa468d7769ba9ca8ddf1f23e3985\n"
    },
    {
      "commit": "705d35dcdf75a863969e70eeb88b82d775df725f",
      "tree": "e1ad8bba0286ac1f85859d90d6c5357575977282",
      "parents": [
        "8d30806a09adcc13f03bcdc1e83c34499f7554f9",
        "d9f3a48393021f95db40994e98b5429b3b666c33"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jul 03 22:47:02 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jul 03 22:47:02 2024 +0100"
      },
      "message": "Merge branch \u0027stable-3.9\u0027 into stable-3.10\n\n* stable-3.9:\n  Fix incorrect documentation about excludeRefs\n  Document replicateHiddenProjects setting\n  Log stacktrace when replication fails\n\nChange-Id: I2eb283eb0ec6f3188947617c43269b60ae872be7\n"
    },
    {
      "commit": "d9f3a48393021f95db40994e98b5429b3b666c33",
      "tree": "b8ca362d64aa99a271536fb8b1fa82d60b76005c",
      "parents": [
        "e76f10d66bfa08e9b76d11c61aef3f14cd1a53e5",
        "410c46e59a8233f6b0d8d7f3862e8b900d25b27e"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jul 03 22:46:37 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jul 03 22:46:37 2024 +0100"
      },
      "message": "Merge branch \u0027stable-3.8\u0027 into stable-3.9\n\n* stable-3.8:\n  Fix incorrect documentation about excludeRefs\n  Document replicateHiddenProjects setting\n  Log stacktrace when replication fails\n\nChange-Id: I0cb9398616fe5becf5d43a254cc8ebde7274588b\n"
    },
    {
      "commit": "617686251c8742e9fb43f73a7602f4f4fab8853d",
      "tree": "d7814b604fd296c7d237c71164b50a0ba8a00f3a",
      "parents": [
        "75a137dd271e7aaddbafff713889b191df088f04"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jun 27 22:13:24 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jun 27 22:19:21 2024 +0100"
      },
      "message": "Bind ProjectDeletionAction and CacheDeleteHandler explicitly\n\nThe ProjectDelectionAction and its CacheDeleteHandler classes were\nimplicitly bound at their first outer-level container class\nin a non-controlled injector.\n\nIn same cases, e.g. when the pull-replication plugin was loaded\nbefore the delete-project and was accessible at top-level class\nloader, Guice was generating a just-in-time binding in the parent\nclass loader that would have then conflicted with the explicit\nbinding performed in the delete-project plugin.\n\nSee below an example of the resulting exception:\n\n1) [Guice/JitBindingAlreadySet]: A just-in-time binding to CacheDeleteHandler was already configured on a parent injector.\n  at PluginModule.configure(PluginModule.java:49)\n\n1 error\nCacheDeleteHandler: \"com.googlesource.gerrit.plugins.deleteproject.cache.CacheDeleteHandler\"\nPluginModule:       \"com.googlesource.gerrit.plugins.deleteproject.PluginModule\"\n\nBinding the classes explicitly to the injector that is loading\nthe plugin, prevents Guice from creating just-in-time binding at\nunexpected hierarchy levels.\n\nChange-Id: I11192677a3af752719df3b37c84856a976290d7c\n"
    },
    {
      "commit": "410c46e59a8233f6b0d8d7f3862e8b900d25b27e",
      "tree": "cb00e96ff18ed31e09f172ba02ac33f6e8b6a594",
      "parents": [
        "3a1836b42b9c04d46688e1b8472293964a943e16"
      ],
      "author": {
        "name": "Rikard Almgren",
        "email": "rikardal@axis.com",
        "time": "Wed Jun 26 12:37:37 2024 +0200"
      },
      "committer": {
        "name": "Rikard Almgren",
        "email": "rikardal@axis.com",
        "time": "Wed Jun 26 12:38:49 2024 +0200"
      },
      "message": "Fix incorrect documentation about excludeRefs\n\n https://gerrit-review.googlesource.com/c/plugins/pull-replication/+/341894\nChanged the default exclusion filter, but the documentation has lagged\nbehind.\n\nUpdate the documentation to reflect the actual default excludeRefs.\n\nChange-Id: I51b67aeb5931ea7fbd52d226bc1766d39a47f730\n"
    },
    {
      "commit": "75a137dd271e7aaddbafff713889b191df088f04",
      "tree": "581c969ba98a6323c0ae3870eab4eb056dd9e87e",
      "parents": [
        "f892e71ceab390c7c3c705845a888fff91dab139"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jun 13 18:10:13 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jun 13 20:34:32 2024 +0100"
      },
      "message": "Remove unused constant GERRIT_ADMIN_PROTOCOL_PREFIX\n\nThe constant GERRIT_ADMIN_PROTOCOL_PREFIX was pulled in from\nthe replication plugin but isn\u0027t used in the pull-replication\nplugin domain.\n\nChange-Id: I8c9a646936d4f602462211ab9fc732925c021252\n"
    },
    {
      "commit": "f892e71ceab390c7c3c705845a888fff91dab139",
      "tree": "b95ddc2174a6e461d9648869412a543f1c83c9cf",
      "parents": [
        "a24ad5937e9533c110d537c80de0e887b037f47d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jun 13 20:33:44 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jun 13 20:34:32 2024 +0100"
      },
      "message": "Adapt to the lastest master replication plugin\n\nThe latest master of the replication includes a new\nmethod for updating the configuration resources.\n\nChange-Id: I0fbcac4efddf7ef7c9ed023e40843d9d4ba4de91\n"
    },
    {
      "commit": "a24ad5937e9533c110d537c80de0e887b037f47d",
      "tree": "4b0d7923810aafad40b8263bb634aea9fecd0bc7",
      "parents": [
        "e020c098370540fc186c418858fe7c2b44024174",
        "8d30806a09adcc13f03bcdc1e83c34499f7554f9"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 11 23:14:47 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 11 23:14:47 2024 +0100"
      },
      "message": "Merge branch \u0027stable-3.10\u0027\n\n* stable-3.10:\n  Format BUILD file\n  Simplify the inclusion of //plugins/replication\n  Revert \"Do not include replication and delete-project into the jar\"\n  Modernize Gerrit image to version 3.10.0-almalinux9\n\nChange-Id: If503ab21b377c419f3fe92770b733f54d2a95a96\n"
    },
    {
      "commit": "8d30806a09adcc13f03bcdc1e83c34499f7554f9",
      "tree": "4b0d7923810aafad40b8263bb634aea9fecd0bc7",
      "parents": [
        "349d2dc436bd0a0d924bdff93c9d73ed2005839e"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 11 23:11:29 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 11 23:11:29 2024 +0100"
      },
      "message": "Format BUILD file\n\nChange-Id: I009a8da51f418ace65b7b8298a30b66f1c8f74a0\n"
    },
    {
      "commit": "349d2dc436bd0a0d924bdff93c9d73ed2005839e",
      "tree": "4eaf4b2885c3d4339e58a48989ec6b8e82fd2964",
      "parents": [
        "bc9f1685b765e97f6de873a0c8c1901edd38f8d2"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 11 23:10:16 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 11 23:10:16 2024 +0100"
      },
      "message": "Simplify the inclusion of //plugins/replication\n\nInclude the shaded dependency from the replication plugin\nby referring directly to the in-tree source code path.\n\nChange-Id: Ied300ed7c6d3274c2f8f59b3ef679196f1e0eba2\n"
    },
    {
      "commit": "bc9f1685b765e97f6de873a0c8c1901edd38f8d2",
      "tree": "16afbb6904745e4487151c722bcdda0bb5969397",
      "parents": [
        "91394d6e06f2d6cdefe893018b11e96710b7a355"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 11 21:29:17 2024 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 11 21:37:13 2024 +0000"
      },
      "message": "Revert \"Do not include replication and delete-project into the jar\"\n\nThis reverts commit ca08dadd63c615441672cd7d1f365f347c4822d1.\n\nReason for revert: It was the wrong choice as all the dependencies must be shaded\n\nChange-Id: Ic2a431d91ec4922fe6442c543ecb7face9f64999\n"
    },
    {
      "commit": "91394d6e06f2d6cdefe893018b11e96710b7a355",
      "tree": "2d8254c8b580d7e04a13d65dfec3fab61a94d3bb",
      "parents": [
        "951b21eff62b9f962306e7cd1844d2806bcb6fca",
        "5041682ab6f2fae2db9adc169b246bbfb986bc66"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Jun 07 14:54:34 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 07 14:54:34 2024 +0000"
      },
      "message": "Merge \"Modernize Gerrit image to version 3.10.0-almalinux9\" into stable-3.10"
    },
    {
      "commit": "e020c098370540fc186c418858fe7c2b44024174",
      "tree": "8e7361303cc69f045f8fed14982a96f0e8295041",
      "parents": [
        "fbad92a53d816f4e4e42b273c1c0869c2b6555af"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Thu Jun 06 08:19:25 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Thu Jun 06 08:21:47 2024 +0100"
      },
      "message": "Link delete-project plugin\n\nThe pull-replication plugin depends on the code from the delete-project\nplugin and requires it to be deployed to the Gerrit\u0027s `lib/` directory.\nWhich is making the pull-replication plugin deployment more complex.\n\nBy linking with delete-project plugin directly, we indluce its classes\ninto our JAR file simplifying the deployment process.\n\nChange-Id: I580a8a44d7a722a91442a1b8f6f3f653e8f40b46\n"
    },
    {
      "commit": "fbad92a53d816f4e4e42b273c1c0869c2b6555af",
      "tree": "8c0b833984cd999192d29d5d970a150d2a6cce4e",
      "parents": [
        "0ce38650c250479b27b67642fd6795a808861b12",
        "951b21eff62b9f962306e7cd1844d2806bcb6fca"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Thu Jun 06 08:16:52 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Thu Jun 06 08:16:59 2024 +0100"
      },
      "message": "Merge branch \u0027stable-3.10\u0027\n\n* origin/stable-3.10:\n  Link replication plugin\n\nChange-Id: I947b08d8478b10df436d8938d08ad5a89ba3931e\n"
    },
    {
      "commit": "5041682ab6f2fae2db9adc169b246bbfb986bc66",
      "tree": "518dbe9c05b45f2eab9f9f8c9ed552187a5c66ec",
      "parents": [
        "323ff55d47eb6434e7932ba0de761c02c81cae43"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Jun 06 09:06:32 2024 +0200"
      },
      "committer": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Jun 06 09:06:32 2024 +0200"
      },
      "message": "Modernize Gerrit image to version 3.10.0-almalinux9\n\nAs this is version compatible with pull-replication on `stable-3.10`.\n\nChange-Id: Ic0dc29004211c86fa52daaecf4f2d66afeb19321\n"
    },
    {
      "commit": "3a1836b42b9c04d46688e1b8472293964a943e16",
      "tree": "6fd4d25a887d6a725eaa08adfe256835372dcc13",
      "parents": [
        "ba04cfd8c5dfe982d2be1845fc6e2d7b4cd2b906"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue May 21 10:47:45 2024 +0100"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue May 21 10:47:45 2024 +0100"
      },
      "message": "Document replicateHiddenProjects setting\n\nChange-Id: I3ad80487c42fce93829c01d8d7dda07ee9a8aa1f\n"
    },
    {
      "commit": "0ce38650c250479b27b67642fd6795a808861b12",
      "tree": "e5eb37d290924f35ed5bcd31eea8eec289245ecb",
      "parents": [
        "601e5a0a633e6210dbb1c9be724b4c51233f74d5",
        "323ff55d47eb6434e7932ba0de761c02c81cae43"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon May 06 10:56:58 2024 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon May 06 10:56:58 2024 +0200"
      },
      "message": "Merge branch \u0027stable-3.10\u0027\n\n* stable-3.10:\n  Stop memoizing fetch refSpecs\n  Ignore remote configurations without a fetch URL\n\nChange-Id: I03f69fcfe13cfa7b7b960cd0fde4eff679d01875\n"
    },
    {
      "commit": "951b21eff62b9f962306e7cd1844d2806bcb6fca",
      "tree": "8c0b833984cd999192d29d5d970a150d2a6cce4e",
      "parents": [
        "323ff55d47eb6434e7932ba0de761c02c81cae43"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 04 23:29:49 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Łuksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sun May 05 19:16:57 2024 +0000"
      },
      "message": "Link replication plugin\n\nAfter splitting the `replication` plugin into `api` and main modules, we\ncannot relay anymore on the `replication` classes being loaded before\n`pull-replication` starts therefore we need to embedd those classes\ndirectly into our JAR file by removing `neverlink \u003d 1` from the build\nconfiguration.\n\nChange-Id: Ic632e69d247aa68ac6e15438892672edfba3e643\n"
    },
    {
      "commit": "323ff55d47eb6434e7932ba0de761c02c81cae43",
      "tree": "e5eb37d290924f35ed5bcd31eea8eec289245ecb",
      "parents": [
        "9a1e0b9c4e61d30bb2635892173817ca0c431d86"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Apr 30 09:22:36 2024 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Apr 30 19:19:29 2024 +0200"
      },
      "message": "Stop memoizing fetch refSpecs\n\nChange I29507376e introduced the memoization fetch refsSpecs.\n\nThis was intended to avoid expensive, repeated delta computations for\nfetches without an explicit delta to fetch (for example via the\n`pull-replication start` SSH command), however the memoization was\nintroduced for _both_ delta and non-delta fetches.\n\nThe problem with this approach is that it doesn\u0027t account for the fact\nthat delta is a mutable entity: `FetchOne` could be rescheduled for\nwhatever reason, consolidating new refs into a new delta.\n\nIf `FetchOne` tried to replicate again based on the new delta refs, the\nmemoizing would have caused the return of the previous delta value,\ncausing the effective loss of the refs to replicate.\n\nRemove memoization altogether. This trade offs the possible expensive\ncomputation of expanding non-delta fetches multiple times, in case of a\nreschedule, in favour of accuracy of in fetching only the relevant refs.\n\nBug: Issue 337338030\nChange-Id: I06442a66896205258b2b0411f74855465c333864\n"
    },
    {
      "commit": "9a1e0b9c4e61d30bb2635892173817ca0c431d86",
      "tree": "ad44ad989576daa7e19276d77136b4354d204eb4",
      "parents": [
        "601e5a0a633e6210dbb1c9be724b4c51233f74d5"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Apr 07 10:54:50 2024 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Apr 07 20:52:33 2024 -0700"
      },
      "message": "Ignore remote configurations without a fetch URL\n\nFix an issue where all push replication remotes were\nincorrectly classified as fetch sources and configured\nwith the default fetch URLs.\n\nChange-Id: I1f30a9926b89cd576250ce5160e633b658c6e3de\n"
    },
    {
      "commit": "601e5a0a633e6210dbb1c9be724b4c51233f74d5",
      "tree": "bf850813b63e1cb8ad5f70877296e9c60bd27827",
      "parents": [
        "a0c798e3f31b9e63b4b3bb405a6082794e4867a4"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Apr 04 18:34:43 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Apr 04 18:01:28 2024 +0000"
      },
      "message": "Adapt replication plugin dependencies to its new api package\n\nThe ReplicationConfig and other related classes are now part of the\nreplication-api plugin and need to be accessed on its own package.\n\nAlso adapt to the recent changes in Gerrit and replication plugin\non the master branch.\n\nDepends-On: https://gerrit-review.googlesource.com/c/plugins/replication/+/407431\nChange-Id: I5cce6943b424bfc89ab3b690e305ebc34f452d5d\n"
    },
    {
      "commit": "a0c798e3f31b9e63b4b3bb405a6082794e4867a4",
      "tree": "e9aec654708d124347a89e05816c90dc28e1bc2b",
      "parents": [
        "08d22e856792b9cb90ac2908652c84a32066946e"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Wed Feb 28 14:01:17 2024 +0100"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Wed Feb 28 14:03:58 2024 +0100"
      },
      "message": "Use new BrokerApi method for disconnecting consumers by groupId\n\nUse broker API to disconnect only specific consumers on topics\nby groupId, so that unloading one plugin would not impact the\nfunctionality of other plugins consuming messages on the same\ntopics.\n\nBug: Issue 327226782\nChange-Id: If87b7761598844dc0dac6289745bc54c1b7a35b9\n"
    },
    {
      "commit": "08d22e856792b9cb90ac2908652c84a32066946e",
      "tree": "5dc21ff983d9d3f8c94bf24e87b9504a4c7d9721",
      "parents": [
        "18714465f3595c9eb3340d2956ddf2e979fc8d74"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Wed Feb 28 11:13:43 2024 +0100"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Wed Feb 28 10:33:32 2024 +0000"
      },
      "message": "Use BrokerApi directly instead of ExtendedBrokerApi\n\nWith Gerrit v3.10 the BrokerApi includes the extra methods introduced\nin earlier versions as part of the ExtendedBrokerApi interface.\n\nBug: Issue 327226782\nChange-Id: Iabde315058669ec84ca86aa109c4246d58e7d5a9\n"
    },
    {
      "commit": "ba04cfd8c5dfe982d2be1845fc6e2d7b4cd2b906",
      "tree": "e4ecaa2e205cdf4772f702e6b03f93c3c176b909",
      "parents": [
        "b057a7a3457acf18dff5ca68b771998fcac5d491",
        "608055003b6aabdc43f5eb7d1d8cabce0bf572ac"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 27 15:57:52 2024 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 27 15:57:52 2024 +0000"
      },
      "message": "Merge branch \u0027stable-3.7\u0027 into stable-3.8\n\n* stable-3.7:\n  Log stacktrace when replication fails\n\nChange-Id: I41cc9b726f73c7e4ec63a0ac5140ed664c7da4ec\n"
    },
    {
      "commit": "608055003b6aabdc43f5eb7d1d8cabce0bf572ac",
      "tree": "59ad9c5a59213a7f0aa4e6fa8c692dbe01dd2f6e",
      "parents": [
        "7f2088effc7174ee4038555f7c157f91285e2d7c",
        "372786a53530c0cc701d0af856ac762c1e6b20aa"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 27 15:57:29 2024 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 27 15:57:29 2024 +0000"
      },
      "message": "Merge branch \u0027stable-3.6\u0027 into stable-3.7\n\n* stable-3.6:\n  Log stacktrace when replication fails\n\nChange-Id: I5473529fc1e6dcf73994e0cc20872c007210439a\n"
    },
    {
      "commit": "372786a53530c0cc701d0af856ac762c1e6b20aa",
      "tree": "a1a5aec4362854d454acc128992df9a6d005f174",
      "parents": [
        "5c15dbe94f364ecb992d35a60b49ebfe6feea752",
        "e86e173583dcceeaffa89ff59956582c1290617b"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 27 15:55:33 2024 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 27 15:55:33 2024 +0000"
      },
      "message": "Merge branch \u0027stable-3.5\u0027 into stable-3.6\n\n* stable-3.5:\n  Log stacktrace when replication fails\n\nChange-Id: I51f1316cc242535cd8e79a2b35c2ee4f939b3ffc\n"
    },
    {
      "commit": "18714465f3595c9eb3340d2956ddf2e979fc8d74",
      "tree": "73c2fa991842e70ec90994428e6ff300cbeffe68",
      "parents": [
        "5f6d7d4e06d71b09b81347b613d26acfe0c29673"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Feb 15 12:17:22 2024 +0100"
      },
      "committer": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Feb 22 07:25:03 2024 +0100"
      },
      "message": "Ensure that replicateOnStartup doesn\u0027t compete with fetch\n\nWhen `gerrit.replicateOnStartup` is set to `true` then corresponding\nprojects will be fetched. Ensure that projects that are subject of\nperiodic fetch are excluded from the `replicateOnStartup` schedule as\nthey are going to be fetched anyway.\n\nBug: Issue 322146240\nChange-Id: I29c6b12fc12ba0860f43a7fb2d116faa2482a1fa\n"
    },
    {
      "commit": "5f6d7d4e06d71b09b81347b613d26acfe0c29673",
      "tree": "dc9bfcc94a96df4158a435dfc7996b2e1fa82b7a",
      "parents": [
        "3abcf7c90304bca8d9bad0a403c0d96f9e610fbe"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Tue Feb 13 08:31:33 2024 +0100"
      },
      "committer": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Feb 22 07:25:03 2024 +0100"
      },
      "message": "Implement periodic fetch for source\n\nWhen `remote.NAME.fetchEvery` is configured to value greater than `0`\nfor a source then all its projects are fetched using a dedicated (called\n`PeriodicallyFetchFromSources`) pool (with a single thread).\n\nNotes:\n* dedicated pool is created only when at least single resource is\n  configured to fetch periodically from the remote\n* the check is performed on pull-replication plugin start therefore\n  plugin should be restarted in case when configuration is modified\n* all refs (according to `remote.NAME.fetch` spec) are fetched for each\n  repository\n\nBug: Issue 322146240\nChange-Id: I4ff6ca67ec4005710c28f6b9cee08d584da03936\n"
    },
    {
      "commit": "3abcf7c90304bca8d9bad0a403c0d96f9e610fbe",
      "tree": "3bc95001a90509e012be62866e01131e85af8f9d",
      "parents": [
        "508eb46416ae3c06308738cd3dcd4e9ee2dbb3e2"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Sat Feb 03 16:04:37 2024 +0100"
      },
      "committer": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Feb 22 07:24:05 2024 +0100"
      },
      "message": "Introduce the `remote.NAME.fetchEvery` configuration param\n\nCurrently, there are three methods for obtaining repository updates in\npull-replication:\n* Apply objects - This transfers updated refs and objects via the REST\n  API; optimisation on the top of Git fetch for small payloads and for\n  subset of refs\n* Trigger git fetch (as configured preference) or fallback in all cases\n  when apply object is not suitable or fails\n* Event tiggered through the event-broker.\n\nThe parameter (if configured and when implemented) enables the fourth,\ntime-based (every `n` seconds) method, that is independent of the\nREST API. It will periodically invoke git fetch to detect and retrieve\nnew data as it becomes available. Note that it is meant for the remote\nthat doesn\u0027t offer any events or webhooks to provide information about\nnew data.\n\nThe default parameter value is `0s` which means that periodical fetch\nis disabled. Note that larger time units (`m`, `h`, etc...) can be\nused to configure it conveniently.\n\nNote that enbaling periodic fetch and REST API (IOW having both `apiUrl`\nand `fetchEvery` configured) may lead to racy writes to the repository\nand as such is considered an invalid configuration. Such configuration\nresults in reported as error and prevents the plugin from starting.\n\nBug: Issue 322146240\nChange-Id: I23fc5e23aabff2dd0f053de235245614cf4706c9\n"
    },
    {
      "commit": "508eb46416ae3c06308738cd3dcd4e9ee2dbb3e2",
      "tree": "a9e089e7cf2dc331c5bba664b1cc449342d81127",
      "parents": [
        "1ba96051170d0e0c54d13cba0e80261513bf0e44",
        "0716ac536afa7c2c9d874d4f0d1ae8ff012f9c24"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Feb 09 14:50:20 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 09 14:50:20 2024 +0000"
      },
      "message": "Merge \"Allow batch-fetch endpoint to delete refs\""
    },
    {
      "commit": "1ba96051170d0e0c54d13cba0e80261513bf0e44",
      "tree": "f810f84bc7e552e03cc90247dda2aa625a7dec8d",
      "parents": [
        "99eac7db64d434319f9b308b964e82a33ca07e3a",
        "d82cc5f188f27ad2931ee5beffdfc653fd674116"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Feb 09 10:57:34 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 09 10:57:34 2024 +0000"
      },
      "message": "Merge \"Clarify healthcheck registration for lib installation\""
    },
    {
      "commit": "0716ac536afa7c2c9d874d4f0d1ae8ff012f9c24",
      "tree": "8ea4904969e22d431638d3e697c0278392ec8a94",
      "parents": [
        "d15276b70ec585146ea6ad44419e23de6ae09e74"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Jan 26 11:44:17 2024 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Thu Feb 08 22:11:46 2024 +0100"
      },
      "message": "Allow batch-fetch endpoint to delete refs\n\nCurrently ref deletion is only wired to apply-object.\n\nIf the apply-object call fails for any reason, when the client falls\nback to the fetch call, the receiving end would just attept to *fetch*\nthe deleted ref.\n\nThis is obviously destined to fail, since the remote ref does not exist\nanymore and thus cannot be fetched.\n\nChange this behaviour by hydrating the payload request with the\nadditional information of the ref deletion status.\n\nThe receving side can then opportunely schedule a deletion (rather than\na fetch) for the refs that have been deleted.\n\nNote that this change does not change the payload of the single fetch\nendpoint, so that back-compatibility can be provided during the rollout\nphase by temporarily switching off batch mode until all nodes have been\nmigrated to this version.\n\nBug: Issue 288965464\nChange-Id: I0c8591ee01caa80927ac16375ba8bd98d434ceb4\n"
    },
    {
      "commit": "d82cc5f188f27ad2931ee5beffdfc653fd674116",
      "tree": "f6d91328a0a31fc7dd4deb5a976c4f778a5de044",
      "parents": [
        "468748b6a87ad7b7f00aa96d770f6f917032baf6"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Thu Feb 08 18:28:30 2024 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Thu Feb 08 22:10:33 2024 +0100"
      },
      "message": "Clarify healthcheck registration for lib installation\n\nDocument that, when the pull-replication is installed as a lib module,\nthe healthcheck plugin needs to be made available as module too, in\norder for the healthcheck registration to work.\n\nChange-Id: Iecc2adfb61bc91ac490f116db80c7a87b4843743\n"
    },
    {
      "commit": "99eac7db64d434319f9b308b964e82a33ca07e3a",
      "tree": "d852e970ecfacb134dc1acf1dbd6739c10015d32",
      "parents": [
        "e7eb288954731a9737693ebbe15e58e5c56b7778",
        "468748b6a87ad7b7f00aa96d770f6f917032baf6"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Feb 08 19:30:28 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 08 19:30:28 2024 +0000"
      },
      "message": "Merge changes from topic \"pull-replication-healthcheck\"\n\n* changes:\n  Always report healthy when instance has caught up with outstanding tasks\n  Assess healthiness by factoring in periodOfTime\n  Implement outstanding-tasks healthcheck\n  Read heathcheck settings from plugin configuration\n"
    },
    {
      "commit": "468748b6a87ad7b7f00aa96d770f6f917032baf6",
      "tree": "34680b839137eb9022157b75a129592ea9410e2a",
      "parents": [
        "8d8f2205d79cc81cc313e0e7550cb819c9c8b167"
      ],
      "author": {
        "name": "Christoforos Miliotis",
        "email": "christoforos.miliotis.dev@gmail.com",
        "time": "Fri Jan 26 12:09:15 2024 +0000"
      },
      "committer": {
        "name": "Christoforos Miliotis",
        "email": "christoforos.miliotis.dev@gmail.com",
        "time": "Thu Feb 08 09:23:22 2024 +0000"
      },
      "message": "Always report healthy when instance has caught up with outstanding tasks\n\nOnce the instance has caught up with outstanding pull-replication tasks\non startup, we consider the node healthy and ready to receive write\ntraffic. As such, any subsequent invocations of the check should return\na healthy status, regardless of pending or inflight tasks being present.\n\nBug: Issue 312895374\nChange-Id: I831dbb723a8a3af15eb12331e6073396534cdde8\n"
    }
  ],
  "next": "8d8f2205d79cc81cc313e0e7550cb819c9c8b167"
}
