This is an automated email from the ASF dual-hosted git repository.
tanxinyu pushed a commit to branch rel/1.0
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.0 by this push:
new 1513e16b0a [IOTDB-5231]Add the handle of exception when metric
reporter failed to start (#8523) (#8559)
1513e16b0a is described below
commit 1513e16b0a1bf64016be344d56a18b58473a5694
Author: ZhangHongYin <[email protected]>
AuthorDate: Wed Dec 21 19:21:57 2022 +0800
[IOTDB-5231]Add the handle of exception when metric reporter failed to
start (#8523) (#8559)
* Add exception process of reporter
* Optimize the code
* Unify the start of reporter
(cherry picked from commit 7b92bd295e1fd9afdd86b162d28080fe9c6a6a13)
---
.../reporter/iotdb/InternalIoTDBReporter.java | 2 +-
.../iotdb/MemoryInternalIoTDBReporter.java | 4 +-
.../reporter/iotdb/SessionIoTDBReporter.java | 46 +++++++++++-----------
.../reporter/prometheus/PrometheusReporter.java | 33 ++++++++--------
.../micrometer/reporter/MicrometerJmxReporter.java | 6 ++-
.../commons/service/metric/MetricService.java | 7 +++-
.../db/service/metrics/IoTDBInternalReporter.java | 24 +++++------
7 files changed, 64 insertions(+), 58 deletions(-)
diff --git
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/InternalIoTDBReporter.java
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/InternalIoTDBReporter.java
index 0af98d579d..f6d66e2733 100644
---
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/InternalIoTDBReporter.java
+++
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/InternalIoTDBReporter.java
@@ -34,7 +34,7 @@ public abstract class InternalIoTDBReporter extends
IoTDBReporter {
/**
* Add autoGauge into internal reporter
*
- * @param gauge autoGauge
+ * @param autoGauge autoGauge
* @param name the name of autoGauge
* @param tags the tags of autoGauge
*/
diff --git
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/MemoryInternalIoTDBReporter.java
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/MemoryInternalIoTDBReporter.java
index 82fbb7e220..a4e2bd1a0a 100644
---
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/MemoryInternalIoTDBReporter.java
+++
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/MemoryInternalIoTDBReporter.java
@@ -42,12 +42,12 @@ public class MemoryInternalIoTDBReporter extends
InternalIoTDBReporter {
@Override
public boolean start() {
- return false;
+ return true;
}
@Override
public boolean stop() {
- return false;
+ return true;
}
@Override
diff --git
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/SessionIoTDBReporter.java
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/SessionIoTDBReporter.java
index c29f0a231c..5b7f271952 100644
---
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/SessionIoTDBReporter.java
+++
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/iotdb/SessionIoTDBReporter.java
@@ -80,30 +80,30 @@ public class SessionIoTDBReporter extends IoTDBReporter {
@Override
@SuppressWarnings("unsafeThreadSchedule")
public boolean start() {
- if (currentServiceFuture == null) {
- currentServiceFuture =
- service.scheduleAtFixedRate(
- () -> {
- try {
- Map<String, Map<String, Object>> values = new HashMap<>();
- for (Map.Entry<MetricInfo, IMetric> metricEntry :
- metricManager.getAllMetrics().entrySet()) {
- String prefix =
IoTDBMetricsUtils.generatePath(metricEntry.getKey());
- Map<String, Object> value = new HashMap<>();
- metricEntry.getValue().constructValueMap(value);
- values.put(prefix, value);
- }
- writeMetricsToIoTDB(values, System.currentTimeMillis());
- } catch (Throwable t) {
- LOGGER.error("Schedule task failed", t);
- }
- },
- 1,
- MetricConfigDescriptor.getInstance()
- .getMetricConfig()
- .getAsyncCollectPeriodInSecond(),
- TimeUnit.SECONDS);
+ if (currentServiceFuture != null) {
+ LOGGER.warn("IoTDB Session Reporter already start");
+ return false;
}
+ currentServiceFuture =
+ service.scheduleAtFixedRate(
+ () -> {
+ try {
+ Map<String, Map<String, Object>> values = new HashMap<>();
+ for (Map.Entry<MetricInfo, IMetric> metricEntry :
+ metricManager.getAllMetrics().entrySet()) {
+ String prefix =
IoTDBMetricsUtils.generatePath(metricEntry.getKey());
+ Map<String, Object> value = new HashMap<>();
+ metricEntry.getValue().constructValueMap(value);
+ values.put(prefix, value);
+ }
+ writeMetricsToIoTDB(values, System.currentTimeMillis());
+ } catch (Throwable t) {
+ LOGGER.error("Schedule task failed", t);
+ }
+ },
+ 1,
+
MetricConfigDescriptor.getInstance().getMetricConfig().getAsyncCollectPeriodInSecond(),
+ TimeUnit.SECONDS);
return true;
}
diff --git
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/prometheus/PrometheusReporter.java
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/prometheus/PrometheusReporter.java
index 57e8b837b5..551bd28332 100644
---
a/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/prometheus/PrometheusReporter.java
+++
b/metrics/interface/src/main/java/org/apache/iotdb/metrics/reporter/prometheus/PrometheusReporter.java
@@ -68,17 +68,23 @@ public class PrometheusReporter implements Reporter {
if (httpServer != null) {
return false;
}
- httpServer =
- HttpServer.create()
- .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 2000)
- .channelGroup(new
DefaultChannelGroup(GlobalEventExecutor.INSTANCE))
- .port(metricConfig.getPrometheusReporterPort())
- .route(
- routes ->
- routes.get(
- "/metrics",
- (request, response) ->
response.sendString(Mono.just(scrape()))))
- .bindNow();
+ try {
+ httpServer =
+ HttpServer.create()
+ .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 2000)
+ .channelGroup(new
DefaultChannelGroup(GlobalEventExecutor.INSTANCE))
+ .port(metricConfig.getPrometheusReporterPort())
+ .route(
+ routes ->
+ routes.get(
+ "/metrics",
+ (request, response) ->
response.sendString(Mono.just(scrape()))))
+ .bindNow();
+ } catch (Exception e) {
+ httpServer = null;
+ LOGGER.error("Failed to start prometheus reporter", e);
+ return false;
+ }
LOGGER.info(
"http server for metrics started, listen on {}",
metricConfig.getPrometheusReporterPort());
return true;
@@ -196,11 +202,6 @@ public class PrometheusReporter implements Reporter {
return result;
}
- private static String getHelpMessage(String metric, MetricType type) {
- return String.format(
- "Generated from metric import (metric=%s, type=%s)", metric,
type.toString());
- }
-
@Override
public boolean stop() {
if (httpServer != null) {
diff --git
a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerJmxReporter.java
b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerJmxReporter.java
index 8aa0769a02..c1d2685c58 100644
---
a/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerJmxReporter.java
+++
b/metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerJmxReporter.java
@@ -43,9 +43,11 @@ public class MicrometerJmxReporter implements JmxReporter {
Metrics.globalRegistry.getRegistries().stream()
.filter(reporter -> reporter instanceof JmxMeterRegistry)
.collect(Collectors.toSet());
- if (meterRegistrySet.size() == 0) {
- Metrics.addRegistry(new JmxMeterRegistry(JmxConfig.DEFAULT,
Clock.SYSTEM));
+ if (meterRegistrySet.size() != 0) {
+ LOGGER.warn("Jmx Reporter already start");
+ return false;
}
+ Metrics.addRegistry(new JmxMeterRegistry(JmxConfig.DEFAULT,
Clock.SYSTEM));
} catch (Exception e) {
LOGGER.error("Failed to start Micrometer JmxReporter, because {}",
e.getMessage());
return false;
diff --git
a/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/MetricService.java
b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/MetricService.java
index e889e10e69..5da8cf628d 100644
---
a/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/MetricService.java
+++
b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/MetricService.java
@@ -84,7 +84,7 @@ public class MetricService extends AbstractMetricService
implements MetricServic
internalReporter.addAutoGauge(this.internalReporter.getAllAutoGauge());
this.internalReporter.stop();
this.internalReporter = internalReporter;
- this.internalReporter.start();
+ startInternalReporter();
logger.info("Finish reloading internal reporter");
}
@@ -120,7 +120,10 @@ public class MetricService extends AbstractMetricService
implements MetricServic
}
public void startInternalReporter() {
- this.internalReporter.start();
+ if (!this.internalReporter.start()) {
+ logger.error("Failed to start internal reporter");
+ this.internalReporter = new MemoryInternalIoTDBReporter();
+ }
}
public static MetricService getInstance() {
diff --git
a/server/src/main/java/org/apache/iotdb/db/service/metrics/IoTDBInternalReporter.java
b/server/src/main/java/org/apache/iotdb/db/service/metrics/IoTDBInternalReporter.java
index 18f8b8b7b2..cac9714802 100644
---
a/server/src/main/java/org/apache/iotdb/db/service/metrics/IoTDBInternalReporter.java
+++
b/server/src/main/java/org/apache/iotdb/db/service/metrics/IoTDBInternalReporter.java
@@ -88,19 +88,19 @@ public class IoTDBInternalReporter extends
InternalIoTDBReporter {
@Override
public boolean start() {
- if (currentServiceFuture == null) {
- currentServiceFuture =
- ScheduledExecutorUtil.safelyScheduleAtFixedRate(
- service,
- () -> {
- writeMetricToIoTDB(autoGauges);
- },
- 1,
- MetricConfigDescriptor.getInstance()
- .getMetricConfig()
- .getAsyncCollectPeriodInSecond(),
- TimeUnit.SECONDS);
+ if (currentServiceFuture != null) {
+ LOGGER.warn("IoTDB Internal Reporter already start");
+ return false;
}
+ currentServiceFuture =
+ ScheduledExecutorUtil.safelyScheduleAtFixedRate(
+ service,
+ () -> {
+ writeMetricToIoTDB(autoGauges);
+ },
+ 1,
+
MetricConfigDescriptor.getInstance().getMetricConfig().getAsyncCollectPeriodInSecond(),
+ TimeUnit.SECONDS);
return true;
}