diff --git a/pom.xml b/pom.xml index 2c841c3ef..7b5fdf1f6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.uid2 uid2-operator - 5.53.6 + 5.53.7-alpha-191-SNAPSHOT UTF-8 diff --git a/src/main/java/com/uid2/operator/Main.java b/src/main/java/com/uid2/operator/Main.java index eed39c78c..7009a3108 100644 --- a/src/main/java/com/uid2/operator/Main.java +++ b/src/main/java/com/uid2/operator/Main.java @@ -480,6 +480,7 @@ private static Vertx createVertx() { VertxOptions vertxOptions = new VertxOptions() .setMetricsOptions(metricOptions) + .setWorkerPoolSize(10000) .setBlockedThreadCheckInterval(threadBlockedCheckInterval); return Vertx.vertx(vertxOptions); diff --git a/src/main/java/com/uid2/operator/vertx/UIDOperatorVerticle.java b/src/main/java/com/uid2/operator/vertx/UIDOperatorVerticle.java index e2edf1333..335f4a966 100644 --- a/src/main/java/com/uid2/operator/vertx/UIDOperatorVerticle.java +++ b/src/main/java/com/uid2/operator/vertx/UIDOperatorVerticle.java @@ -306,7 +306,7 @@ private void setUpEncryptedRoutes(Router mainRouter, BodyHandler bodyHandler) { mainRouter.post(V2_IDENTITY_BUCKETS.toString()).handler(bodyHandler).handler(auth.handleV1( rc -> encryptedPayloadHandler.handle(rc, this::handleBucketsV2), Role.MAPPER)); mainRouter.post(V2_IDENTITY_MAP.toString()).handler(bodyHandler).handler(auth.handleV1( - rc -> encryptedPayloadHandler.handle(rc, this::handleIdentityMapV2), Role.MAPPER)); + rc -> encryptedPayloadHandler.handleNonBlocking(vertx, rc, this::handleIdentityMapV2), Role.MAPPER)); mainRouter.post(V2_KEY_LATEST.toString()).handler(bodyHandler).handler(auth.handleV1( rc -> encryptedPayloadHandler.handle(rc, this::handleKeysRequestV2), Role.ID_READER)); mainRouter.post(V2_KEY_SHARING.toString()).handler(bodyHandler).handler(auth.handleV1( diff --git a/src/main/java/com/uid2/operator/vertx/V2PayloadHandler.java b/src/main/java/com/uid2/operator/vertx/V2PayloadHandler.java index 10627ab10..e32ca128e 100644 --- a/src/main/java/com/uid2/operator/vertx/V2PayloadHandler.java +++ b/src/main/java/com/uid2/operator/vertx/V2PayloadHandler.java @@ -14,6 +14,7 @@ import com.uid2.shared.store.ISiteStore; import io.vertx.core.Future; import io.vertx.core.Handler; +import io.vertx.core.Vertx; import io.vertx.core.buffer.Buffer; import io.vertx.core.http.HttpHeaders; import io.vertx.core.json.JsonObject; @@ -61,6 +62,31 @@ public void handle(RoutingContext rc, Handler apiHandler) { handleResponse(rc, request); } + public void handleNonBlocking(Vertx vertx, RoutingContext rc, Handler apiHandler) { + vertx.executeBlocking( + blockingPromise -> { + V2RequestUtil.V2Request request = V2RequestUtil.parseRequest(rc.body().asString(), AuthMiddleware.getAuthClient(ClientKey.class, rc), new InstantClock()); + if (!request.isValid()) { + ResponseUtil.LogInfoAndSend400Response(rc, request.errorMessage); + blockingPromise.complete(); + return; + } + rc.data().put("request", request.payload); + + apiHandler.handle(rc); + + handleResponse(rc, request); + blockingPromise.complete(request); + }, + false, + blockingResult -> { + if (blockingResult.failed()) { + ResponseUtil.LogErrorAndSendResponse(ResponseUtil.ResponseStatus.GenericError, 500, rc, ""); + } + }); + + } + public void handleAsync(RoutingContext rc, Function apiHandler) { if (!enableEncryption) { apiHandler.apply(rc);