From 3709281f5f3ff0a51ddf72263e8fd17aea08f2d2 Mon Sep 17 00:00:00 2001 From: maximthomas Date: Mon, 2 Feb 2026 10:15:55 +0300 Subject: [PATCH 01/14] Fix OpenDJ three nodes replication setup stuck --- .github/workflows/build.yml | 31 +++++++++++++++++++ .../service/ReplicationDomain.java | 8 ----- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8e3e02f896..6f59a28a29 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -251,7 +251,38 @@ jobs: docker exec test 'sh' '-c' '/opt/opendj/bin/start-ds' docker exec test 'sh' '-c' '/opt/opendj/bin/rebuild-index --bindDN "cn=Directory Manager" --bindPassword password --baseDN "dc=example2,dc=com" --rebuildAll --trustAll' docker exec test 'sh' '-c' '/opt/opendj/bin/ldapsearch --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "ou=people,dc=example2,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 10000' + docker kill test + - name: Docker replication test + shell: bash + run: | + docker network create opendj-network + + echo "Starting OpenDJ nodes" + docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} + docker run -it --rm -d --name opendj-2 -h opendj2.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} + docker run -it --rm -d --name opendj-3 -h opendj3.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} + + echo "Waiting for OpenDJ nodes to be healthy" + timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-1 | grep -q \"healthy\"; do sleep 10; done' + timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-3 | grep -q \"healthy\"; do sleep 10; done' + timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-3 | grep -q \"healthy\"; do sleep 10; done' + + echo "Setup replication on node 2" + docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ + './dsreplication enable --no-prompt --host1 opendj1.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 8989 \ + --host2 opendj2.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ + --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' + + echo "Setup replication on node 3" + docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ + './dsreplication enable --no-prompt --host1 opendj2.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 9989 \ + --host2 opendj3.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ + --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' + + docker kill opendj-1 opendj-2 opendj-3 + + docker network rm opendj-network build-docker-alpine: runs-on: 'ubuntu-latest' services: diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/service/ReplicationDomain.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/service/ReplicationDomain.java index 9c5bed70e5..6f7d9cc61e 100644 --- a/opendj-server-legacy/src/main/java/org/opends/server/replication/service/ReplicationDomain.java +++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/service/ReplicationDomain.java @@ -42,7 +42,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; @@ -3031,13 +3030,6 @@ public void disableService() { broker.stop(); } - try { - exportThreadPool.shutdown(); - boolean timedOut = exportThreadPool.awaitTermination(100, TimeUnit.SECONDS); - logger.info(LocalizableMessage.raw("export pool termination timed out: " + timedOut)); - } catch (InterruptedException e) { - // Give up waiting. - } // Stop the listener thread if (listenerThread != null) From b7ae4ebce19e7fb2738b4d1e5cb0e4ce4c269219 Mon Sep 17 00:00:00 2001 From: maximthomas Date: Mon, 2 Feb 2026 11:37:01 +0300 Subject: [PATCH 02/14] Build OpenDJ Docker image from local package --- .github/workflows/build.yml | 9 +++++++-- opendj-packages/opendj-docker/Dockerfile | 6 ++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6f59a28a29..0b64ad2ed3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -196,6 +196,7 @@ jobs: opendj-dsml-servlet/target/*.war opendj-rest2ldap-servlet/target/*.war build-docker: + needs: build-maven runs-on: 'ubuntu-latest' services: registry: @@ -226,11 +227,14 @@ jobs: uses: docker/setup-buildx-action@v3 with: driver-opts: network=host + - name: Prepare Dockerfile + shell: bash + run: sed -i -E '/^#COPY openam-(server|distribution)\//s/^#//' ./openam-distribution/openam-distribution-docker/Dockerfile - name: Build image (default) uses: docker/build-push-action@v5 continue-on-error: true with: - context: ./opendj-packages/opendj-docker + context: . file: ./opendj-packages/opendj-docker/Dockerfile build-args: | VERSION=${{ env.release_version }} @@ -284,6 +288,7 @@ jobs: docker network rm opendj-network build-docker-alpine: + needs: build-maven runs-on: 'ubuntu-latest' services: registry: @@ -319,7 +324,7 @@ jobs: continue-on-error: true uses: docker/build-push-action@v5 with: - context: ./opendj-packages/opendj-docker + context: . file: ./opendj-packages/opendj-docker/Dockerfile-alpine build-args: | VERSION=${{ env.release_version }} diff --git a/opendj-packages/opendj-docker/Dockerfile b/opendj-packages/opendj-docker/Dockerfile index bd3fcdb163..adbb7a442c 100644 --- a/opendj-packages/opendj-docker/Dockerfile +++ b/opendj-packages/opendj-docker/Dockerfile @@ -23,11 +23,13 @@ ARG VERSION WORKDIR /opt +#COPY opendj-server-legacy/target/package/opendj-*.zip . + RUN apt-get update \ && apt-get install -y --no-install-recommends curl unzip \ && if [ -z "$VERSION" ] ; then VERSION="$(curl -i -o - --silent https://api.github.com/repos/OpenIdentityPlatform/OpenDJ/releases/latest | grep -m1 "\"name\"" | cut -d\" -f4)"; fi \ - && curl -L https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/$VERSION/opendj-$VERSION.zip --output opendj-$VERSION.zip \ - && unzip opendj-$VERSION.zip \ + && if [ ! -f "/opt/opendj-*.zip" ]; then echo file exists && curl -L https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/$VERSION/opendj-$VERSION.zip --output opendj-$VERSION.zip; fi \ + && unzip opendj-*.zip \ && apt-get remove -y --purge curl unzip \ && rm -rf /var/lib/apt/lists/* \ && rm -r opendj-*.zip \ From 00f50b89031ffabde11989880b0f096ad6a6ce29 Mon Sep 17 00:00:00 2001 From: maximthomas Date: Mon, 2 Feb 2026 13:04:50 +0300 Subject: [PATCH 03/14] Add Docker alpine test --- .github/workflows/build.yml | 39 ++++++++++++++++++- .../opendj-docker/Dockerfile-alpine | 4 +- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0b64ad2ed3..a8982d5553 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -51,7 +51,7 @@ jobs: timeout-minutes: 180 env: MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10 - run: mvn --batch-mode --errors --update-snapshots verify --file pom.xml ${{ steps.failsafe.outputs.MAVEN_PROFILE_FLAG }} + run: mvn --batch-mode --errors --update-snapshots verify --file pom.xml ${{ steps.failsafe.outputs.MAVEN_PROFILE_FLAG }} -DskipTests=true -P \!man-pages - name: Test on Unix if: runner.os != 'Windows' run: | @@ -229,7 +229,7 @@ jobs: driver-opts: network=host - name: Prepare Dockerfile shell: bash - run: sed -i -E '/^#COPY openam-(server|distribution)\//s/^#//' ./openam-distribution/openam-distribution-docker/Dockerfile + run: sed -i -E '/^#COPY opendj-server-legacy\//s/^#//' ./opendj-packages/opendj-docker/Dockerfile - name: Build image (default) uses: docker/build-push-action@v5 continue-on-error: true @@ -287,6 +287,7 @@ jobs: docker kill opendj-1 opendj-2 opendj-3 docker network rm opendj-network + build-docker-alpine: needs: build-maven runs-on: 'ubuntu-latest' @@ -320,6 +321,9 @@ jobs: uses: docker/setup-buildx-action@v3 with: driver-opts: network=host + - name: Prepare Dockerfile + shell: bash + run: sed -i -E '/^#COPY opendj-server-legacy\//s/^#//' ./openam-distribution/openam-distribution-docker/Dockerfile-alpine - name: Build image continue-on-error: true uses: docker/build-push-action@v5 @@ -345,4 +349,35 @@ jobs: docker exec test 'sh' '-c' '/opt/opendj/bin/start-ds' docker exec test 'sh' '-c' '/opt/opendj/bin/rebuild-index --bindDN "cn=Directory Manager" --bindPassword password --baseDN "dc=example2,dc=com" --rebuildAll --trustAll' docker exec test 'sh' '-c' '/opt/opendj/bin/ldapsearch --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "ou=people,dc=example2,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 10000' + docker kill test + + - name: Docker replication test + shell: bash + run: | + docker network create opendj-network + + echo "Starting OpenDJ nodes" + docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine + docker run -it --rm -d --name opendj-2 -h opendj2.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine + docker run -it --rm -d --name opendj-3 -h opendj3.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine + echo "Waiting for OpenDJ nodes to be healthy" + timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-1 | grep -q \"healthy\"; do sleep 10; done' + timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-3 | grep -q \"healthy\"; do sleep 10; done' + timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-3 | grep -q \"healthy\"; do sleep 10; done' + + echo "Setup replication on node 2" + docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ + './dsreplication enable --no-prompt --host1 opendj1.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 8989 \ + --host2 opendj2.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ + --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' + + echo "Setup replication on node 3" + docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ + './dsreplication enable --no-prompt --host1 opendj2.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 9989 \ + --host2 opendj3.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ + --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' + + docker kill opendj-1 opendj-2 opendj-3 + + docker network rm opendj-network diff --git a/opendj-packages/opendj-docker/Dockerfile-alpine b/opendj-packages/opendj-docker/Dockerfile-alpine index a6b191aa45..62d015f394 100644 --- a/opendj-packages/opendj-docker/Dockerfile-alpine +++ b/opendj-packages/opendj-docker/Dockerfile-alpine @@ -23,11 +23,13 @@ ARG VERSION WORKDIR /opt +#COPY opendj-server-legacy/target/package/opendj-*.zip . + RUN apk add --update --no-cache --virtual builddeps curl unzip \ && apk upgrade --update --no-cache \ && apk add bash openjdk11 \ && if [ -z "$VERSION" ] ; then VERSION="$(curl -i -o - --silent https://api.github.com/repos/OpenIdentityPlatform/OpenDJ/releases/latest | grep -m1 "\"name\"" | cut -d\" -f4)"; fi \ - && curl -L https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/$VERSION/opendj-$VERSION.zip --output opendj-$VERSION.zip \ + && if [ ! -f "/opt/opendj-*.zip" ]; then echo file exists && curl -L https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/$VERSION/opendj-$VERSION.zip --output opendj-$VERSION.zip; fi \ && unzip opendj-$VERSION.zip \ && apk del builddeps \ && apk del curl \ From b7f719f0e910726bcfdca73da9ff38466aaf3603 Mon Sep 17 00:00:00 2001 From: maximthomas Date: Mon, 2 Feb 2026 13:50:51 +0300 Subject: [PATCH 04/14] fix test errors --- .github/workflows/build.yml | 8 ++++---- opendj-packages/opendj-docker/Dockerfile | 2 +- opendj-packages/opendj-docker/Dockerfile-alpine | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a8982d5553..1ec52e9fa5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -229,12 +229,12 @@ jobs: driver-opts: network=host - name: Prepare Dockerfile shell: bash - run: sed -i -E '/^#COPY opendj-server-legacy\//s/^#//' ./opendj-packages/opendj-docker/Dockerfile + run: sed -i -E '/^#COPY target\//s/^#//' ./opendj-packages/opendj-docker/Dockerfile - name: Build image (default) uses: docker/build-push-action@v5 continue-on-error: true with: - context: . + context: ./opendj-packages/opendj-docker file: ./opendj-packages/opendj-docker/Dockerfile build-args: | VERSION=${{ env.release_version }} @@ -323,12 +323,12 @@ jobs: driver-opts: network=host - name: Prepare Dockerfile shell: bash - run: sed -i -E '/^#COPY opendj-server-legacy\//s/^#//' ./openam-distribution/openam-distribution-docker/Dockerfile-alpine + run: sed -i -E '/^#COPY target\//s/^#//' ./opendj-packages/opendj-docker/Dockerfile-alpine - name: Build image continue-on-error: true uses: docker/build-push-action@v5 with: - context: . + context: ./opendj-packages/opendj-docker file: ./opendj-packages/opendj-docker/Dockerfile-alpine build-args: | VERSION=${{ env.release_version }} diff --git a/opendj-packages/opendj-docker/Dockerfile b/opendj-packages/opendj-docker/Dockerfile index adbb7a442c..a500342826 100644 --- a/opendj-packages/opendj-docker/Dockerfile +++ b/opendj-packages/opendj-docker/Dockerfile @@ -23,7 +23,7 @@ ARG VERSION WORKDIR /opt -#COPY opendj-server-legacy/target/package/opendj-*.zip . +#COPY target/opendj-*.zip . RUN apt-get update \ && apt-get install -y --no-install-recommends curl unzip \ diff --git a/opendj-packages/opendj-docker/Dockerfile-alpine b/opendj-packages/opendj-docker/Dockerfile-alpine index 62d015f394..5e2b0fa204 100644 --- a/opendj-packages/opendj-docker/Dockerfile-alpine +++ b/opendj-packages/opendj-docker/Dockerfile-alpine @@ -23,7 +23,7 @@ ARG VERSION WORKDIR /opt -#COPY opendj-server-legacy/target/package/opendj-*.zip . +#COPY target/opendj-*.zip . RUN apk add --update --no-cache --virtual builddeps curl unzip \ && apk upgrade --update --no-cache \ From 2fbce099797db213bf3fa9bd69c6c41c130f3bb8 Mon Sep 17 00:00:00 2001 From: maximthomas Date: Mon, 2 Feb 2026 14:47:49 +0300 Subject: [PATCH 05/14] fix test errors --- .github/workflows/build.yml | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1ec52e9fa5..fdbe6c8e4e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -204,10 +204,10 @@ jobs: ports: - 5000:5000 steps: - - uses: actions/checkout@v4 + - name: Download artifacts + uses: actions/download-artifact@v4 with: - fetch-depth: 0 - submodules: recursive + name: ubuntu-latest-11 - name: Get latest release version shell: bash run: | @@ -229,7 +229,9 @@ jobs: driver-opts: network=host - name: Prepare Dockerfile shell: bash - run: sed -i -E '/^#COPY target\//s/^#//' ./opendj-packages/opendj-docker/Dockerfile + run: | + cp ./opendj-server-legacy/target/package/opendj-*.zip ./opendj-packages/opendj-docker + sed -i -E '/^#COPY target\//s/^#//' ./opendj-packages/opendj-docker/Dockerfile - name: Build image (default) uses: docker/build-push-action@v5 continue-on-error: true @@ -297,10 +299,10 @@ jobs: ports: - 5000:5000 steps: - - uses: actions/checkout@v4 + - name: Download artifacts + uses: actions/download-artifact@v4 with: - fetch-depth: 0 - submodules: recursive + name: ubuntu-latest-11 - name: Get latest release version shell: bash run: | @@ -323,7 +325,9 @@ jobs: driver-opts: network=host - name: Prepare Dockerfile shell: bash - run: sed -i -E '/^#COPY target\//s/^#//' ./opendj-packages/opendj-docker/Dockerfile-alpine + run: | + cp ./opendj-server-legacy/target/package/opendj-*.zip ./opendj-packages/opendj-docker + sed -i -E '/^#COPY target\//s/^#//' ./opendj-packages/opendj-docker/Dockerfile-alpine - name: Build image continue-on-error: true uses: docker/build-push-action@v5 From a8c02d26caeadd72fe95283ee4ad045c080d240d Mon Sep 17 00:00:00 2001 From: maximthomas Date: Mon, 2 Feb 2026 15:00:02 +0300 Subject: [PATCH 06/14] fix test errors --- .github/workflows/build.yml | 4 ++-- opendj-packages/opendj-docker/Dockerfile | 2 +- opendj-packages/opendj-docker/Dockerfile-alpine | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fdbe6c8e4e..6d1259546a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -231,7 +231,7 @@ jobs: shell: bash run: | cp ./opendj-server-legacy/target/package/opendj-*.zip ./opendj-packages/opendj-docker - sed -i -E '/^#COPY target\//s/^#//' ./opendj-packages/opendj-docker/Dockerfile + sed -i -E '/^#COPY opendj/s/^#//' ./opendj-packages/opendj-docker/Dockerfile - name: Build image (default) uses: docker/build-push-action@v5 continue-on-error: true @@ -327,7 +327,7 @@ jobs: shell: bash run: | cp ./opendj-server-legacy/target/package/opendj-*.zip ./opendj-packages/opendj-docker - sed -i -E '/^#COPY target\//s/^#//' ./opendj-packages/opendj-docker/Dockerfile-alpine + sed -i -E '/^#COPY opendj/s/^#//' ./opendj-packages/opendj-docker/Dockerfile-alpine - name: Build image continue-on-error: true uses: docker/build-push-action@v5 diff --git a/opendj-packages/opendj-docker/Dockerfile b/opendj-packages/opendj-docker/Dockerfile index a500342826..5c321af1d8 100644 --- a/opendj-packages/opendj-docker/Dockerfile +++ b/opendj-packages/opendj-docker/Dockerfile @@ -23,7 +23,7 @@ ARG VERSION WORKDIR /opt -#COPY target/opendj-*.zip . +#COPY opendj-*.zip . RUN apt-get update \ && apt-get install -y --no-install-recommends curl unzip \ diff --git a/opendj-packages/opendj-docker/Dockerfile-alpine b/opendj-packages/opendj-docker/Dockerfile-alpine index 5e2b0fa204..d2ba2ae07f 100644 --- a/opendj-packages/opendj-docker/Dockerfile-alpine +++ b/opendj-packages/opendj-docker/Dockerfile-alpine @@ -23,7 +23,7 @@ ARG VERSION WORKDIR /opt -#COPY target/opendj-*.zip . +#COPY opendj-*.zip . RUN apk add --update --no-cache --virtual builddeps curl unzip \ && apk upgrade --update --no-cache \ From 17ed36009109abbd47ea591255f3ecd215aee504 Mon Sep 17 00:00:00 2001 From: maximthomas Date: Mon, 2 Feb 2026 15:31:33 +0300 Subject: [PATCH 07/14] fix test errors --- .github/workflows/build.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6d1259546a..83580c6f82 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -131,7 +131,7 @@ jobs: opendj-server-legacy/target/package/opendj/bin/stop-ds rm -rf opendj-server-legacy/target/package/opendj/{config,db,changelogDb,logs,tmp} - name: Test LDAP in Cassandra - if: runner.os == 'Linux' + if: false #runner.os == 'Linux' run: | docker run --rm -it -d -p 9042:9042 --name cassandra cassandra timeout 5m bash -c 'until docker logs cassandra | grep -q "Created default superuser role"; do sleep 5; done' @@ -146,7 +146,7 @@ jobs: opendj-server-legacy/target/package/opendj/bin/stop-ds rm -rf opendj-server-legacy/target/package/opendj/{config,db,changelogDb,logs,tmp} - name: Test LDAP in Postgres - if: runner.os == 'Linux' + if: false #runner.os == 'Linux' run: | docker run --rm -it -d -p 5432:5432 -e POSTGRES_DB=database_name -e POSTGRES_PASSWORD=password --name postgres postgres timeout 5m bash -c 'until docker logs postgres | grep -q "database system is ready to accept connections"; do sleep 5; done' @@ -230,6 +230,7 @@ jobs: - name: Prepare Dockerfile shell: bash run: | + unzip -d ./opendj-packages/opendj-docker ./opendj-packages/opendj-docker/target/Dockerfile.zip cp ./opendj-server-legacy/target/package/opendj-*.zip ./opendj-packages/opendj-docker sed -i -E '/^#COPY opendj/s/^#//' ./opendj-packages/opendj-docker/Dockerfile - name: Build image (default) @@ -326,6 +327,7 @@ jobs: - name: Prepare Dockerfile shell: bash run: | + unzip -d ./opendj-packages/opendj-docker ./opendj-packages/opendj-docker/target/Dockerfile.zip cp ./opendj-server-legacy/target/package/opendj-*.zip ./opendj-packages/opendj-docker sed -i -E '/^#COPY opendj/s/^#//' ./opendj-packages/opendj-docker/Dockerfile-alpine - name: Build image From 35692d2ef29ab2190ecb2ce725799fc33a629ae1 Mon Sep 17 00:00:00 2001 From: maximthomas Date: Mon, 2 Feb 2026 17:58:58 +0300 Subject: [PATCH 08/14] fix build errors --- opendj-packages/opendj-docker/Dockerfile | 10 ++++++---- opendj-packages/opendj-docker/Dockerfile-alpine | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/opendj-packages/opendj-docker/Dockerfile b/opendj-packages/opendj-docker/Dockerfile index 5c321af1d8..643769ce31 100644 --- a/opendj-packages/opendj-docker/Dockerfile +++ b/opendj-packages/opendj-docker/Dockerfile @@ -19,20 +19,22 @@ ENV BACKEND_TYPE="je" ENV BACKEND_DB_DIRECTORY="db" #ENV SETUP_ARGS +ARG OPENDJ_DIST_FILENAME=opendj.zip + ARG VERSION WORKDIR /opt -#COPY opendj-*.zip . +#COPY opendj-*.zip $OPENDJ_DIST_FILENAME RUN apt-get update \ && apt-get install -y --no-install-recommends curl unzip \ && if [ -z "$VERSION" ] ; then VERSION="$(curl -i -o - --silent https://api.github.com/repos/OpenIdentityPlatform/OpenDJ/releases/latest | grep -m1 "\"name\"" | cut -d\" -f4)"; fi \ - && if [ ! -f "/opt/opendj-*.zip" ]; then echo file exists && curl -L https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/$VERSION/opendj-$VERSION.zip --output opendj-$VERSION.zip; fi \ - && unzip opendj-*.zip \ + && if [ ! -f "$OPENDJ_DIST_FILENAME" ]; then echo file exists && curl -L https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/$VERSION/opendj-$VERSION.zip --output $OPENDJ_DIST_FILENAME; fi \ + && unzip $OPENDJ_DIST_FILENAME \ && apt-get remove -y --purge curl unzip \ && rm -rf /var/lib/apt/lists/* \ - && rm -r opendj-*.zip \ + && rm -r $OPENDJ_DIST_FILENAME \ && groupadd $OPENDJ_USER \ && useradd -m -r -u 1001 -g $OPENDJ_USER $OPENDJ_USER \ && install -d -o $OPENDJ_USER /opt/opendj/data \ diff --git a/opendj-packages/opendj-docker/Dockerfile-alpine b/opendj-packages/opendj-docker/Dockerfile-alpine index d2ba2ae07f..1a3ece3bc4 100644 --- a/opendj-packages/opendj-docker/Dockerfile-alpine +++ b/opendj-packages/opendj-docker/Dockerfile-alpine @@ -19,22 +19,24 @@ ENV BACKEND_TYPE="je" ENV BACKEND_DB_DIRECTORY="db" #ENV SETUP_ARGS +ARG OPENDJ_DIST_FILENAME=opendj.zip + ARG VERSION WORKDIR /opt -#COPY opendj-*.zip . +#COPY opendj-*.zip $OPENDJ_DIST_FILENAME RUN apk add --update --no-cache --virtual builddeps curl unzip \ && apk upgrade --update --no-cache \ && apk add bash openjdk11 \ && if [ -z "$VERSION" ] ; then VERSION="$(curl -i -o - --silent https://api.github.com/repos/OpenIdentityPlatform/OpenDJ/releases/latest | grep -m1 "\"name\"" | cut -d\" -f4)"; fi \ - && if [ ! -f "/opt/opendj-*.zip" ]; then echo file exists && curl -L https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/$VERSION/opendj-$VERSION.zip --output opendj-$VERSION.zip; fi \ - && unzip opendj-$VERSION.zip \ + && if [ ! -f "$OPENDJ_DIST_FILENAME" ]; then echo file exists && curl -L https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/$VERSION/opendj-$VERSION.zip --output $OPENDJ_DIST_FILENAME; fi \ + && unzip $OPENDJ_DIST_FILENAME \ && apk del builddeps \ && apk del curl \ && apk del unzip \ - && rm -r opendj-$VERSION.zip \ + && rm -r $OPENDJ_DIST_FILENAME \ && addgroup -S $OPENDJ_USER \ && adduser -S -u 1001 -G $OPENDJ_USER $OPENDJ_USER \ && install -d -o $OPENDJ_USER /opt/opendj/data \ From 39222c0b584f8840645f472b8d0cde47869edf15 Mon Sep 17 00:00:00 2001 From: Maxim Thomas Date: Mon, 2 Feb 2026 18:23:00 +0300 Subject: [PATCH 09/14] Update build.yml --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 83580c6f82..0ab2a1010c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -51,7 +51,7 @@ jobs: timeout-minutes: 180 env: MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10 - run: mvn --batch-mode --errors --update-snapshots verify --file pom.xml ${{ steps.failsafe.outputs.MAVEN_PROFILE_FLAG }} -DskipTests=true -P \!man-pages + run: mvn --batch-mode --errors --update-snapshots verify --file pom.xml ${{ steps.failsafe.outputs.MAVEN_PROFILE_FLAG }} - name: Test on Unix if: runner.os != 'Windows' run: | @@ -131,7 +131,7 @@ jobs: opendj-server-legacy/target/package/opendj/bin/stop-ds rm -rf opendj-server-legacy/target/package/opendj/{config,db,changelogDb,logs,tmp} - name: Test LDAP in Cassandra - if: false #runner.os == 'Linux' + if: runner.os == 'Linux' run: | docker run --rm -it -d -p 9042:9042 --name cassandra cassandra timeout 5m bash -c 'until docker logs cassandra | grep -q "Created default superuser role"; do sleep 5; done' @@ -146,7 +146,7 @@ jobs: opendj-server-legacy/target/package/opendj/bin/stop-ds rm -rf opendj-server-legacy/target/package/opendj/{config,db,changelogDb,logs,tmp} - name: Test LDAP in Postgres - if: false #runner.os == 'Linux' + if: runner.os == 'Linux' run: | docker run --rm -it -d -p 5432:5432 -e POSTGRES_DB=database_name -e POSTGRES_PASSWORD=password --name postgres postgres timeout 5m bash -c 'until docker logs postgres | grep -q "database system is ready to accept connections"; do sleep 5; done' From ad1b1d0102ccc5f835b34b88498e75cef06a0d7c Mon Sep 17 00:00:00 2001 From: maximthomas Date: Mon, 2 Feb 2026 19:31:19 +0300 Subject: [PATCH 10/14] Intialize replication in the workflow replication test --- .github/workflows/build.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0ab2a1010c..917577d765 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -280,12 +280,20 @@ jobs: './dsreplication enable --no-prompt --host1 opendj1.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 8989 \ --host2 opendj2.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' + + docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ + './dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource opendj1.example.org \ + --portSource 4444 --hostDestination opendj2.example.org --portDestination 4444 -X -n' echo "Setup replication on node 3" docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ './dsreplication enable --no-prompt --host1 opendj2.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 9989 \ --host2 opendj3.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' + + docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ + './dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource opendj2.example.org \ + --portSource 4444 --hostDestination opendj3.example.org --portDestination 4444 -X -n' docker kill opendj-1 opendj-2 opendj-3 From 93cc22b7dbebf710a3c2b072277f3f5ac5fb21fc Mon Sep 17 00:00:00 2001 From: maximthomas Date: Tue, 3 Feb 2026 10:10:37 +0300 Subject: [PATCH 11/14] Add replication completion test --- .github/workflows/build.yml | 30 +++++++++++++++++-- .../service/ReplicationDomain.java | 2 +- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 917577d765..9547ad402d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -266,7 +266,7 @@ jobs: docker network create opendj-network echo "Starting OpenDJ nodes" - docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} + docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network -e SAMPLE_DATA=100 localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} docker run -it --rm -d --name opendj-2 -h opendj2.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} docker run -it --rm -d --name opendj-3 -h opendj3.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} @@ -284,6 +284,10 @@ jobs: docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ './dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource opendj1.example.org \ --portSource 4444 --hostDestination opendj2.example.org --portDestination 4444 -X -n' + + docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ + './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ + --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100' echo "Setup replication on node 3" docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ @@ -294,6 +298,10 @@ jobs: docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ './dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource opendj2.example.org \ --portSource 4444 --hostDestination opendj3.example.org --portDestination 4444 -X -n' + + docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ + './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ + --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100' docker kill opendj-1 opendj-2 opendj-3 @@ -371,7 +379,7 @@ jobs: docker network create opendj-network echo "Starting OpenDJ nodes" - docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine + docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network -e SAMPLE_DATA=100 localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine docker run -it --rm -d --name opendj-2 -h opendj2.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine docker run -it --rm -d --name opendj-3 -h opendj3.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine @@ -381,16 +389,34 @@ jobs: timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-3 | grep -q \"healthy\"; do sleep 10; done' echo "Setup replication on node 2" + docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ './dsreplication enable --no-prompt --host1 opendj1.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 8989 \ --host2 opendj2.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' + + docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ + './dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource opendj1.example.org \ + --portSource 4444 --hostDestination opendj2.example.org --portDestination 4444 -X -n' + + docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ + './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ + --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100' echo "Setup replication on node 3" + docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ './dsreplication enable --no-prompt --host1 opendj2.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 9989 \ --host2 opendj3.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' + + docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ + './dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource opendj2.example.org \ + --portSource 4444 --hostDestination opendj3.example.org --portDestination 4444 -X -n' + + docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ + './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ + --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100' docker kill opendj-1 opendj-2 opendj-3 diff --git a/opendj-server-legacy/src/main/java/org/opends/server/replication/service/ReplicationDomain.java b/opendj-server-legacy/src/main/java/org/opends/server/replication/service/ReplicationDomain.java index 6f7d9cc61e..8781e700bf 100644 --- a/opendj-server-legacy/src/main/java/org/opends/server/replication/service/ReplicationDomain.java +++ b/opendj-server-legacy/src/main/java/org/opends/server/replication/service/ReplicationDomain.java @@ -13,7 +13,7 @@ * * Copyright 2008-2010 Sun Microsystems, Inc. * Portions Copyright 2011-2016 ForgeRock AS. - * Portions Copyright 2025 3A Systems LLC. + * Portions Copyright 2025-2026 3A Systems LLC. */ package org.opends.server.replication.service; From 951195ab76559ed67b63ee238af93f80c5232afb Mon Sep 17 00:00:00 2001 From: maximthomas Date: Tue, 3 Feb 2026 12:18:29 +0300 Subject: [PATCH 12/14] Increase sample data size to 100000 for replication integration test --- .github/workflows/build.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9547ad402d..6bf73772cb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -235,7 +235,6 @@ jobs: sed -i -E '/^#COPY opendj/s/^#//' ./opendj-packages/opendj-docker/Dockerfile - name: Build image (default) uses: docker/build-push-action@v5 - continue-on-error: true with: context: ./opendj-packages/opendj-docker file: ./opendj-packages/opendj-docker/Dockerfile @@ -266,7 +265,7 @@ jobs: docker network create opendj-network echo "Starting OpenDJ nodes" - docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network -e SAMPLE_DATA=100 localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} + docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network -e SAMPLE_DATA=100000 localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} docker run -it --rm -d --name opendj-2 -h opendj2.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} docker run -it --rm -d --name opendj-3 -h opendj3.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} @@ -287,7 +286,7 @@ jobs: docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ - --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100' + --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100000' echo "Setup replication on node 3" docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ @@ -301,7 +300,7 @@ jobs: docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ - --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100' + --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100000' docker kill opendj-1 opendj-2 opendj-3 @@ -347,7 +346,6 @@ jobs: cp ./opendj-server-legacy/target/package/opendj-*.zip ./opendj-packages/opendj-docker sed -i -E '/^#COPY opendj/s/^#//' ./opendj-packages/opendj-docker/Dockerfile-alpine - name: Build image - continue-on-error: true uses: docker/build-push-action@v5 with: context: ./opendj-packages/opendj-docker @@ -379,7 +377,7 @@ jobs: docker network create opendj-network echo "Starting OpenDJ nodes" - docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network -e SAMPLE_DATA=100 localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine + docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network -e SAMPLE_DATA=100000 localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine docker run -it --rm -d --name opendj-2 -h opendj2.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine docker run -it --rm -d --name opendj-3 -h opendj3.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine @@ -401,7 +399,7 @@ jobs: docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ - --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100' + --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100000' echo "Setup replication on node 3" @@ -416,7 +414,7 @@ jobs: docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ - --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100' + --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100000' docker kill opendj-1 opendj-2 opendj-3 From 60d881905cf991b73bf915d320f383dc5e410f35 Mon Sep 17 00:00:00 2001 From: maximthomas Date: Tue, 3 Feb 2026 13:07:06 +0300 Subject: [PATCH 13/14] Integration replication test in multiple JREs --- .github/workflows/build.yml | 55 +++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6bf73772cb..f29966f37a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -160,6 +160,61 @@ jobs: opendj-server-legacy/target/package/opendj/bin/ldapsearch --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 10000 opendj-server-legacy/target/package/opendj/bin/stop-ds rm -rf opendj-server-legacy/target/package/opendj/{config,db,changelogDb,logs,tmp} + - name: Test replication + if: runner.os != 'Windows' + run: | + cp -r ./opendj-server-legacy/target/package/opendj ./opendj-server-legacy/target/package/opendj1 + cp -r ./opendj-server-legacy/target/package/opendj ./opendj-server-legacy/target/package/opendj2 + cp -r ./opendj-server-legacy/target/package/opendj ./opendj-server-legacy/target/package/opendj3 + + echo "Setup OpenDJ-1" + + opendj-server-legacy/target/package/opendj1/setup -h localhost -p 1389 --ldapsPort 1636 --adminConnectorPort 4444 --enableStartTLS \ + --generateSelfSignedCertificate --rootUserDN "cn=Directory Manager" --rootUserPassword password --baseDN dc=example,dc=com \ + --sampleData 100000 --cli --acceptLicense --no-prompt + + echo "Setup OpenDJ-2 with replication" + + opendj-server-legacy/target/package/opendj2/setup -h localhost -p 2389 --ldapsPort 2636 --adminConnectorPort 24444 --enableStartTLS \ + --generateSelfSignedCertificate --rootUserDN "cn=Directory Manager" --rootUserPassword password --baseDN dc=example,dc=com \ + --addBaseEntry --cli --acceptLicense --no-prompt + + opendj-server-legacy/target/package/opendj2/bin/dsreplication enable --no-prompt --host1 localhost --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 8989 \ + --host2 localhost --port2 24444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 28989 \ + --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile + + opendj-server-legacy/target/package/opendj2/bin/dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource localhost \ + --portSource 4444 --hostDestination localhost --portDestination 24444 -X -n + + opendj-server-legacy/target/package/opendj2/bin/ldapsearch --port 2636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ + --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100000 + + echo "Setup OpenDJ-3 with replication" + + opendj-server-legacy/target/package/opendj3/setup -h localhost -p 3389 --ldapsPort 3636 --adminConnectorPort 34444 --enableStartTLS \ + --generateSelfSignedCertificate --rootUserDN "cn=Directory Manager" --rootUserPassword password --baseDN dc=example,dc=com \ + --addBaseEntry --cli --acceptLicense --no-prompt + + opendj-server-legacy/target/package/opendj3/bin/dsreplication enable --no-prompt --host1 localhost --port1 24444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 28989 \ + --host2 localhost --port2 34444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 38989 \ + --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile + + opendj-server-legacy/target/package/opendj3/bin/dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource localhost \ + --portSource 24444 --hostDestination localhost --portDestination 34444 -X -n + + opendj-server-legacy/target/package/opendj2/bin/ldapsearch --port 3636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ + --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100000 + + echo "Stopping and removing OpenDJ instances" + + opendj-server-legacy/target/package/opendj1/bin/stop-ds + opendj-server-legacy/target/package/opendj2/bin/stop-ds + opendj-server-legacy/target/package/opendj3/bin/stop-ds + + rm -rf ./opendj-server-legacy/target/package/opendj1 + rm -rf ./opendj-server-legacy/target/package/opendj2 + rm -rf ./opendj-server-legacy/target/package/opendj3 + - name: Test on Windows if: runner.os == 'Windows' run: | From ae711bdeca6d8273da88a848fb48f242a2a33c4d Mon Sep 17 00:00:00 2001 From: maximthomas Date: Tue, 3 Feb 2026 13:12:01 +0300 Subject: [PATCH 14/14] remove docker replication test --- .github/workflows/build.yml | 96 ------------------------------------- 1 file changed, 96 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f29966f37a..c6492b9904 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -314,53 +314,6 @@ jobs: docker exec test 'sh' '-c' '/opt/opendj/bin/ldapsearch --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "ou=people,dc=example2,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 10000' docker kill test - - name: Docker replication test - shell: bash - run: | - docker network create opendj-network - - echo "Starting OpenDJ nodes" - docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network -e SAMPLE_DATA=100000 localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} - docker run -it --rm -d --name opendj-2 -h opendj2.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} - docker run -it --rm -d --name opendj-3 -h opendj3.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }} - - echo "Waiting for OpenDJ nodes to be healthy" - timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-1 | grep -q \"healthy\"; do sleep 10; done' - timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-3 | grep -q \"healthy\"; do sleep 10; done' - timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-3 | grep -q \"healthy\"; do sleep 10; done' - - echo "Setup replication on node 2" - docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ - './dsreplication enable --no-prompt --host1 opendj1.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 8989 \ - --host2 opendj2.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ - --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' - - docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ - './dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource opendj1.example.org \ - --portSource 4444 --hostDestination opendj2.example.org --portDestination 4444 -X -n' - - docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ - './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ - --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100000' - - echo "Setup replication on node 3" - docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ - './dsreplication enable --no-prompt --host1 opendj2.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 9989 \ - --host2 opendj3.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ - --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' - - docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ - './dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource opendj2.example.org \ - --portSource 4444 --hostDestination opendj3.example.org --portDestination 4444 -X -n' - - docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ - './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ - --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100000' - - docker kill opendj-1 opendj-2 opendj-3 - - docker network rm opendj-network - build-docker-alpine: needs: build-maven runs-on: 'ubuntu-latest' @@ -425,52 +378,3 @@ jobs: docker exec test 'sh' '-c' '/opt/opendj/bin/rebuild-index --bindDN "cn=Directory Manager" --bindPassword password --baseDN "dc=example2,dc=com" --rebuildAll --trustAll' docker exec test 'sh' '-c' '/opt/opendj/bin/ldapsearch --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "ou=people,dc=example2,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 10000' docker kill test - - - name: Docker replication test - shell: bash - run: | - docker network create opendj-network - - echo "Starting OpenDJ nodes" - docker run -it --rm -d --name opendj-1 -h opendj1.example.org --network opendj-network -e SAMPLE_DATA=100000 localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine - docker run -it --rm -d --name opendj-2 -h opendj2.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine - docker run -it --rm -d --name opendj-3 -h opendj3.example.org --network opendj-network localhost:5000/${GITHUB_REPOSITORY,,}:${{ env.release_version }}-alpine - - echo "Waiting for OpenDJ nodes to be healthy" - timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-1 | grep -q \"healthy\"; do sleep 10; done' - timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-3 | grep -q \"healthy\"; do sleep 10; done' - timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" opendj-3 | grep -q \"healthy\"; do sleep 10; done' - - echo "Setup replication on node 2" - - docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ - './dsreplication enable --no-prompt --host1 opendj1.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 8989 \ - --host2 opendj2.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ - --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' - - docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ - './dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource opendj1.example.org \ - --portSource 4444 --hostDestination opendj2.example.org --portDestination 4444 -X -n' - - docker exec -w '/opt/opendj/bin' opendj-2 /bin/bash -c \ - './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ - --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100000' - - echo "Setup replication on node 3" - - docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ - './dsreplication enable --no-prompt --host1 opendj2.example.org --port1 4444 --bindDN1 "cn=Directory Manager" --bindPassword1 password --replicationPort1 9989 \ - --host2 opendj3.example.org --port2 4444 --bindDN2 "cn=Directory Manager" --bindPassword2 password --replicationPort2 8989 \ - --adminUID admin --adminPassword password --baseDN dc=example,dc=com --trustAll --noPropertiesFile' - - docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ - './dsreplication initialize --baseDN dc=example,dc=com --adminUID admin --adminPassword password --hostSource opendj2.example.org \ - --portSource 4444 --hostDestination opendj3.example.org --portDestination 4444 -X -n' - - docker exec -w '/opt/opendj/bin' opendj-3 /bin/bash -c \ - './ldapsearch --port 1636 --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll \ - --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 100000' - - docker kill opendj-1 opendj-2 opendj-3 - - docker network rm opendj-network