From 0e76a58824beb342e07e82c09321c43a267f808d Mon Sep 17 00:00:00 2001 From: chengyouling Date: Fri, 12 Sep 2025 16:58:20 +0800 Subject: [PATCH 1/3] [#4939] fixed when consumer times out and disconnects, the metrics_log and slow_log status statistics show 200 error --- .../invocation/AbstractInvocationMeters.java | 3 ++- .../metrics/core/publish/PublishUtils.java | 22 +++++++++++++++++++ .../core/publish/SlowInvocationLogger.java | 2 +- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java index 9491120d3ea..1f29a0253e0 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java @@ -22,6 +22,7 @@ import org.apache.servicecomb.core.event.InvocationFinishEvent; import org.apache.servicecomb.core.event.InvocationStartEvent; import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx; +import org.apache.servicecomb.metrics.core.publish.PublishUtils; import org.apache.servicecomb.swagger.invocation.Response; import com.netflix.spectator.api.Id; @@ -69,7 +70,7 @@ protected AbstractInvocationMeter getOrCreateMeters(Invocation invocation, Respo MeterInvocationConst.TAG_OPERATION, invocation.getMicroserviceQualifiedName(), MeterInvocationConst.TAG_STATUS, - String.valueOf(response.getStatusCode())); + PublishUtils.refactorStatus(invocation, response)); AbstractInvocationMeter meter = createMeter(id); SpectatorUtils.registerMeter(registry, meter); diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java index 3196120d7b4..5b5a22c5678 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java @@ -19,16 +19,24 @@ import java.util.HashMap; import java.util.Map; +import org.apache.servicecomb.core.Invocation; import org.apache.servicecomb.foundation.metrics.publish.spectator.MeasurementNode; +import org.apache.servicecomb.foundation.vertx.http.VertxServerRequestToHttpServletRequest; import org.apache.servicecomb.metrics.core.meter.invocation.MeterInvocationConst; import org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerf; import org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroup; import org.apache.servicecomb.metrics.core.publish.model.invocation.OperationPerfGroups; import org.apache.servicecomb.metrics.core.publish.model.invocation.PerfInfo; +import org.apache.servicecomb.swagger.invocation.Response; import com.netflix.spectator.api.Statistic; +import io.vertx.core.http.HttpServerResponse; +import io.vertx.ext.web.RoutingContext; + public final class PublishUtils { + public static final String EMPTY_RESULT = "-"; + private PublishUtils() { } @@ -73,4 +81,18 @@ public static void addOperationPerfGroups(OperationPerfGroups operationPerfGroup OperationPerf operationPerf = createOperationPerf(operation, statusNode); group.addOperationPerf(operationPerf); } + + public static String refactorStatus(Invocation invocation, Response response) { + if (invocation.getRequestEx() instanceof VertxServerRequestToHttpServletRequest) { + RoutingContext context = ((VertxServerRequestToHttpServletRequest) invocation.getRequestEx()).getContext(); + if (context == null) { + return String.valueOf(response.getStatusCode()); + } + HttpServerResponse contextResponse = context.response(); + if (contextResponse.closed() && !contextResponse.ended()) { + return EMPTY_RESULT; + } + } + return String.valueOf(response.getStatusCode()); + } } diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/SlowInvocationLogger.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/SlowInvocationLogger.java index a72f56250a2..3faf950d3f2 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/SlowInvocationLogger.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/SlowInvocationLogger.java @@ -102,7 +102,7 @@ private void logSlowProducer(Invocation invocation, Response response, Operation restOperationMeta.getHttpMethod(), restOperationMeta.getAbsolutePath(), collectClientAddress(invocation), - response.getStatusCode(), + PublishUtils.refactorStatus(invocation, response), formatTime(stageTrace.calcTotalTime()), formatTime(stageTrace.calcInvocationPrepareTime()), formatTime(stageTrace.calcThreadPoolQueueTime()), From cd8da92b60de246077ad37cbf697d7d4ed457b31 Mon Sep 17 00:00:00 2001 From: chengyouling Date: Fri, 12 Sep 2025 17:18:47 +0800 Subject: [PATCH 2/3] adjust key status --- .../metrics/core/meter/invocation/AbstractInvocationMeters.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java index 1f29a0253e0..d517de17018 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeters.java @@ -56,7 +56,7 @@ protected AbstractInvocationMeter getOrCreateMeters(Invocation invocation, Respo .append(invocationName) .append(invocation.getRealTransportName()) .append(invocation.getMicroserviceQualifiedName()) - .append(response.getStatusCode()); + .append(PublishUtils.refactorStatus(invocation, response)); if (keyBuilder.length() > maxKeyLen) { maxKeyLen = keyBuilder.length(); } From e01eb236c824c3064da1efeb9870df2b86e9ba73 Mon Sep 17 00:00:00 2001 From: chengyouling Date: Fri, 12 Sep 2025 18:07:33 +0800 Subject: [PATCH 3/3] add status compare --- .../apache/servicecomb/metrics/core/publish/PublishUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java index 5b5a22c5678..940d0f51dd3 100644 --- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java +++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/publish/PublishUtils.java @@ -89,7 +89,7 @@ public static String refactorStatus(Invocation invocation, Response response) { return String.valueOf(response.getStatusCode()); } HttpServerResponse contextResponse = context.response(); - if (contextResponse.closed() && !contextResponse.ended()) { + if (response.getStatusCode() == 200 && contextResponse.closed() && !contextResponse.ended()) { return EMPTY_RESULT; } }