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

spricoder pushed a commit to branch fix/config-restart-replication-factor-metric
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 81b4cc9bde1bc05b149e501626197de54c68f3c9
Author: spricoder <[email protected]>
AuthorDate: Thu Oct 12 00:58:44 2023 +0800

    1. Move add metrics from init to leader ready
    2. Move the management of replication factor metric into PartitionMetrics
---
 .../statemachine/ConfigRegionStateMachine.java     |  2 +
 .../manager/partition/PartitionMetrics.java        | 63 ++++++++++++++++++-
 .../manager/schema/ClusterSchemaManager.java       | 71 ++++------------------
 .../iotdb/confignode/service/ConfigNode.java       |  7 ++-
 4 files changed, 79 insertions(+), 64 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..2675ca6e5c5 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
@@ -233,6 +233,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/partition/PartitionMetrics.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionMetrics.java
index 8a5cd1f5a86..f22a27b8a41 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;
 
@@ -277,16 +279,27 @@ public class PartitionMetrics implements IMetricSet {
   }
 
   private void bindDatabasePartitionMetrics(AbstractMetricService 
metricService) {
+    ClusterSchemaManager clusterSchemaManager = getClusterSchemaManager();
     // Count the number of Databases
     metricService.createAutoGauge(
         Metric.DATABASE_NUM.toString(),
         MetricLevel.CORE,
-        getClusterSchemaManager(),
-        clusterSchemaManager -> 
clusterSchemaManager.getDatabaseNames().size());
+        clusterSchemaManager,
+        c -> c.getDatabaseNames().size());
 
-    List<String> databases = getClusterSchemaManager().getDatabaseNames();
+    List<String> databases = clusterSchemaManager.getDatabaseNames();
     for (String database : databases) {
       bindDatabasePartitionMetrics(metricService, configManager, database);
+      try {
+        int dataReplicationFactor =
+            clusterSchemaManager.getReplicationFactor(database, 
TConsensusGroupType.DataRegion);
+        int schemaReplicationFactor =
+            clusterSchemaManager.getReplicationFactor(database, 
TConsensusGroupType.SchemaRegion);
+        bindDatabaseReplicationFactorMetrics(
+            metricService, database, dataReplicationFactor, 
schemaReplicationFactor);
+      } catch (DatabaseNotExistsException e) {
+        // ignore
+      }
     }
   }
 
@@ -333,6 +346,50 @@ public class PartitionMetrics implements IMetricSet {
     }
   }
 
+  public static void bindDatabaseReplicationFactorMetrics(
+      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);
+  }
+
+  public static void unbindDatabaseReplicationFactorMetrics(
+      AbstractMetricService metricService, String database) {
+    // 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);
+  }
+
   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..80f2b7bfbea 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;
@@ -126,8 +122,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,
@@ -174,25 +168,11 @@ public class ClusterSchemaManager {
           MetricService.getInstance(), configManager, 
databaseSchemaPlan.getSchema().getName());
       // 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);
+      PartitionMetrics.bindDatabaseReplicationFactorMetrics(
+          MetricService.getInstance(),
+          databaseSchemaPlan.getSchema().getName(),
+          databaseSchemaPlan.getSchema().getDataReplicationFactor(),
+          databaseSchemaPlan.getSchema().getSchemaReplicationFactor());
     } catch (ConsensusException e) {
       LOGGER.warn(CONSENSUS_WRITE_ERROR, e);
       result = new 
TSStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode());
@@ -261,25 +241,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.bindDatabaseReplicationFactorMetrics(
+          MetricService.getInstance(),
+          databaseSchemaPlan.getSchema().getName(),
+          databaseSchemaPlan.getSchema().getDataReplicationFactor(),
+          databaseSchemaPlan.getSchema().getSchemaReplicationFactor());
       return result;
     } catch (ConsensusException e) {
       LOGGER.warn(CONSENSUS_WRITE_ERROR, e);
@@ -294,21 +260,8 @@ 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());
+      PartitionMetrics.unbindDatabaseReplicationFactorMetrics(
+          MetricService.getInstance(), 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/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