This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new abc546a8324 [To dev/1.3] Fix ThreadPoolMetric NPE (#14405)
abc546a8324 is described below
commit abc546a8324690b8b062893e13f517e1defc7dbe
Author: Potato <[email protected]>
AuthorDate: Thu Dec 12 21:06:37 2024 +0800
[To dev/1.3] Fix ThreadPoolMetric NPE (#14405)
Signed-off-by: OneSizeFitQuorum <[email protected]>
---
.../commons/concurrent/ThreadPoolMetrics.java | 139 ++++++++++++---------
1 file changed, 77 insertions(+), 62 deletions(-)
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadPoolMetrics.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadPoolMetrics.java
index 05b6c63b0a5..a05742e38d3 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadPoolMetrics.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/concurrent/ThreadPoolMetrics.java
@@ -48,87 +48,102 @@ public class ThreadPoolMetrics implements IMetricSet {
notRegisteredPoolMap.put(name, pool);
} else {
registeredPoolMap.put(name, pool);
- metricService.createAutoGauge(
- SystemMetric.THREAD_POOL_ACTIVE_THREAD_COUNT.toString(),
- MetricLevel.IMPORTANT,
- registeredPoolMap,
- map -> registeredPoolMap.get(name).getActiveCount(),
- SystemTag.POOL_NAME.toString(),
- name);
- metricService.createAutoGauge(
- SystemMetric.THREAD_POOL_CORE_SIZE.toString(),
- MetricLevel.IMPORTANT,
- registeredPoolMap,
- map -> registeredPoolMap.get(name).getCorePoolSize(),
- SystemTag.POOL_NAME.toString(),
- name);
- metricService.createAutoGauge(
- SystemMetric.THREAD_POOL_WAITING_TASK_COUNT.toString(),
- MetricLevel.IMPORTANT,
- registeredPoolMap,
- map -> registeredPoolMap.get(name).getQueueLength(),
- SystemTag.POOL_NAME.toString(),
- name);
- metricService.createAutoGauge(
- SystemMetric.THREAD_POOL_DONE_TASK_COUNT.toString(),
- MetricLevel.IMPORTANT,
- registeredPoolMap,
- map -> registeredPoolMap.get(name).getCompletedTaskCount(),
- SystemTag.POOL_NAME.toString(),
- name);
- metricService.createAutoGauge(
- SystemMetric.THREAD_POOL_LARGEST_POOL_SIZE.toString(),
- MetricLevel.IMPORTANT,
- registeredPoolMap,
- map -> registeredPoolMap.get(name).getLargestPoolSize(),
- SystemTag.POOL_NAME.toString(),
- name);
+ registerThreadPoolMetrics(name);
}
}
+ private void registerThreadPoolMetrics(String name) {
+ metricService.createAutoGauge(
+ SystemMetric.THREAD_POOL_ACTIVE_THREAD_COUNT.toString(),
+ MetricLevel.IMPORTANT,
+ registeredPoolMap,
+ map -> registeredPoolMap.get(name).getActiveCount(),
+ SystemTag.POOL_NAME.toString(),
+ name);
+ metricService.createAutoGauge(
+ SystemMetric.THREAD_POOL_CORE_SIZE.toString(),
+ MetricLevel.IMPORTANT,
+ registeredPoolMap,
+ map -> registeredPoolMap.get(name).getCorePoolSize(),
+ SystemTag.POOL_NAME.toString(),
+ name);
+ metricService.createAutoGauge(
+ SystemMetric.THREAD_POOL_WAITING_TASK_COUNT.toString(),
+ MetricLevel.IMPORTANT,
+ registeredPoolMap,
+ map -> registeredPoolMap.get(name).getQueueLength(),
+ SystemTag.POOL_NAME.toString(),
+ name);
+ metricService.createAutoGauge(
+ SystemMetric.THREAD_POOL_DONE_TASK_COUNT.toString(),
+ MetricLevel.IMPORTANT,
+ registeredPoolMap,
+ map -> registeredPoolMap.get(name).getCompletedTaskCount(),
+ SystemTag.POOL_NAME.toString(),
+ name);
+ metricService.createAutoGauge(
+ SystemMetric.THREAD_POOL_LARGEST_POOL_SIZE.toString(),
+ MetricLevel.IMPORTANT,
+ registeredPoolMap,
+ map -> registeredPoolMap.get(name).getLargestPoolSize(),
+ SystemTag.POOL_NAME.toString(),
+ name);
+ }
+
public synchronized void unRegisterThreadPool(String name) {
if (metricService == null) {
notRegisteredPoolMap.remove(name);
} else {
registeredPoolMap.remove(name);
- metricService.remove(
- MetricType.GAUGE,
- SystemMetric.THREAD_POOL_ACTIVE_THREAD_COUNT.toString(),
- SystemTag.POOL_NAME.toString(),
- name);
- metricService.remove(
- MetricType.GAUGE,
- SystemMetric.THREAD_POOL_CORE_SIZE.toString(),
- SystemTag.POOL_NAME.toString(),
- name);
- metricService.remove(
- MetricType.GAUGE,
- SystemMetric.THREAD_POOL_WAITING_TASK_COUNT.toString(),
- SystemTag.POOL_NAME.toString(),
- name);
- metricService.remove(
- MetricType.GAUGE,
- SystemMetric.THREAD_POOL_DONE_TASK_COUNT.toString(),
- SystemTag.POOL_NAME.toString(),
- name);
- metricService.remove(
- MetricType.GAUGE,
- SystemMetric.THREAD_POOL_LARGEST_POOL_SIZE.toString(),
- SystemTag.POOL_NAME.toString(),
- name);
+ unRegisterThreadPoolMetrics(name);
}
}
+ private void unRegisterThreadPoolMetrics(String name) {
+ metricService.remove(
+ MetricType.GAUGE,
+ SystemMetric.THREAD_POOL_ACTIVE_THREAD_COUNT.toString(),
+ SystemTag.POOL_NAME.toString(),
+ name);
+ metricService.remove(
+ MetricType.GAUGE,
+ SystemMetric.THREAD_POOL_CORE_SIZE.toString(),
+ SystemTag.POOL_NAME.toString(),
+ name);
+ metricService.remove(
+ MetricType.GAUGE,
+ SystemMetric.THREAD_POOL_WAITING_TASK_COUNT.toString(),
+ SystemTag.POOL_NAME.toString(),
+ name);
+ metricService.remove(
+ MetricType.GAUGE,
+ SystemMetric.THREAD_POOL_DONE_TASK_COUNT.toString(),
+ SystemTag.POOL_NAME.toString(),
+ name);
+ metricService.remove(
+ MetricType.GAUGE,
+ SystemMetric.THREAD_POOL_LARGEST_POOL_SIZE.toString(),
+ SystemTag.POOL_NAME.toString(),
+ name);
+ }
+
@Override
public synchronized void bindTo(AbstractMetricService metricService) {
this.metricService = metricService;
- notRegisteredPoolMap.forEach((name, pool) -> registerThreadPool(pool,
name));
+ for (Map.Entry<String, IThreadPoolMBean> entry :
notRegisteredPoolMap.entrySet()) {
+ registerThreadPoolMetrics(entry.getKey());
+ }
+ registeredPoolMap.putAll(notRegisteredPoolMap);
notRegisteredPoolMap.clear();
}
@Override
public synchronized void unbindFrom(AbstractMetricService metricService) {
- registeredPoolMap.forEach((name, pool) -> unRegisterThreadPool(name));
+ for (Map.Entry<String, IThreadPoolMBean> entry :
registeredPoolMap.entrySet()) {
+ unRegisterThreadPoolMetrics(entry.getKey());
+ }
+ registeredPoolMap.clear();
+ notRegisteredPoolMap.clear();
}
private static class ThreadPoolMetricsHolder {