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);