From c4d91fab9e005179803a3ab978e8f2896a5a5b16 Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Wed, 28 Oct 2026 16:25:28 +0000
Subject: [PATCH] [#1208] Restart a directory server during the load of the replication convergence run, in rows of its own (#1233)

---
 .github/workflows/build.yml |   27 +++++++++++++++++++++------
 1 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 8de66c6..06fca12 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1124,11 +1124,11 @@
 
   docker-convergence:
     # #1090: writes to every directory server of a replication topology at once, then checks
-    # that the replicas hold the same data; next to docker-test, on the image of build-docker
+    # that the replicas hold the same data; next to docker-test, on the image of build-docker.
+    # Each row but the base one disturbs the topology during the load in one way (#1208)
     needs: build-docker
     # a red row turns the Build run red, and deploy.yml then skips the snapshot deploy and the
-    # publishing of the docs of a push to master: rs534 fails until #1206 is fixed and can fail
-    # until #1215 is, combined can fail until #1195 is
+    # publishing of the docs of a push to master
     runs-on: 'ubuntu-latest'
     permissions:
       contents: read
@@ -1136,11 +1136,21 @@
       fail-fast: false
       matrix:
         topology: [rs534, combined]
+        # none: the base run; restart-ds: a directory server restarts during the load
+        disturbance: [none, restart-ds]
     steps:
       - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
         with:
           sparse-checkout: |
             .github/scripts/replication
+      # what a green row does not show: what a disturbance window of the errors log check
+      # expects - nothing it expects is logged outside the window there, and a base row has
+      # none - and where restart-ds opens and closes the window
+      - name: Self-tests of the errors log check and of restart-ds
+        shell: bash
+        run: |
+          .github/scripts/replication/selftest-replication-errors.sh
+          .github/scripts/replication/selftest-disturb-restart-ds.sh
       - name: Download the image
         uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
         with:
@@ -1149,11 +1159,15 @@
       - name: Load the image
         shell: bash
         run: docker load -i "$RUNNER_TEMP/image/image.tar"
-      - name: Convergence run (${{ matrix.topology }})
+      - name: Convergence run (${{ matrix.topology }}, ${{ matrix.disturbance }})
         shell: bash
         env:
           TOPOLOGY: ${{ matrix.topology }}
-          DURATION: "1800"
+          DISTURBANCE: ${{ matrix.disturbance }}
+          # a disturbed row runs half the load of the base one: what it is after happens around
+          # the disturbance, a third of the way in, and for as long as it runs it holds one of
+          # the runners the whole organization shares
+          DURATION: ${{ matrix.disturbance == 'none' && '1800' || '900' }}
           # the replicas fall behind during the load and catch up after it: 900 s at 325 and 65
           # a second converged in 396 s (run 38944365728), 1800 s at 423 and 85 in 2489 s (run
           # 39043600905), the backlog growing faster than the load above the replay capacity; a
@@ -1166,7 +1180,8 @@
         if: always()
         uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
         with:
-          name: convergence-${{ matrix.topology }}
+          # the base rows keep the names they had before the disturbed ones came
+          name: convergence-${{ matrix.topology }}${{ matrix.disturbance != 'none' && format('-{0}', matrix.disturbance) || '' }}
           path: ${{ runner.temp }}/replication-out
           if-no-files-found: warn
           retention-days: 5

--
Gitblit v1.10.0