From e23abf8f031464037ba1607ae0e2f459ea0b0b0a Mon Sep 17 00:00:00 2001 From: Matthew Horridge Date: Tue, 12 Aug 2025 16:59:55 -0700 Subject: [PATCH 01/18] Better handling of timeouts --- .../webprotege/gateway/RpcRequestProcessor.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/stanford/protege/webprotege/gateway/RpcRequestProcessor.java b/src/main/java/edu/stanford/protege/webprotege/gateway/RpcRequestProcessor.java index 959d9ef..20d6dc1 100644 --- a/src/main/java/edu/stanford/protege/webprotege/gateway/RpcRequestProcessor.java +++ b/src/main/java/edu/stanford/protege/webprotege/gateway/RpcRequestProcessor.java @@ -10,6 +10,9 @@ import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.amqp.AmqpTimeoutException; +import org.springframework.amqp.core.AmqpMessageReturnedException; +import org.springframework.amqp.core.AmqpReplyTimeoutException; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatusCode; @@ -19,6 +22,8 @@ import java.util.Collections; import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; +import java.util.concurrent.TimeoutException; /** * Matthew Horridge @@ -76,9 +81,19 @@ private CompletableFuture sendMessage(RpcRequest request, String ac payload, userId); return reply .exceptionally(e -> { - // Convert all exceptions to a ResponseStatusException + if(e instanceof CompletionException completionException) { + if(completionException.getCause() instanceof AmqpReplyTimeoutException timeoutException) { + logger.error("Timeout while waiting for reply to message on channel {}: {}", request.methodName(), timeoutException.getMessage(), e); + throw new ResponseStatusException(HttpStatus.GATEWAY_TIMEOUT, "Timed out while waiting for reply to message on channel " + request.methodName(), timeoutException); + } + else if(completionException.getCause() instanceof AmqpMessageReturnedException messageReturnedException) { + logger.error("Message returned: {}", messageReturnedException.getMessage(), e); + throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "Message to channel " + request.methodName() + " was returned"); + } + } logger.error("Error during send and receive: {}. Returning failed future with ResponseStatusException HTTP 500 Internal Server Error", e.getMessage(), e); throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage(), e); + }) .thenCompose(msg -> { try { From 81ac9aba6b890bc30d4269278e69d773356e05ea Mon Sep 17 00:00:00 2001 From: Matthew Horridge Date: Tue, 12 Aug 2025 17:00:04 -0700 Subject: [PATCH 02/18] Upgrade webprotege-ipc --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f9cab0a..a108603 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ edu.stanford.protege webprotege-ipc - 2.0.1 + 2.0.2 From fd7e88f0ffb71734172382836f02e500e9ca4c6b Mon Sep 17 00:00:00 2001 From: Matthew Horridge Date: Tue, 12 Aug 2025 17:00:18 -0700 Subject: [PATCH 03/18] Set correlationId on call to get form descriptors --- .../protege/webprotege/gateway/FormsController.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/stanford/protege/webprotege/gateway/FormsController.java b/src/main/java/edu/stanford/protege/webprotege/gateway/FormsController.java index aa2ff51..fd8202d 100644 --- a/src/main/java/edu/stanford/protege/webprotege/gateway/FormsController.java +++ b/src/main/java/edu/stanford/protege/webprotege/gateway/FormsController.java @@ -39,7 +39,12 @@ public FormsController(RpcClient rpcClient, ObjectMapper objectMapper) { @GetMapping("/data/projects/{projectId}/forms") public ResponseEntity> getForms(@PathVariable(PROJECT_ID) ProjectId projectId, @AuthenticationPrincipal Jwt jwt) { - return rpcClient.call(jwt, GET_FORM_DESCRIPTORS, Map.of(PROJECT_ID, projectId)); + try { + CorrelationMDCUtil.setCorrelationId(UUID.randomUUID().toString()); + return rpcClient.call(jwt, GET_FORM_DESCRIPTORS, Map.of(PROJECT_ID, projectId)); + } finally { + CorrelationMDCUtil.clearCorrelationId(); + } } @PostMapping("/data/projects/{projectId}/forms") From a2b20822c1157af3229644811bc92fe635690ca9 Mon Sep 17 00:00:00 2001 From: Matthew Horridge Date: Tue, 12 Aug 2025 17:08:25 -0700 Subject: [PATCH 04/18] Fixes https://github.com/who-icatx/icatx-project/issues/269 --- .../stanford/protege/webprotege/gateway/FormsController.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/edu/stanford/protege/webprotege/gateway/FormsController.java b/src/main/java/edu/stanford/protege/webprotege/gateway/FormsController.java index aa2ff51..98b7d6e 100644 --- a/src/main/java/edu/stanford/protege/webprotege/gateway/FormsController.java +++ b/src/main/java/edu/stanford/protege/webprotege/gateway/FormsController.java @@ -51,6 +51,7 @@ public ResponseEntity> setForms(@PathVariable(PROJECT_ID) Pr // formDescriptors // formSelectors try { + CorrelationMDCUtil.setCorrelationId(UUID.randomUUID().toString()); var tree = objectMapper.readValue(forms, new TypeReference>() {}); var params = new LinkedHashMap<>(tree); params.put("changeRequestId", ChangeRequestId.generate()); @@ -59,6 +60,8 @@ public ResponseEntity> setForms(@PathVariable(PROJECT_ID) Pr } catch (JsonProcessingException e) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage()); + } finally { + CorrelationMDCUtil.clearCorrelationId(); } } } From 59d7af5b41861b803e79c8f9edf48773d1faddd7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Aug 2025 11:36:30 +0000 Subject: [PATCH 05/18] Bump version to 2.0.8 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f9cab0a..c1ff7a7 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ edu.stanford.protege webprotege-gwt-api-gateway - 2.0.7 + 2.0.8 webprotege-gwt-api-gateway The API Gateway for the WebProtégé GWT User Interface From 9541be1a4781ee5d4d99895bc2a9fd33467e70a9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Aug 2025 11:37:21 +0000 Subject: [PATCH 06/18] Bump version to 2.0.9 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c8ee023..0122a33 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ edu.stanford.protege webprotege-gwt-api-gateway - 2.0.8 + 2.0.9 webprotege-gwt-api-gateway The API Gateway for the WebProtégé GWT User Interface From cedd9c811ce973b07a3c8b4e101ba8a680f98ecd Mon Sep 17 00:00:00 2001 From: Matthew Horridge Date: Tue, 7 Oct 2025 18:24:50 -0700 Subject: [PATCH 07/18] Update backend-api to 4.0.0 This change is associated with https://github.com/who-icatx/icatx-project/issues/300 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0122a33..a4333b0 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ edu.stanford.protege webprotege-gwt-api-gateway - 2.0.9 + 3.0.0-SNAPSHOT webprotege-gwt-api-gateway The API Gateway for the WebProtégé GWT User Interface @@ -153,7 +153,7 @@ edu.stanford.protege webprotege-backend-api - 3.0.0 + 4.0.0 From f7fce38393a13eba58afbd31dfc75fcea900dda4 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 8 Oct 2025 01:30:41 +0000 Subject: [PATCH 08/18] Bump version to 3.0.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a4333b0..2e607a8 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ edu.stanford.protege webprotege-gwt-api-gateway - 3.0.0-SNAPSHOT + 3.0.1 webprotege-gwt-api-gateway The API Gateway for the WebProtégé GWT User Interface From 51e58f95029e0ffb2011a53430613fff804ab357 Mon Sep 17 00:00:00 2001 From: Matthew Horridge Date: Mon, 15 Dec 2025 13:49:37 +0000 Subject: [PATCH 09/18] Renames keycloak-admin path element to keycloak. See https://github.com/protegeproject/webprotege-authorization-service/pull/35 for context. --- src/main/resources/application.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 1527696..2e54c96 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -44,6 +44,6 @@ spring.security.oauth2: authorization-grant-type: authorization_code scope: openid provider.keycloak: - issuer-uri: http://webprotege-local.edu/keycloak-admin/realms/webprotege + issuer-uri: http://webprotege-local.edu/keycloak/realms/webprotege user-name-attribute: preferred_username - resourceserver.jwt.issuer-uri: http://webprotege-local.edu/keycloak-admin/realms/webprotege \ No newline at end of file + resourceserver.jwt.issuer-uri: http://webprotege-local.edu/keycloak/realms/webprotege \ No newline at end of file From 7fa4fff0c81cc1d6fbf884663b4cb0f54de2d298 Mon Sep 17 00:00:00 2001 From: Matthew Horridge Date: Mon, 15 Dec 2025 13:53:51 +0000 Subject: [PATCH 10/18] Update base image to eclipse-temurin:21-jre because openjdk:17 is no longer available --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 08240d7..b5fc73a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM openjdk:17 +FROM eclipse-temurin:21-jre MAINTAINER protege.stanford.edu EXPOSE 7777 From 95fafccfcdef4c9363ddb0ca81e6f91658911812 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 15 Dec 2025 14:06:58 +0000 Subject: [PATCH 11/18] Bump version to 3.0.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2e607a8..ab3d95f 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ edu.stanford.protege webprotege-gwt-api-gateway - 3.0.1 + 3.0.2 webprotege-gwt-api-gateway The API Gateway for the WebProtégé GWT User Interface From 00396264230df25919ace933c6faa959dff7965c Mon Sep 17 00:00:00 2001 From: "alexandru.silaghi" Date: Tue, 17 Feb 2026 10:19:01 +0200 Subject: [PATCH 12/18] debug docker --- .github/workflows/release.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 84c58c7..d7c34ee 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -69,6 +69,18 @@ jobs: git tag ${{ steps.bump.outputs.new_base_version }} git push origin HEAD:${GITHUB_REF##*/} git push origin ${{ steps.bump.outputs.new_base_version }} + - name: Debug Docker (Testcontainers) + run: | + echo "=== whoami ===" + whoami + echo "=== DOCKER_HOST ===" + echo "${DOCKER_HOST:-}" + echo "=== Docker socket ===" + ls -la /var/run/docker.sock 2>&1 || true + echo "=== docker info ===" + docker info 2>&1 || true + echo "=== docker run hello-world ===" + docker run --rm hello-world 2>&1 || true - name: Build package run: mvn --batch-mode clean package - name: Build and push image From 278da67d228f347f8b12119eefdaff6f48a8ba1d Mon Sep 17 00:00:00 2001 From: "alexandru.silaghi" Date: Tue, 17 Feb 2026 10:25:16 +0200 Subject: [PATCH 13/18] debug docker --- .github/workflows/ci.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index cd7af26..d100a29 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -19,5 +19,17 @@ jobs: with: java-version: '17' distribution: 'adopt' + - name: Debug Docker (Testcontainers) + run: | + echo "=== whoami ===" + whoami + echo "=== DOCKER_HOST ===" + echo "${DOCKER_HOST:-}" + echo "=== Docker socket ===" + ls -la /var/run/docker.sock 2>&1 || true + echo "=== docker info ===" + docker info 2>&1 || true + echo "=== docker run hello-world ===" + docker run --rm hello-world 2>&1 || true - name: Build with Maven run: mvn --batch-mode package From 49acb39f1147136a900e2034c06177a80a63892b Mon Sep 17 00:00:00 2001 From: "alexandru.silaghi" Date: Tue, 17 Feb 2026 11:01:43 +0200 Subject: [PATCH 14/18] debug docker --- .github/workflows/ci.yaml | 2 +- .github/workflows/release.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d100a29..7971b27 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -32,4 +32,4 @@ jobs: echo "=== docker run hello-world ===" docker run --rm hello-world 2>&1 || true - name: Build with Maven - run: mvn --batch-mode package + run: sg docker -c "mvn --batch-mode package" diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d7c34ee..e84f302 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -82,9 +82,9 @@ jobs: echo "=== docker run hello-world ===" docker run --rm hello-world 2>&1 || true - name: Build package - run: mvn --batch-mode clean package + run: sg docker -c "mvn --batch-mode clean package" - name: Build and push image - run: mvn --batch-mode package install + run: sg docker -c "mvn --batch-mode package install" - name: Release uses: softprops/action-gh-release@v1 env: From 800547df8aea6442a169feb99aae97c716a009cf Mon Sep 17 00:00:00 2001 From: "alexandru.silaghi" Date: Tue, 17 Feb 2026 14:24:05 +0200 Subject: [PATCH 15/18] debug docker --- .github/workflows/ci.yaml | 9 ++++++++- .github/workflows/release.yaml | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 7971b27..04738a4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -23,6 +23,10 @@ jobs: run: | echo "=== whoami ===" whoami + echo "=== groups ===" + groups + echo "=== id ===" + id echo "=== DOCKER_HOST ===" echo "${DOCKER_HOST:-}" echo "=== Docker socket ===" @@ -32,4 +36,7 @@ jobs: echo "=== docker run hello-world ===" docker run --rm hello-world 2>&1 || true - name: Build with Maven - run: sg docker -c "mvn --batch-mode package" + env: + TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock + DOCKER_HOST: unix:///var/run/docker.sock + run: mvn --batch-mode package diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e84f302..827f072 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -73,6 +73,10 @@ jobs: run: | echo "=== whoami ===" whoami + echo "=== groups ===" + groups + echo "=== id ===" + id echo "=== DOCKER_HOST ===" echo "${DOCKER_HOST:-}" echo "=== Docker socket ===" @@ -82,9 +86,15 @@ jobs: echo "=== docker run hello-world ===" docker run --rm hello-world 2>&1 || true - name: Build package - run: sg docker -c "mvn --batch-mode clean package" + env: + TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock + DOCKER_HOST: unix:///var/run/docker.sock + run: mvn --batch-mode clean package - name: Build and push image - run: sg docker -c "mvn --batch-mode package install" + env: + TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock + DOCKER_HOST: unix:///var/run/docker.sock + run: mvn --batch-mode package install - name: Release uses: softprops/action-gh-release@v1 env: From edbd9987e70f537fff354d62c48da88091ff7f1d Mon Sep 17 00:00:00 2001 From: "alexandru.silaghi" Date: Tue, 17 Feb 2026 14:28:32 +0200 Subject: [PATCH 16/18] debug docker --- .github/workflows/ci.yaml | 2 ++ .github/workflows/release.yaml | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 04738a4..9b9d588 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -39,4 +39,6 @@ jobs: env: TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock DOCKER_HOST: unix:///var/run/docker.sock + TESTCONTAINERS_RYUK_DISABLED: "true" + TESTCONTAINERS_CHECKS_DISABLE: "true" run: mvn --batch-mode package diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 827f072..0c6bfd1 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -89,11 +89,15 @@ jobs: env: TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock DOCKER_HOST: unix:///var/run/docker.sock + TESTCONTAINERS_RYUK_DISABLED: "true" + TESTCONTAINERS_CHECKS_DISABLE: "true" run: mvn --batch-mode clean package - name: Build and push image env: TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock DOCKER_HOST: unix:///var/run/docker.sock + TESTCONTAINERS_RYUK_DISABLED: "true" + TESTCONTAINERS_CHECKS_DISABLE: "true" run: mvn --batch-mode package install - name: Release uses: softprops/action-gh-release@v1 From 5ff40ffe5c4a77030539c740c7edbd777726cbdb Mon Sep 17 00:00:00 2001 From: "alexandru.silaghi" Date: Tue, 17 Feb 2026 14:34:01 +0200 Subject: [PATCH 17/18] debug docker --- .github/workflows/ci.yaml | 10 +++++----- .github/workflows/release.yaml | 15 +++++---------- pom.xml | 2 +- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9b9d588..1b15853 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -9,6 +9,11 @@ on: jobs: build: runs-on: ubuntu-latest + env: + TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock + DOCKER_HOST: unix:///var/run/docker.sock + TESTCONTAINERS_RYUK_DISABLED: "true" + TESTCONTAINERS_CHECKS_DISABLE: "true" steps: - uses: actions/checkout@v3 @@ -36,9 +41,4 @@ jobs: echo "=== docker run hello-world ===" docker run --rm hello-world 2>&1 || true - name: Build with Maven - env: - TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock - DOCKER_HOST: unix:///var/run/docker.sock - TESTCONTAINERS_RYUK_DISABLED: "true" - TESTCONTAINERS_CHECKS_DISABLE: "true" run: mvn --batch-mode package diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 0c6bfd1..720f8c9 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -12,6 +12,11 @@ jobs: outputs: version: ${{ steps.release-outputs.outputs.version }} service: ${{ steps.release-outputs.outputs.service }} + env: + TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock + DOCKER_HOST: unix:///var/run/docker.sock + TESTCONTAINERS_RYUK_DISABLED: "true" + TESTCONTAINERS_CHECKS_DISABLE: "true" steps: - name: Login to Docker Hub @@ -86,18 +91,8 @@ jobs: echo "=== docker run hello-world ===" docker run --rm hello-world 2>&1 || true - name: Build package - env: - TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock - DOCKER_HOST: unix:///var/run/docker.sock - TESTCONTAINERS_RYUK_DISABLED: "true" - TESTCONTAINERS_CHECKS_DISABLE: "true" run: mvn --batch-mode clean package - name: Build and push image - env: - TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE: /var/run/docker.sock - DOCKER_HOST: unix:///var/run/docker.sock - TESTCONTAINERS_RYUK_DISABLED: "true" - TESTCONTAINERS_CHECKS_DISABLE: "true" run: mvn --batch-mode package install - name: Release uses: softprops/action-gh-release@v1 diff --git a/pom.xml b/pom.xml index 026a9da..49b1fa8 100644 --- a/pom.xml +++ b/pom.xml @@ -97,7 +97,7 @@ org.testcontainers testcontainers - 1.18.1 + 2.0.3 test From 916c71e6cebe82bb383483e21c276447ab6493bb Mon Sep 17 00:00:00 2001 From: "alexandru.silaghi" Date: Tue, 17 Feb 2026 14:47:04 +0200 Subject: [PATCH 18/18] debug docker --- pom.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 49b1fa8..7a6ab93 100644 --- a/pom.xml +++ b/pom.xml @@ -70,7 +70,7 @@ org.testcontainers minio - 1.19.7 + 1.21.3 test @@ -97,7 +97,7 @@ org.testcontainers testcontainers - 2.0.3 + 1.21.4 test @@ -120,12 +120,13 @@ org.testcontainers junit-jupiter + 1.21.4 test org.testcontainers rabbitmq - 1.19.7 + 1.21.4 test