diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilter.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilter.java index 5a6da70a..43d72436 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilter.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/GatewayMetricsFilter.java @@ -70,9 +70,9 @@ public class GatewayMetricsFilter implements GlobalFilter, Ordered { public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { Sample sample = Timer.start(meterRegistry); - return chain.filter(exchange).doOnSuccessOrError((aVoid, ex) -> { - endTimerRespectingCommit(exchange, sample); - }); + return chain.filter(exchange) + .doOnSuccess(aVoid -> endTimerRespectingCommit(exchange, sample)) + .doOnError(throwable -> endTimerRespectingCommit(exchange, sample)); } private void endTimerRespectingCommit(ServerWebExchange exchange, Sample sample) { diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactory.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactory.java index 68161d2b..50cf4292 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactory.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/filter/factory/RetryGatewayFilterFactory.java @@ -238,13 +238,8 @@ public class RetryGatewayFilterFactory // chain.filter returns a Mono Publisher publisher = chain.filter(exchange) // .log("retry-filter", Level.INFO) - .doOnSuccessOrError((aVoid, throwable) -> { - int iteration = exchange - .getAttributeOrDefault(RETRY_ITERATION_KEY, -1); - int newIteration = iteration + 1; - trace("setting new iteration in attr %d", () -> newIteration); - exchange.getAttributes().put(RETRY_ITERATION_KEY, newIteration); - }); + .doOnSuccess(aVoid -> updateIteration(exchange)) + .doOnError(throwable -> updateIteration(exchange)); if (retry != null) { // retryWhen returns a Mono @@ -263,6 +258,13 @@ public class RetryGatewayFilterFactory }; } + private void updateIteration(ServerWebExchange exchange) { + int iteration = exchange.getAttributeOrDefault(RETRY_ITERATION_KEY, -1); + int newIteration = iteration + 1; + trace("setting new iteration in attr %d", () -> newIteration); + exchange.getAttributes().put(RETRY_ITERATION_KEY, newIteration); + } + @SafeVarargs private final void trace(String message, Supplier... argSuppliers) { if (log.isTraceEnabled()) { diff --git a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/websocket/WebSocketIntegrationTests.java b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/websocket/WebSocketIntegrationTests.java index 5dcf2ed3..29efac45 100644 --- a/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/websocket/WebSocketIntegrationTests.java +++ b/spring-cloud-gateway-core/src/test/java/org/springframework/cloud/gateway/test/websocket/WebSocketIntegrationTests.java @@ -175,8 +175,9 @@ public class WebSocketIntegrationTests { .thenMany(session.receive().take(count) .map(WebSocketMessage::getPayloadAsText)) .subscribeWith(output).doOnNext(s -> logger.debug("inbound " + s)) - .then().doOnSuccessOrError((aVoid, ex) -> logger.debug( - "Done with " + (ex != null ? ex.getMessage() : "success"))); + .then().doOnSuccess(aVoid -> logger.debug("Done with success")) + .doOnError(ex -> logger.debug( + "Done with " + (ex != null ? ex.getMessage() : "error"))); }).block(Duration.ofMillis(5000)); assertThat(output.collectList().block(Duration.ofMillis(5000))) @@ -197,8 +198,9 @@ public class WebSocketIntegrationTests { .thenMany(session.receive().take(count) .map(WebSocketMessage::getPayloadAsText)) .subscribeWith(output).doOnNext(s -> logger.debug("inbound " + s)) - .then().doOnSuccessOrError((aVoid, ex) -> logger.debug( - "Done with " + (ex != null ? ex.getMessage() : "success"))); + .then().doOnSuccess(aVoid -> logger.debug("Done with success")) + .doOnError(ex -> logger.debug( + "Done with " + (ex != null ? ex.getMessage() : "error"))); }).block(Duration.ofMillis(5000)); assertThat(output.collectList().block(Duration.ofMillis(5000)))