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

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


The following commit(s) were added to refs/heads/master by this push:
     new 5f7a0bff761 Fix potential loss of metrics when restart confignode 
(#11287)
5f7a0bff761 is described below

commit 5f7a0bff761ca3440d1e98ce44799ac7f6f112d7
Author: ZhangHongYin <[email protected]>
AuthorDate: Thu Oct 12 23:26:06 2023 -0500

    Fix potential loss of metrics when restart confignode (#11287)
---
 .../statemachine/ConfigRegionStateMachine.java     |   4 +
 .../iotdb/confignode/manager/ConfigManager.java    |   6 +
 .../apache/iotdb/confignode/manager/IManager.java  |   2 +
 .../iotdb/confignode/manager/node/NodeManager.java |   2 +-
 .../manager/partition/PartitionMetrics.java        | 250 ++++++++++++++-------
 .../manager/schema/ClusterSchemaManager.java       |  73 +-----
 .../procedure/env/DataNodeRemoveHandler.java       |   2 +-
 .../impl/schema/DeleteDatabaseProcedure.java       |   2 +-
 .../iotdb/confignode/service/ConfigNode.java       |   7 +-
 9 files changed, 195 insertions(+), 153 deletions(-)

diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/statemachine/ConfigRegionStateMachine.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/statemachine/ConfigRegionStateMachine.java
index c5b35faf516..0a39672cc1d 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/statemachine/ConfigRegionStateMachine.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/statemachine/ConfigRegionStateMachine.java
@@ -215,6 +215,8 @@ public class ConfigRegionStateMachine
       configManager.getPartitionManager().stopRegionCleaner();
       configManager.getCQManager().stopCQScheduler();
       configManager.getClusterSchemaManager().clearSchemaQuotaCache();
+      // Remove Metric after leader change
+      configManager.removeMetrics();
     }
   }
 
@@ -233,6 +235,8 @@ public class ConfigRegionStateMachine
     configManager.getRetryFailedTasksThread().startRetryFailedTasksService();
     configManager.getPartitionManager().startRegionCleaner();
     configManager.checkUserPathPrivilege();
+    // Add Metric after leader ready
+    configManager.addMetrics();
 
     // we do cq recovery async for two reasons:
     // 1. For performance: cq recovery may be time-consuming, we use another 
thread to do it in
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index 70acd3acefd..7f4a5e3546c 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -1495,6 +1495,12 @@ public class ConfigManager implements IManager {
     MetricService.getInstance().addMetricSet(new PartitionMetrics(this));
   }
 
+  @Override
+  public void removeMetrics() {
+    MetricService.getInstance().removeMetricSet(new 
NodeMetrics(getNodeManager()));
+    MetricService.getInstance().removeMetricSet(new PartitionMetrics(this));
+  }
+
   @Override
   public TSStatus createSchemaTemplate(TCreateSchemaTemplateReq req) {
     TSStatus status = confirmLeader();
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
index 877ddb0255c..409eeba5499 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
@@ -482,6 +482,8 @@ public interface IManager {
 
   void addMetrics();
 
+  void removeMetrics();
+
   /** Show (data/schemaengine) regions. */
   DataSet showRegion(GetRegionInfoListPlan getRegionInfoListPlan);
 
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
index ba0875dc768..14bb88a1edd 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
@@ -281,7 +281,7 @@ public class NodeManager {
     }
 
     // Bind DataNode metrics
-    PartitionMetrics.bindDataNodePartitionMetrics(
+    PartitionMetrics.bindDataNodePartitionMetricsWhenUpdate(
         MetricService.getInstance(), configManager, dataNodeId);
 
     // Adjust the maximum RegionGroup number of each StorageGroup
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionMetrics.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionMetrics.java
index 8a5cd1f5a86..fd51aae15de 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionMetrics.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionMetrics.java
@@ -44,6 +44,8 @@ import java.util.Objects;
 public class PartitionMetrics implements IMetricSet {
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(PartitionMetrics.class);
+  private static final String DATA = "data";
+  private static final String SCHEMA = "schema";
 
   private final IManager configManager;
 
@@ -55,67 +57,37 @@ public class PartitionMetrics implements IMetricSet {
   public void bindTo(AbstractMetricService metricService) {
     bindRegionPartitionMetrics(metricService);
     bindDataNodePartitionMetrics(metricService);
-    bindDatabasePartitionMetrics(metricService);
+    bindDatabaseRelatedMetrics(metricService);
   }
 
   @Override
   public void unbindFrom(AbstractMetricService metricService) {
     unbindRegionPartitionMetrics(metricService);
     unbindDataNodePartitionMetrics(metricService);
-    unbindDatabasePartitionMetrics(metricService);
+    unbindDatabaseRelatedMetrics(metricService);
   }
 
-  private void bindRegionPartitionMetrics(AbstractMetricService metricService) 
{
-    for (RegionStatus status : RegionStatus.values()) {
-      // Count the number of SchemaRegions
-      metricService.createAutoGauge(
-          Metric.REGION_NUM.toString(),
-          MetricLevel.CORE,
-          getLoadManager(),
-          loadManager ->
-              
loadManager.countRegionWithSpecifiedStatus(TConsensusGroupType.SchemaRegion, 
status),
-          Tag.TYPE.toString(),
-          TConsensusGroupType.SchemaRegion.toString(),
-          Tag.STATUS.toString(),
-          status.getStatus());
+  // region DataNode Partition Metrics
 
-      // Count the number of DataRegions
-      metricService.createAutoGauge(
-          Metric.REGION_NUM.toString(),
-          MetricLevel.CORE,
-          getLoadManager(),
-          loadManager ->
-              
loadManager.countRegionWithSpecifiedStatus(TConsensusGroupType.DataRegion, 
status),
-          Tag.TYPE.toString(),
-          TConsensusGroupType.DataRegion.toString(),
-          Tag.STATUS.toString(),
-          status.getStatus());
+  private void bindDataNodePartitionMetrics(AbstractMetricService 
metricService) {
+    List<TDataNodeConfiguration> registerDataNodes = 
getNodeManager().getRegisteredDataNodes();
+    for (TDataNodeConfiguration dataNodeConfiguration : registerDataNodes) {
+      int dataNodeId = dataNodeConfiguration.getLocation().getDataNodeId();
+      bindDataNodePartitionMetricsWhenUpdate(metricService, configManager, 
dataNodeId);
     }
   }
 
-  private void unbindRegionPartitionMetrics(AbstractMetricService 
metricService) {
-    for (RegionStatus status : RegionStatus.values()) {
-      // Remove the number of SchemaRegions
-      metricService.remove(
-          MetricType.AUTO_GAUGE,
-          Metric.REGION_NUM.toString(),
-          Tag.TYPE.toString(),
-          TConsensusGroupType.SchemaRegion.toString(),
-          Tag.STATUS.toString(),
-          status.getStatus());
-
-      // Remove the number of DataRegions
-      metricService.remove(
-          MetricType.AUTO_GAUGE,
-          Metric.REGION_NUM.toString(),
-          Tag.TYPE.toString(),
-          TConsensusGroupType.DataRegion.toString(),
-          Tag.STATUS.toString(),
-          status.getStatus());
+  private void unbindDataNodePartitionMetrics(AbstractMetricService 
metricService) {
+    List<TDataNodeConfiguration> registerDataNodes = 
getNodeManager().getRegisteredDataNodes();
+    for (TDataNodeConfiguration dataNodeConfiguration : registerDataNodes) {
+      String dataNodeName =
+          NodeUrlUtils.convertTEndPointUrl(
+              dataNodeConfiguration.getLocation().getClientRpcEndPoint());
+      unbindDataNodePartitionMetricsWhenUpdate(metricService, dataNodeName);
     }
   }
 
-  public static void bindDataNodePartitionMetrics(
+  public static void bindDataNodePartitionMetricsWhenUpdate(
       AbstractMetricService metricService, IManager configManager, int 
dataNodeId) {
     NodeManager nodeManager = configManager.getNodeManager();
     PartitionManager partitionManager = configManager.getPartitionManager();
@@ -166,15 +138,7 @@ public class PartitionMetrics implements IMetricSet {
         TConsensusGroupType.DataRegion.toString());
   }
 
-  private void bindDataNodePartitionMetrics(AbstractMetricService 
metricService) {
-    List<TDataNodeConfiguration> registerDataNodes = 
getNodeManager().getRegisteredDataNodes();
-    for (TDataNodeConfiguration dataNodeConfiguration : registerDataNodes) {
-      int dataNodeId = dataNodeConfiguration.getLocation().getDataNodeId();
-      bindDataNodePartitionMetrics(metricService, configManager, dataNodeId);
-    }
-  }
-
-  public static void unbindDataNodePartitionMetrics(
+  public static void unbindDataNodePartitionMetricsWhenUpdate(
       AbstractMetricService metricService, String dataNodeName) {
     // Remove the number of Regions in the specified DataNode
     metricService.remove(
@@ -209,17 +173,112 @@ public class PartitionMetrics implements IMetricSet {
         TConsensusGroupType.DataRegion.toString());
   }
 
-  private void unbindDataNodePartitionMetrics(AbstractMetricService 
metricService) {
-    List<TDataNodeConfiguration> registerDataNodes = 
getNodeManager().getRegisteredDataNodes();
-    for (TDataNodeConfiguration dataNodeConfiguration : registerDataNodes) {
-      String dataNodeName =
-          NodeUrlUtils.convertTEndPointUrl(
-              dataNodeConfiguration.getLocation().getClientRpcEndPoint());
-      unbindDataNodePartitionMetrics(metricService, dataNodeName);
+  // endregion
+
+  // region Region Partition Metrics
+
+  private void bindRegionPartitionMetrics(AbstractMetricService metricService) 
{
+    for (RegionStatus status : RegionStatus.values()) {
+      // Count the number of SchemaRegions
+      metricService.createAutoGauge(
+          Metric.REGION_NUM.toString(),
+          MetricLevel.CORE,
+          getLoadManager(),
+          loadManager ->
+              
loadManager.countRegionWithSpecifiedStatus(TConsensusGroupType.SchemaRegion, 
status),
+          Tag.TYPE.toString(),
+          TConsensusGroupType.SchemaRegion.toString(),
+          Tag.STATUS.toString(),
+          status.getStatus());
+
+      // Count the number of DataRegions
+      metricService.createAutoGauge(
+          Metric.REGION_NUM.toString(),
+          MetricLevel.CORE,
+          getLoadManager(),
+          loadManager ->
+              
loadManager.countRegionWithSpecifiedStatus(TConsensusGroupType.DataRegion, 
status),
+          Tag.TYPE.toString(),
+          TConsensusGroupType.DataRegion.toString(),
+          Tag.STATUS.toString(),
+          status.getStatus());
+    }
+  }
+
+  private void unbindRegionPartitionMetrics(AbstractMetricService 
metricService) {
+    for (RegionStatus status : RegionStatus.values()) {
+      // Remove the number of SchemaRegions
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          Metric.REGION_NUM.toString(),
+          Tag.TYPE.toString(),
+          TConsensusGroupType.SchemaRegion.toString(),
+          Tag.STATUS.toString(),
+          status.getStatus());
+
+      // Remove the number of DataRegions
+      metricService.remove(
+          MetricType.AUTO_GAUGE,
+          Metric.REGION_NUM.toString(),
+          Tag.TYPE.toString(),
+          TConsensusGroupType.DataRegion.toString(),
+          Tag.STATUS.toString(),
+          status.getStatus());
+    }
+  }
+
+  // endregion
+
+  // region Database Partition Metrics
+
+  private void bindDatabaseRelatedMetrics(AbstractMetricService metricService) 
{
+    ClusterSchemaManager clusterSchemaManager = getClusterSchemaManager();
+    // Count the number of Databases
+    metricService.createAutoGauge(
+        Metric.DATABASE_NUM.toString(),
+        MetricLevel.CORE,
+        clusterSchemaManager,
+        c -> c.getDatabaseNames().size());
+
+    List<String> databases = clusterSchemaManager.getDatabaseNames();
+    for (String database : databases) {
+      int dataReplicationFactor = 1;
+      int schemaReplicationFactor = 1;
+      try {
+        dataReplicationFactor =
+            clusterSchemaManager.getReplicationFactor(database, 
TConsensusGroupType.DataRegion);
+        schemaReplicationFactor =
+            clusterSchemaManager.getReplicationFactor(database, 
TConsensusGroupType.SchemaRegion);
+      } catch (DatabaseNotExistsException e) {
+        // ignore
+      }
+      bindDatabaseRelatedMetricsWhenUpdate(
+          metricService, configManager, database, dataReplicationFactor, 
schemaReplicationFactor);
+    }
+  }
+
+  private void unbindDatabaseRelatedMetrics(AbstractMetricService 
metricService) {
+    // Remove the number of Databases
+    metricService.remove(MetricType.AUTO_GAUGE, 
Metric.DATABASE_NUM.toString());
+
+    List<String> databases = getClusterSchemaManager().getDatabaseNames();
+    for (String database : databases) {
+      unbindDatabaseRelatedMetricsWhenUpdate(metricService, database);
     }
   }
 
-  public static void bindDatabasePartitionMetrics(
+  public static void bindDatabaseRelatedMetricsWhenUpdate(
+      AbstractMetricService metricService,
+      IManager configManager,
+      String database,
+      int dataReplicationFactor,
+      int schemaReplicationFactor) {
+    bindDatabasePartitionMetricsWhenUpdate(metricService, configManager, 
database);
+    bindDatabaseReplicationFactorMetricsWhenUpdate(
+        metricService, database, dataReplicationFactor, 
schemaReplicationFactor);
+  }
+
+  private static void bindDatabasePartitionMetricsWhenUpdate(
       AbstractMetricService metricService, IManager configManager, String 
database) {
     PartitionManager partitionManager = configManager.getPartitionManager();
 
@@ -276,21 +335,7 @@ public class PartitionMetrics implements IMetricSet {
         TConsensusGroupType.DataRegion.toString());
   }
 
-  private void bindDatabasePartitionMetrics(AbstractMetricService 
metricService) {
-    // Count the number of Databases
-    metricService.createAutoGauge(
-        Metric.DATABASE_NUM.toString(),
-        MetricLevel.CORE,
-        getClusterSchemaManager(),
-        clusterSchemaManager -> 
clusterSchemaManager.getDatabaseNames().size());
-
-    List<String> databases = getClusterSchemaManager().getDatabaseNames();
-    for (String database : databases) {
-      bindDatabasePartitionMetrics(metricService, configManager, database);
-    }
-  }
-
-  public static void unbindDatabasePartitionMetrics(
+  public static void unbindDatabaseRelatedMetricsWhenUpdate(
       AbstractMetricService metricService, String database) {
     // Remove the number of SeriesSlots in the specified Database
     metricService.remove(
@@ -321,18 +366,51 @@ public class PartitionMetrics implements IMetricSet {
         database,
         Tag.TYPE.toString(),
         TConsensusGroupType.DataRegion.toString());
-  }
 
-  private void unbindDatabasePartitionMetrics(AbstractMetricService 
metricService) {
-    // Remove the number of Databases
-    metricService.remove(MetricType.AUTO_GAUGE, 
Metric.DATABASE_NUM.toString());
+    // Remove database replication factor metric
+    metricService.remove(
+        MetricType.GAUGE,
+        Metric.REPLICATION_FACTOR.toString(),
+        Tag.TYPE.toString(),
+        DATA,
+        Tag.DATABASE.toString(),
+        database);
+    metricService.remove(
+        MetricType.GAUGE,
+        Metric.REPLICATION_FACTOR.toString(),
+        Tag.TYPE.toString(),
+        SCHEMA,
+        Tag.DATABASE.toString(),
+        database);
+  }
 
-    List<String> databases = getClusterSchemaManager().getDatabaseNames();
-    for (String database : databases) {
-      unbindDatabasePartitionMetrics(metricService, database);
-    }
+  public static void bindDatabaseReplicationFactorMetricsWhenUpdate(
+      AbstractMetricService metricService,
+      String database,
+      int dataReplicationFactor,
+      int schemaReplicationFactor) {
+    metricService
+        .getOrCreateGauge(
+            Metric.REPLICATION_FACTOR.toString(),
+            MetricLevel.CORE,
+            Tag.TYPE.toString(),
+            DATA,
+            Tag.DATABASE.toString(),
+            database)
+        .set(dataReplicationFactor);
+    metricService
+        .getOrCreateGauge(
+            Metric.REPLICATION_FACTOR.toString(),
+            MetricLevel.CORE,
+            Tag.TYPE.toString(),
+            SCHEMA,
+            Tag.DATABASE.toString(),
+            database)
+        .set(schemaReplicationFactor);
   }
 
+  // endregion
+
   private NodeManager getNodeManager() {
     return configManager.getNodeManager();
   }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
index 79776b3416e..96a11483f70 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
@@ -29,8 +29,6 @@ import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.path.PathPatternTree;
 import org.apache.iotdb.commons.schema.SchemaConstant;
 import org.apache.iotdb.commons.service.metric.MetricService;
-import org.apache.iotdb.commons.service.metric.enums.Metric;
-import org.apache.iotdb.commons.service.metric.enums.Tag;
 import org.apache.iotdb.commons.utils.PathUtils;
 import org.apache.iotdb.commons.utils.StatusUtils;
 import org.apache.iotdb.confignode.client.DataNodeRequestType;
@@ -85,8 +83,6 @@ import 
org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUpdateType;
 import org.apache.iotdb.db.schemaengine.template.TemplateInternalRPCUtil;
 import org.apache.iotdb.db.schemaengine.template.alter.TemplateExtendInfo;
 import org.apache.iotdb.db.utils.SchemaUtils;
-import org.apache.iotdb.metrics.utils.MetricLevel;
-import org.apache.iotdb.metrics.utils.MetricType;
 import org.apache.iotdb.mpp.rpc.thrift.TUpdateTemplateReq;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
@@ -125,9 +121,6 @@ public class ClusterSchemaManager {
 
   private static final String CONSENSUS_WRITE_ERROR =
       "Failed in the write API executing the consensus layer due to: ";
-  private static final MetricService metricService = 
MetricService.getInstance();
-  private static final String DATA = "data";
-  private static final String SCHEMA = "schema";
 
   public ClusterSchemaManager(
       IManager configManager,
@@ -170,29 +163,14 @@ public class ClusterSchemaManager {
       // Cache DatabaseSchema
       result = getConsensusManager().write(databaseSchemaPlan);
       // Bind Database metrics
-      PartitionMetrics.bindDatabasePartitionMetrics(
-          MetricService.getInstance(), configManager, 
databaseSchemaPlan.getSchema().getName());
+      PartitionMetrics.bindDatabaseRelatedMetricsWhenUpdate(
+          MetricService.getInstance(),
+          configManager,
+          databaseSchemaPlan.getSchema().getName(),
+          databaseSchemaPlan.getSchema().getDataReplicationFactor(),
+          databaseSchemaPlan.getSchema().getSchemaReplicationFactor());
       // Adjust the maximum RegionGroup number of each Database
       adjustMaxRegionGroupNum();
-      // Add database replication factor metrics
-      metricService
-          .getOrCreateGauge(
-              Metric.REPLICATION_FACTOR.toString(),
-              MetricLevel.CORE,
-              Tag.TYPE.toString(),
-              DATA,
-              Tag.DATABASE.toString(),
-              databaseSchemaPlan.getSchema().getName())
-          .set(databaseSchemaPlan.getSchema().dataReplicationFactor);
-      metricService
-          .getOrCreateGauge(
-              Metric.REPLICATION_FACTOR.toString(),
-              MetricLevel.CORE,
-              Tag.TYPE.toString(),
-              SCHEMA,
-              Tag.DATABASE.toString(),
-              databaseSchemaPlan.getSchema().getName())
-          .set(databaseSchemaPlan.getSchema().schemaReplicationFactor);
     } catch (ConsensusException e) {
       LOGGER.warn(CONSENSUS_WRITE_ERROR, e);
       result = new 
TSStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode());
@@ -261,25 +239,11 @@ public class ClusterSchemaManager {
     // Alter DatabaseSchema
     try {
       result = getConsensusManager().write(databaseSchemaPlan);
-      // Alter database replication factor metrics
-      metricService
-          .getOrCreateGauge(
-              Metric.REPLICATION_FACTOR.toString(),
-              MetricLevel.CORE,
-              Tag.TYPE.toString(),
-              DATA,
-              Tag.DATABASE.toString(),
-              databaseSchemaPlan.getSchema().getName())
-          .set(databaseSchemaPlan.getSchema().dataReplicationFactor);
-      metricService
-          .getOrCreateGauge(
-              Metric.REPLICATION_FACTOR.toString(),
-              MetricLevel.CORE,
-              Tag.TYPE.toString(),
-              SCHEMA,
-              Tag.DATABASE.toString(),
-              databaseSchemaPlan.getSchema().getName())
-          .set(databaseSchemaPlan.getSchema().schemaReplicationFactor);
+      PartitionMetrics.bindDatabaseReplicationFactorMetricsWhenUpdate(
+          MetricService.getInstance(),
+          databaseSchemaPlan.getSchema().getName(),
+          databaseSchemaPlan.getSchema().getDataReplicationFactor(),
+          databaseSchemaPlan.getSchema().getSchemaReplicationFactor());
       return result;
     } catch (ConsensusException e) {
       LOGGER.warn(CONSENSUS_WRITE_ERROR, e);
@@ -294,21 +258,6 @@ public class ClusterSchemaManager {
     TSStatus result;
     try {
       result = getConsensusManager().write(deleteDatabasePlan);
-      // Remove database replication factor metric
-      metricService.remove(
-          MetricType.GAUGE,
-          Metric.REPLICATION_FACTOR.toString(),
-          Tag.TYPE.toString(),
-          DATA,
-          Tag.DATABASE.toString(),
-          deleteDatabasePlan.getName());
-      metricService.remove(
-          MetricType.GAUGE,
-          Metric.REPLICATION_FACTOR.toString(),
-          Tag.TYPE.toString(),
-          SCHEMA,
-          Tag.DATABASE.toString(),
-          deleteDatabasePlan.getName());
     } catch (ConsensusException e) {
       LOGGER.warn(CONSENSUS_WRITE_ERROR, e);
       result = new 
TSStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode());
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java
index 768ca3be944..d7029d3c5bf 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java
@@ -576,7 +576,7 @@ public class DataNodeRemoveHandler {
     configManager.getClusterSchemaManager().adjustMaxRegionGroupNum();
 
     // Remove metrics
-    PartitionMetrics.unbindDataNodePartitionMetrics(
+    PartitionMetrics.unbindDataNodePartitionMetricsWhenUpdate(
         MetricService.getInstance(),
         
NodeUrlUtils.convertTEndPointUrl(dataNodeLocation.getClientRpcEndPoint()));
   }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
index 7fd0a1af2bb..c406103d850 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
@@ -154,7 +154,7 @@ public class DeleteDatabaseProcedure
               env.deleteDatabaseConfig(deleteDatabaseSchema.getName());
 
           // Delete Database metrics
-          PartitionMetrics.unbindDatabasePartitionMetrics(
+          PartitionMetrics.unbindDatabaseRelatedMetricsWhenUpdate(
               MetricService.getInstance(), deleteDatabaseSchema.getName());
 
           // try sync delete schemaengine region
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
index 2e9c4c056de..1f0c1ee32ec 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
@@ -298,8 +298,6 @@ public class ConfigNode implements ConfigNodeMBean {
       LOGGER.error("Can't start ConfigNode consensus group!", e);
       stop();
     }
-    // Add some Metrics for configManager
-    configManager.addMetrics();
     LOGGER.info("Successfully initialize ConfigManager.");
   }
 
@@ -417,6 +415,11 @@ public class ConfigNode implements ConfigNodeMBean {
     return configManager;
   }
 
+  public void addMetrics() {
+    // Add some Metrics for configManager
+    configManager.addMetrics();
+  }
+
   @TestOnly
   public void setConfigManager(ConfigManager configManager) {
     this.configManager = configManager;

Reply via email to