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;
