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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7a333088e [SCB-2857]Fix endpoint metrics not properly destroy and 
throw exception (#4209)
7a333088e is described below

commit 7a333088ed0835b6b4ba222d4ea8147a7ff5e802
Author: liubao68 <[email protected]>
AuthorDate: Tue Jan 30 14:55:20 2024 +0800

    [SCB-2857]Fix endpoint metrics not properly destroy and throw exception 
(#4209)
---
 .../servicecomb/metrics/core/meter/vertx/EndpointMeter.java    |  2 +-
 .../metrics/core/meter/vertx/HttpClientEndpointMeter.java      | 10 +++++++++-
 .../metrics/core/meter/vertx/ServerEndpointMeter.java          | 10 +++++++++-
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/EndpointMeter.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/EndpointMeter.java
index b758dbebf..e7f960b6d 100644
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/EndpointMeter.java
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/EndpointMeter.java
@@ -49,7 +49,7 @@ public class EndpointMeter implements PeriodMeter {
 
   protected DefaultEndpointMetric metric;
 
-  private final MeterRegistry meterRegistry;
+  protected final MeterRegistry meterRegistry;
 
   private final Gauge connectCount;
 
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/HttpClientEndpointMeter.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/HttpClientEndpointMeter.java
index ad3143de3..a8e75dc01 100644
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/HttpClientEndpointMeter.java
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/HttpClientEndpointMeter.java
@@ -27,15 +27,23 @@ import io.micrometer.core.instrument.Tags;
 public class HttpClientEndpointMeter extends EndpointMeter {
   public static final String QUEUE_COUNT = "queueCount";
 
+  private final Gauge queueCount;
+
   private long currentQueueCount;
 
   public HttpClientEndpointMeter(MeterRegistry meterRegistry, String name, 
Tags tags, DefaultEndpointMetric metric) {
     super(meterRegistry, name, tags, metric);
-    Gauge.builder(name, () -> currentQueueCount)
+    queueCount = Gauge.builder(name, () -> currentQueueCount)
         .tags(tags.and(Tag.of(STATISTIC, QUEUE_COUNT), Tag.of(ADDRESS, 
metric.getAddress())))
         .register(meterRegistry);
   }
 
+  @Override
+  public void destroy() {
+    super.destroy();
+    this.meterRegistry.remove(queueCount);
+  }
+
   @Override
   public void poll(long msNow, long secondInterval) {
     super.poll(msNow, secondInterval);
diff --git 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/ServerEndpointMeter.java
 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/ServerEndpointMeter.java
index aa16f3eed..bee385ef9 100644
--- 
a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/ServerEndpointMeter.java
+++ 
b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/vertx/ServerEndpointMeter.java
@@ -27,17 +27,25 @@ import io.micrometer.core.instrument.Tags;
 public class ServerEndpointMeter extends EndpointMeter {
   public static final String REJECT_BY_CONNECTION_LIMIT = 
"rejectByConnectionLimit";
 
+  private final Gauge rejectByConnectionLimit;
+
   private long lastRejectByConnectionLimit;
 
   private long currentRejectByConnectionLimit;
 
   public ServerEndpointMeter(MeterRegistry meterRegistry, String name, Tags 
tags, DefaultEndpointMetric metric) {
     super(meterRegistry, name, tags, metric);
-    Gauge.builder(name, () -> currentRejectByConnectionLimit)
+    rejectByConnectionLimit = Gauge.builder(name, () -> 
currentRejectByConnectionLimit)
         .tags(tags.and(Tag.of(STATISTIC, REJECT_BY_CONNECTION_LIMIT), 
Tag.of(ADDRESS, metric.getAddress())))
         .register(meterRegistry);
   }
 
+  @Override
+  public void destroy() {
+    super.destroy();
+    this.meterRegistry.remove(rejectByConnectionLimit);
+  }
+
   @Override
   public void poll(long msNow, long secondInterval) {
     super.poll(msNow, secondInterval);

Reply via email to