This is an automated email from the ASF dual-hosted git repository.

youling1128 pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/2.8.x by this push:
     new c5453245f [#4939] fixed when consumer times out and disconnects, the 
metrics_log and slow_log status statistics show 200 error (#4941)
c5453245f is described below

commit c5453245fe061bf7cf908aa25dbb174e0823565b
Author: Alex <[email protected]>
AuthorDate: Sat Oct 11 14:33:07 2025 +0800

    [#4939] fixed when consumer times out and disconnects, the metrics_log and 
slow_log status statistics show 200 error (#4941)
---
 .../meter/invocation/AbstractInvocationMeters.java |  5 +++--
 .../metrics/core/publish/PublishUtils.java         | 22 ++++++++++++++++++++++
 .../metrics/core/publish/SlowInvocationLogger.java |  2 +-
 3 files changed, 26 insertions(+), 3 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 9491120d3..d517de170 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.Invocation;
 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;
@@ -55,7 +56,7 @@ public abstract class AbstractInvocationMeters {
         .append(invocationName)
         .append(invocation.getRealTransportName())
         .append(invocation.getMicroserviceQualifiedName())
-        .append(response.getStatusCode());
+        .append(PublishUtils.refactorStatus(invocation, response));
     if (keyBuilder.length() > maxKeyLen) {
       maxKeyLen = keyBuilder.length();
     }
@@ -69,7 +70,7 @@ public abstract class AbstractInvocationMeters {
           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 3196120d7..940d0f51d 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 @@ package org.apache.servicecomb.metrics.core.publish;
 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 final class PublishUtils {
     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 (response.getStatusCode() == 200 && 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 a72f56250..3faf950d3 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 @@ public class SlowInvocationLogger {
         restOperationMeta.getHttpMethod(),
         restOperationMeta.getAbsolutePath(),
         collectClientAddress(invocation),
-        response.getStatusCode(),
+        PublishUtils.refactorStatus(invocation, response),
         formatTime(stageTrace.calcTotalTime()),
         formatTime(stageTrace.calcInvocationPrepareTime()),
         formatTime(stageTrace.calcThreadPoolQueueTime()),

Reply via email to