You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ta...@apache.org on 2024/12/12 12:12:37 UTC

(iotdb) branch fix_threadpool_metric_npe updated: fix

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

tanxinyu pushed a commit to branch fix_threadpool_metric_npe
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/fix_threadpool_metric_npe by this push:
     new 47e8fe4d917 fix
47e8fe4d917 is described below

commit 47e8fe4d917b25c3c194cb0eafbde756ee3b6a76
Author: OneSizeFitQuorum <ta...@apache.org>
AuthorDate: Thu Dec 12 20:12:22 2024 +0800

    fix
    
    Signed-off-by: OneSizeFitQuorum <ta...@apache.org>
---
 .../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..b5b5d5d09b0 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);
+      registerThreadPoolToMetric(name);
     }
   }
 
+  private void registerThreadPoolToMetric(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);
+      unRegisterThreadPoolToMetric(name);
     }
   }
 
+  private void unRegisterThreadPoolToMetric(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()) {
+      registerThreadPoolToMetric(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()) {
+      unRegisterThreadPoolToMetric(entry.getKey());
+    }
+    registeredPoolMap.clear();
+    notRegisteredPoolMap.clear();
   }
 
   private static class ThreadPoolMetricsHolder {