You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by yo...@apache.org on 2023/02/23 08:46:49 UTC
[iotdb] 03/04: internal
This is an automated email from the ASF dual-hosted git repository.
yongzao pushed a commit to branch ConfigNode-metric
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 3827b1c0db532883205619e3e431cc785f7305cc
Author: YongzaoDan <53...@qq.com>
AuthorDate: Thu Feb 23 16:46:08 2023 +0800
internal
---
.../confignode/manager/ClusterSchemaManager.java | 10 +-
.../iotdb/confignode/manager/ProcedureManager.java | 8 +-
.../iotdb/confignode/manager/node/NodeManager.java | 10 +-
.../manager/partition/PartitionMetrics.java | 321 +++++++++++----------
.../procedure/env/DataNodeRemoveHandler.java | 13 +-
...Procedure.java => DeleteDatabaseProcedure.java} | 18 +-
.../procedure/store/ProcedureFactory.java | 6 +-
.../request/ConfigPhysicalPlanSerDeTest.java | 16 +-
...eTest.java => DeleteDatabaseProcedureTest.java} | 11 +-
9 files changed, 225 insertions(+), 188 deletions(-)
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java
index 09c1a0b430..717a1ca88b 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java
@@ -64,6 +64,7 @@ import org.apache.iotdb.confignode.manager.consensus.ConsensusManager;
import org.apache.iotdb.confignode.manager.node.NodeManager;
import org.apache.iotdb.confignode.manager.observer.NodeStatisticsEvent;
import org.apache.iotdb.confignode.manager.partition.PartitionManager;
+import org.apache.iotdb.confignode.manager.partition.PartitionMetrics;
import org.apache.iotdb.confignode.persistence.schema.ClusterSchemaInfo;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseInfo;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
@@ -127,6 +128,7 @@ public class ClusterSchemaManager {
return RpcUtils.getStatus(
illegalPathException.getErrorCode(), illegalPathException.getMessage());
}
+
try {
clusterSchemaInfo.checkContainsStorageGroup(databaseSchemaPlan.getSchema().getName());
} catch (MetadataException metadataException) {
@@ -140,10 +142,14 @@ public class ClusterSchemaManager {
return result;
}
- // Cache StorageGroupSchema
+ // Cache DatabaseSchema
result = getConsensusManager().write(databaseSchemaPlan).getStatus();
- // Adjust the maximum RegionGroup number of each StorageGroup
+ // Bind Database metrics
+ PartitionMetrics.bindDatabasePartitionMetrics(
+ configManager, databaseSchemaPlan.getSchema().getName());
+
+ // Adjust the maximum RegionGroup number of each Database
adjustMaxRegionGroupNum();
return result;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
index 71edebcfe9..5afe8b1343 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
@@ -49,7 +49,7 @@ import org.apache.iotdb.confignode.procedure.impl.node.AddConfigNodeProcedure;
import org.apache.iotdb.confignode.procedure.impl.node.RemoveConfigNodeProcedure;
import org.apache.iotdb.confignode.procedure.impl.node.RemoveDataNodeProcedure;
import org.apache.iotdb.confignode.procedure.impl.schema.DeactivateTemplateProcedure;
-import org.apache.iotdb.confignode.procedure.impl.schema.DeleteStorageGroupProcedure;
+import org.apache.iotdb.confignode.procedure.impl.schema.DeleteDatabaseProcedure;
import org.apache.iotdb.confignode.procedure.impl.schema.DeleteTimeSeriesProcedure;
import org.apache.iotdb.confignode.procedure.impl.schema.UnsetTemplateProcedure;
import org.apache.iotdb.confignode.procedure.impl.statemachine.CreateRegionGroupsProcedure;
@@ -150,9 +150,9 @@ public class ProcedureManager {
public TSStatus deleteStorageGroups(ArrayList<TDatabaseSchema> deleteSgSchemaList) {
List<Long> procedureIds = new ArrayList<>();
for (TDatabaseSchema storageGroupSchema : deleteSgSchemaList) {
- DeleteStorageGroupProcedure deleteStorageGroupProcedure =
- new DeleteStorageGroupProcedure(storageGroupSchema);
- long procedureId = this.executor.submitProcedure(deleteStorageGroupProcedure);
+ DeleteDatabaseProcedure deleteDatabaseProcedure =
+ new DeleteDatabaseProcedure(storageGroupSchema);
+ long procedureId = this.executor.submitProcedure(deleteDatabaseProcedure);
procedureIds.add(procedureId);
}
List<TSStatus> procedureStatus = new ArrayList<>();
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
index 29fdbb2572..9812a2455a 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/NodeManager.java
@@ -62,6 +62,7 @@ import org.apache.iotdb.confignode.manager.node.heartbeat.BaseNodeCache;
import org.apache.iotdb.confignode.manager.node.heartbeat.ConfigNodeHeartbeatCache;
import org.apache.iotdb.confignode.manager.node.heartbeat.DataNodeHeartbeatCache;
import org.apache.iotdb.confignode.manager.partition.PartitionManager;
+import org.apache.iotdb.confignode.manager.partition.PartitionMetrics;
import org.apache.iotdb.confignode.persistence.node.NodeInfo;
import org.apache.iotdb.confignode.procedure.env.DataNodeRemoveHandler;
import org.apache.iotdb.confignode.rpc.thrift.TCQConfig;
@@ -256,15 +257,16 @@ public class NodeManager {
* success, and DATANODE_ALREADY_REGISTERED when the DataNode is already exist.
*/
public DataSet registerDataNode(RegisterDataNodePlan registerDataNodePlan) {
+ int dataNodeId = nodeInfo.generateNextNodeId();
DataNodeRegisterResp resp = new DataNodeRegisterResp();
// Register new DataNode
- registerDataNodePlan
- .getDataNodeConfiguration()
- .getLocation()
- .setDataNodeId(nodeInfo.generateNextNodeId());
+ registerDataNodePlan.getDataNodeConfiguration().getLocation().setDataNodeId(dataNodeId);
getConsensusManager().write(registerDataNodePlan);
+ // Bind DataNode metrics
+ PartitionMetrics.bindDataNodePartitionMetrics(configManager, dataNodeId);
+
// Adjust the maximum RegionGroup number of each StorageGroup
getClusterSchemaManager().adjustMaxRegionGroupNum();
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionMetrics.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionMetrics.java
index c5a3dd49e7..e942a4a725 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionMetrics.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionMetrics.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.confignode.manager.partition;
import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
import org.apache.iotdb.common.rpc.thrift.TDataNodeConfiguration;
import org.apache.iotdb.commons.cluster.RegionStatus;
+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.NodeUrlUtils;
@@ -54,14 +55,14 @@ public class PartitionMetrics implements IMetricSet {
@Override
public void bindTo(AbstractMetricService metricService) {
bindRegionPartitionMetrics(metricService);
- bindDataNodePartitionMetrics(metricService);
+ bindDataNodePartitionMetrics();
bindDatabasePartitionMetrics(metricService);
}
@Override
public void unbindFrom(AbstractMetricService metricService) {
unbindRegionPartitionMetrics(metricService);
- unbindDataNodePartitionMetrics(metricService);
+ unbindDataNodePartitionMetrics();
unbindDatabasePartitionMetrics(metricService);
}
@@ -117,99 +118,157 @@ public class PartitionMetrics implements IMetricSet {
}
}
- private void bindDataNodePartitionMetrics(AbstractMetricService metricService) {
+ public static void bindDataNodePartitionMetrics(IManager configManager, int dataNodeId) {
+ MetricService metricService = MetricService.getInstance();
+ NodeManager nodeManager = configManager.getNodeManager();
+ PartitionManager partitionManager = configManager.getPartitionManager();
+ LoadManager loadManager = configManager.getLoadManager();
+
+ String dataNodeName =
+ NodeUrlUtils.convertTEndPointUrl(
+ nodeManager.getRegisteredDataNode(dataNodeId).getLocation().getClientRpcEndPoint());
+
+ // Count the number of Regions in the specified DataNode
+ metricService.createAutoGauge(
+ Metric.REGION_NUM_IN_DATA_NODE.toString(),
+ MetricLevel.CORE,
+ partitionManager,
+ obj -> obj.getRegionCount(dataNodeId, TConsensusGroupType.SchemaRegion),
+ Tag.NAME.toString(),
+ dataNodeName,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.SchemaRegion.toString());
+ metricService.createAutoGauge(
+ Metric.REGION_NUM_IN_DATA_NODE.toString(),
+ MetricLevel.CORE,
+ partitionManager,
+ obj -> obj.getRegionCount(dataNodeId, TConsensusGroupType.DataRegion),
+ Tag.NAME.toString(),
+ dataNodeName,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.DataRegion.toString());
+
+ // Count the number of RegionGroup-leaders in the specified DataNode
+ metricService.createAutoGauge(
+ Metric.REGION_GROUP_LEADER_NUM_IN_DATA_NODE.toString(),
+ MetricLevel.CORE,
+ loadManager,
+ obj -> obj.getRegionGroupLeaderCount(dataNodeId, TConsensusGroupType.SchemaRegion),
+ Tag.NAME.toString(),
+ dataNodeName,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.SchemaRegion.toString());
+ metricService.createAutoGauge(
+ Metric.REGION_GROUP_LEADER_NUM_IN_DATA_NODE.toString(),
+ MetricLevel.CORE,
+ loadManager,
+ obj -> obj.getRegionGroupLeaderCount(dataNodeId, TConsensusGroupType.DataRegion),
+ Tag.NAME.toString(),
+ dataNodeName,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.DataRegion.toString());
+ }
+
+ private void bindDataNodePartitionMetrics() {
List<TDataNodeConfiguration> registerDataNodes = getNodeManager().getRegisteredDataNodes();
for (TDataNodeConfiguration dataNodeConfiguration : registerDataNodes) {
int dataNodeId = dataNodeConfiguration.getLocation().getDataNodeId();
- String dataNodeName =
- NodeUrlUtils.convertTEndPointUrl(
- dataNodeConfiguration.getLocation().getClientRpcEndPoint());
-
- // Count the number of Regions in the specified DataNode
- metricService.createAutoGauge(
- Metric.REGION_NUM_IN_DATA_NODE.toString(),
- MetricLevel.CORE,
- getPartitionManager(),
- partitionManager ->
- partitionManager.getRegionCount(dataNodeId, TConsensusGroupType.SchemaRegion),
- Tag.NAME.toString(),
- dataNodeName,
- Tag.TYPE.toString(),
- TConsensusGroupType.SchemaRegion.toString());
- metricService.createAutoGauge(
- Metric.REGION_NUM_IN_DATA_NODE.toString(),
- MetricLevel.CORE,
- getPartitionManager(),
- partitionManager ->
- partitionManager.getRegionCount(dataNodeId, TConsensusGroupType.DataRegion),
- Tag.NAME.toString(),
- dataNodeName,
- Tag.TYPE.toString(),
- TConsensusGroupType.DataRegion.toString());
-
- // Count the number of RegionGroup-leaders in the specified DataNode
- metricService.createAutoGauge(
- Metric.REGION_GROUP_LEADER_NUM_IN_DATA_NODE.toString(),
- MetricLevel.CORE,
- getLoadManager(),
- loadManager ->
- loadManager.getRegionGroupLeaderCount(dataNodeId, TConsensusGroupType.SchemaRegion),
- Tag.NAME.toString(),
- dataNodeName,
- Tag.TYPE.toString(),
- TConsensusGroupType.SchemaRegion.toString());
- metricService.createAutoGauge(
- Metric.REGION_GROUP_LEADER_NUM_IN_DATA_NODE.toString(),
- MetricLevel.CORE,
- getLoadManager(),
- loadManager ->
- loadManager.getRegionGroupLeaderCount(dataNodeId, TConsensusGroupType.DataRegion),
- Tag.NAME.toString(),
- dataNodeName,
- Tag.TYPE.toString(),
- TConsensusGroupType.DataRegion.toString());
+ bindDataNodePartitionMetrics(configManager, dataNodeId);
}
}
- private void unbindDataNodePartitionMetrics(AbstractMetricService metricService) {
+ public static void unbindDataNodePartitionMetrics(String dataNodeName) {
+ MetricService metricService = MetricService.getInstance();
+
+ // Remove the number of Regions in the specified DataNode
+ metricService.remove(
+ MetricType.AUTO_GAUGE,
+ Metric.REGION_NUM_IN_DATA_NODE.toString(),
+ Tag.NAME.toString(),
+ dataNodeName,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.SchemaRegion.toString());
+ metricService.remove(
+ MetricType.AUTO_GAUGE,
+ Metric.REGION_NUM_IN_DATA_NODE.toString(),
+ Tag.NAME.toString(),
+ dataNodeName,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.DataRegion.toString());
+
+ // Remove the number of RegionGroup-leaders in the specified DataNode
+ metricService.remove(
+ MetricType.AUTO_GAUGE,
+ Metric.REGION_GROUP_LEADER_NUM_IN_DATA_NODE.toString(),
+ Tag.NAME.toString(),
+ dataNodeName,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.SchemaRegion.toString());
+ metricService.remove(
+ MetricType.AUTO_GAUGE,
+ Metric.REGION_GROUP_LEADER_NUM_IN_DATA_NODE.toString(),
+ Tag.NAME.toString(),
+ dataNodeName,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.DataRegion.toString());
+ }
+
+ private void unbindDataNodePartitionMetrics() {
List<TDataNodeConfiguration> registerDataNodes = getNodeManager().getRegisteredDataNodes();
for (TDataNodeConfiguration dataNodeConfiguration : registerDataNodes) {
String dataNodeName =
NodeUrlUtils.convertTEndPointUrl(
dataNodeConfiguration.getLocation().getClientRpcEndPoint());
+ unbindDataNodePartitionMetrics(dataNodeName);
+ }
+ }
- // Remove the number of Regions in the specified DataNode
- metricService.remove(
- MetricType.AUTO_GAUGE,
- Metric.REGION_NUM_IN_DATA_NODE.toString(),
- Tag.NAME.toString(),
- dataNodeName,
- Tag.TYPE.toString(),
- TConsensusGroupType.SchemaRegion.toString());
- metricService.remove(
- MetricType.AUTO_GAUGE,
- Metric.REGION_NUM_IN_DATA_NODE.toString(),
- Tag.NAME.toString(),
- dataNodeName,
- Tag.TYPE.toString(),
- TConsensusGroupType.DataRegion.toString());
+ public static void bindDatabasePartitionMetrics(IManager configManager, String database) {
+ MetricService metricService = MetricService.getInstance();
+ PartitionManager partitionManager = configManager.getPartitionManager();
- // Remove the number of RegionGroup-leaders in the specified DataNode
- metricService.remove(
- MetricType.AUTO_GAUGE,
- Metric.REGION_GROUP_LEADER_NUM_IN_DATA_NODE.toString(),
- Tag.NAME.toString(),
- dataNodeName,
- Tag.TYPE.toString(),
- TConsensusGroupType.SchemaRegion.toString());
- metricService.remove(
- MetricType.AUTO_GAUGE,
- Metric.REGION_GROUP_LEADER_NUM_IN_DATA_NODE.toString(),
- Tag.NAME.toString(),
- dataNodeName,
- Tag.TYPE.toString(),
- TConsensusGroupType.DataRegion.toString());
- }
+ // Count the number of SeriesSlots in the specified Database
+ metricService.createAutoGauge(
+ Metric.SERIES_SLOT_NUM_IN_DATABASE.toString(),
+ MetricLevel.CORE,
+ partitionManager,
+ manager -> manager.getAssignedSeriesPartitionSlotsCount(database),
+ Tag.NAME.toString(),
+ database);
+
+ // Count the number of RegionGroups in the specified Database
+ metricService.createAutoGauge(
+ Metric.REGION_GROUP_NUM_IN_DATABASE.toString(),
+ MetricLevel.CORE,
+ partitionManager,
+ manager -> {
+ try {
+ return manager.getRegionGroupCount(database, TConsensusGroupType.SchemaRegion);
+ } catch (DatabaseNotExistsException e) {
+ LOGGER.warn("Error when counting SchemaRegionGroups in Database: {}", database, e);
+ throw new RuntimeException(e);
+ }
+ },
+ Tag.NAME.toString(),
+ database,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.SchemaRegion.toString());
+ metricService.createAutoGauge(
+ Metric.REGION_GROUP_NUM_IN_DATABASE.toString(),
+ MetricLevel.CORE,
+ partitionManager,
+ manager -> {
+ try {
+ return manager.getRegionGroupCount(database, TConsensusGroupType.DataRegion);
+ } catch (DatabaseNotExistsException e) {
+ LOGGER.warn("Error when counting DataRegionGroups in Database: {}", database, e);
+ throw new RuntimeException(e);
+ }
+ },
+ Tag.NAME.toString(),
+ database,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.DataRegion.toString());
}
private void bindDatabasePartitionMetrics(AbstractMetricService metricService) {
@@ -222,80 +281,44 @@ public class PartitionMetrics implements IMetricSet {
List<String> databases = getClusterSchemaManager().getDatabaseNames();
for (String database : databases) {
- // Count the number of SeriesSlots in the specified Database
- metricService.createAutoGauge(
- Metric.SERIES_SLOT_NUM_IN_DATABASE.toString(),
- MetricLevel.CORE,
- getPartitionManager(),
- partitionManager -> partitionManager.getAssignedSeriesPartitionSlotsCount(database),
- Tag.NAME.toString(),
- database);
-
- // Count the number of RegionGroups in the specified Database
- metricService.createAutoGauge(
- Metric.REGION_GROUP_NUM_IN_DATABASE.toString(),
- MetricLevel.CORE,
- getPartitionManager(),
- partitionManager -> {
- try {
- return partitionManager.getRegionGroupCount(
- database, TConsensusGroupType.SchemaRegion);
- } catch (DatabaseNotExistsException e) {
- LOGGER.warn("Error when counting SchemaRegionGroups in Database: {}", database, e);
- throw new RuntimeException(e);
- }
- },
- Tag.NAME.toString(),
- database,
- Tag.TYPE.toString(),
- TConsensusGroupType.SchemaRegion.toString());
- metricService.createAutoGauge(
- Metric.REGION_GROUP_NUM_IN_DATABASE.toString(),
- MetricLevel.CORE,
- getPartitionManager(),
- partitionManager -> {
- try {
- return partitionManager.getRegionGroupCount(database, TConsensusGroupType.DataRegion);
- } catch (DatabaseNotExistsException e) {
- LOGGER.warn("Error when counting DataRegionGroups in Database: {}", database, e);
- throw new RuntimeException(e);
- }
- },
- Tag.NAME.toString(),
- database,
- Tag.TYPE.toString(),
- TConsensusGroupType.DataRegion.toString());
+ bindDatabasePartitionMetrics(configManager, database);
}
}
+ public static void unbindDatabasePartitionMetrics(String database) {
+ MetricService metricService = MetricService.getInstance();
+
+ // Remove the number of SeriesSlots in the specified Database
+ metricService.remove(
+ MetricType.AUTO_GAUGE,
+ Metric.SERIES_SLOT_NUM_IN_DATABASE.toString(),
+ Tag.NAME.toString(),
+ database);
+
+ // Remove number of RegionGroups in the specified Database
+ metricService.remove(
+ MetricType.AUTO_GAUGE,
+ Metric.REGION_GROUP_NUM_IN_DATABASE.toString(),
+ Tag.NAME.toString(),
+ database,
+ Tag.TYPE.toString(),
+ TConsensusGroupType.SchemaRegion.toString());
+ metricService.remove(
+ MetricType.AUTO_GAUGE,
+ Metric.REGION_GROUP_NUM_IN_DATABASE.toString(),
+ Tag.NAME.toString(),
+ 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());
List<String> databases = getClusterSchemaManager().getDatabaseNames();
for (String database : databases) {
- // Remove the number of SeriesSlots in the specified Database
- metricService.remove(
- MetricType.AUTO_GAUGE,
- Metric.SERIES_SLOT_NUM_IN_DATABASE.toString(),
- Tag.NAME.toString(),
- database);
-
- // Remove number of RegionGroups in the specified Database
- metricService.remove(
- MetricType.AUTO_GAUGE,
- Metric.REGION_GROUP_NUM_IN_DATABASE.toString(),
- Tag.NAME.toString(),
- database,
- Tag.TYPE.toString(),
- TConsensusGroupType.SchemaRegion.toString());
- metricService.remove(
- MetricType.AUTO_GAUGE,
- Metric.REGION_GROUP_NUM_IN_DATABASE.toString(),
- Tag.NAME.toString(),
- database,
- Tag.TYPE.toString(),
- TConsensusGroupType.DataRegion.toString());
+ unbindDatabasePartitionMetrics(database);
}
}
@@ -311,10 +334,6 @@ public class PartitionMetrics implements IMetricSet {
return configManager.getPartitionManager();
}
- private LoadManager getLoadManager() {
- return configManager.getLoadManager();
- }
-
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java
index d424a1eff9..33fec29316 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/DataNodeRemoveHandler.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.cluster.NodeStatus;
+import org.apache.iotdb.commons.utils.NodeUrlUtils;
import org.apache.iotdb.confignode.client.DataNodeRequestType;
import org.apache.iotdb.confignode.client.sync.SyncDataNodeClientPool;
import org.apache.iotdb.confignode.conf.ConfigNodeConfig;
@@ -34,6 +35,7 @@ import org.apache.iotdb.confignode.consensus.request.write.partition.UpdateRegio
import org.apache.iotdb.confignode.consensus.response.datanode.DataNodeToStatusResp;
import org.apache.iotdb.confignode.manager.ConfigManager;
import org.apache.iotdb.confignode.manager.node.heartbeat.BaseNodeCache;
+import org.apache.iotdb.confignode.manager.partition.PartitionMetrics;
import org.apache.iotdb.confignode.persistence.node.NodeInfo;
import org.apache.iotdb.confignode.procedure.scheduler.LockQueue;
import org.apache.iotdb.mpp.rpc.thrift.TCreatePeerReq;
@@ -551,11 +553,16 @@ public class DataNodeRemoveHandler {
/**
* Remove data node in node info
*
- * @param tDataNodeLocation data node location
+ * @param dataNodeLocation data node location
*/
- public void removeDataNodePersistence(TDataNodeLocation tDataNodeLocation) {
- List<TDataNodeLocation> removeDataNodes = Collections.singletonList(tDataNodeLocation);
+ public void removeDataNodePersistence(TDataNodeLocation dataNodeLocation) {
+ // Remove consensus record
+ List<TDataNodeLocation> removeDataNodes = Collections.singletonList(dataNodeLocation);
configManager.getConsensusManager().write(new RemoveDataNodePlan(removeDataNodes));
+
+ // Remove metrics
+ PartitionMetrics.unbindDataNodePartitionMetrics(
+ NodeUrlUtils.convertTEndPointUrl(dataNodeLocation.getClientRpcEndPoint()));
}
/**
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteStorageGroupProcedure.java b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
similarity index 93%
rename from confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteStorageGroupProcedure.java
rename to confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
index 89ecff9aa2..5a16ad0d0b 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteStorageGroupProcedure.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.commons.exception.runtime.ThriftSerDeException;
import org.apache.iotdb.commons.utils.ThriftConfigNodeSerDeUtils;
import org.apache.iotdb.confignode.consensus.request.write.region.OfferRegionMaintainTasksPlan;
import org.apache.iotdb.confignode.consensus.request.write.storagegroup.PreDeleteDatabasePlan;
+import org.apache.iotdb.confignode.manager.partition.PartitionMetrics;
import org.apache.iotdb.confignode.persistence.partition.maintainer.RegionDeleteTask;
import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
@@ -45,18 +46,18 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.List;
-public class DeleteStorageGroupProcedure
+public class DeleteDatabaseProcedure
extends StateMachineProcedure<ConfigNodeProcedureEnv, DeleteStorageGroupState> {
- private static final Logger LOG = LoggerFactory.getLogger(DeleteStorageGroupProcedure.class);
+ private static final Logger LOG = LoggerFactory.getLogger(DeleteDatabaseProcedure.class);
private static final int RETRY_THRESHOLD = 5;
private TDatabaseSchema deleteSgSchema;
- public DeleteStorageGroupProcedure() {
+ public DeleteDatabaseProcedure() {
super();
}
- public DeleteStorageGroupProcedure(TDatabaseSchema deleteSgSchema) {
+ public DeleteDatabaseProcedure(TDatabaseSchema deleteSgSchema) {
super();
this.deleteSgSchema = deleteSgSchema;
}
@@ -123,9 +124,12 @@ public class DeleteStorageGroupProcedure
});
env.getConfigManager().getConsensusManager().write(offerPlan);
- // Delete StorageGroupPartitionTable
+ // Delete DatabasePartitionTable
TSStatus status = env.deleteConfig(deleteSgSchema.getName());
+ // Delete Database metrics
+ PartitionMetrics.unbindDatabasePartitionMetrics(deleteSgSchema.getName());
+
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return Flow.NO_MORE_STATE;
} else if (getCycles() > RETRY_THRESHOLD) {
@@ -208,8 +212,8 @@ public class DeleteStorageGroupProcedure
@Override
public boolean equals(Object that) {
- if (that instanceof DeleteStorageGroupProcedure) {
- DeleteStorageGroupProcedure thatProc = (DeleteStorageGroupProcedure) that;
+ if (that instanceof DeleteDatabaseProcedure) {
+ DeleteDatabaseProcedure thatProc = (DeleteDatabaseProcedure) that;
return thatProc.getProcId() == this.getProcId()
&& thatProc.getState() == this.getState()
&& thatProc.deleteSgSchema.equals(this.getDeleteSgSchema());
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java
index 268d1965c9..ab4e9f8af9 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/store/ProcedureFactory.java
@@ -25,7 +25,7 @@ import org.apache.iotdb.confignode.procedure.impl.node.AddConfigNodeProcedure;
import org.apache.iotdb.confignode.procedure.impl.node.RemoveConfigNodeProcedure;
import org.apache.iotdb.confignode.procedure.impl.node.RemoveDataNodeProcedure;
import org.apache.iotdb.confignode.procedure.impl.schema.DeactivateTemplateProcedure;
-import org.apache.iotdb.confignode.procedure.impl.schema.DeleteStorageGroupProcedure;
+import org.apache.iotdb.confignode.procedure.impl.schema.DeleteDatabaseProcedure;
import org.apache.iotdb.confignode.procedure.impl.schema.DeleteTimeSeriesProcedure;
import org.apache.iotdb.confignode.procedure.impl.schema.UnsetTemplateProcedure;
import org.apache.iotdb.confignode.procedure.impl.statemachine.CreateRegionGroupsProcedure;
@@ -60,7 +60,7 @@ public class ProcedureFactory implements IProcedureFactory {
Procedure procedure;
switch (procedureType) {
case DELETE_STORAGE_GROUP_PROCEDURE:
- procedure = new DeleteStorageGroupProcedure();
+ procedure = new DeleteDatabaseProcedure();
break;
case ADD_CONFIG_NODE_PROCEDURE:
procedure = new AddConfigNodeProcedure();
@@ -118,7 +118,7 @@ public class ProcedureFactory implements IProcedureFactory {
}
public static ProcedureType getProcedureType(Procedure procedure) {
- if (procedure instanceof DeleteStorageGroupProcedure) {
+ if (procedure instanceof DeleteDatabaseProcedure) {
return ProcedureType.DELETE_STORAGE_GROUP_PROCEDURE;
} else if (procedure instanceof AddConfigNodeProcedure) {
return ProcedureType.ADD_CONFIG_NODE_PROCEDURE;
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java b/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
index 7fd105a297..d91a99d0fd 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
@@ -106,7 +106,7 @@ import org.apache.iotdb.confignode.consensus.request.write.trigger.UpdateTrigger
import org.apache.iotdb.confignode.persistence.partition.maintainer.RegionCreateTask;
import org.apache.iotdb.confignode.persistence.partition.maintainer.RegionDeleteTask;
import org.apache.iotdb.confignode.procedure.Procedure;
-import org.apache.iotdb.confignode.procedure.impl.schema.DeleteStorageGroupProcedure;
+import org.apache.iotdb.confignode.procedure.impl.schema.DeleteDatabaseProcedure;
import org.apache.iotdb.confignode.procedure.impl.statemachine.CreateRegionGroupsProcedure;
import org.apache.iotdb.confignode.rpc.thrift.TCreateCQReq;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
@@ -751,15 +751,15 @@ public class ConfigPhysicalPlanSerDeTest {
@Test
public void updateProcedureTest() throws IOException {
// test procedure equals DeleteStorageGroupProcedure
- DeleteStorageGroupProcedure deleteStorageGroupProcedure = new DeleteStorageGroupProcedure();
- deleteStorageGroupProcedure.setDeleteSgSchema(new TDatabaseSchema("root.sg"));
+ DeleteDatabaseProcedure deleteDatabaseProcedure = new DeleteDatabaseProcedure();
+ deleteDatabaseProcedure.setDeleteSgSchema(new TDatabaseSchema("root.sg"));
UpdateProcedurePlan updateProcedurePlan0 = new UpdateProcedurePlan();
- updateProcedurePlan0.setProcedure(deleteStorageGroupProcedure);
+ updateProcedurePlan0.setProcedure(deleteDatabaseProcedure);
UpdateProcedurePlan updateProcedurePlan1 =
(UpdateProcedurePlan)
ConfigPhysicalPlan.Factory.create(updateProcedurePlan0.serializeToByteBuffer());
Procedure proc = updateProcedurePlan1.getProcedure();
- Assert.assertEquals(proc, deleteStorageGroupProcedure);
+ Assert.assertEquals(proc, deleteDatabaseProcedure);
// test procedure equals CreateRegionGroupsProcedure
TDataNodeLocation dataNodeLocation0 = new TDataNodeLocation();
@@ -796,11 +796,11 @@ public class ConfigPhysicalPlanSerDeTest {
@Test
public void UpdateProcedurePlanTest() throws IOException {
UpdateProcedurePlan req0 = new UpdateProcedurePlan();
- DeleteStorageGroupProcedure deleteStorageGroupProcedure = new DeleteStorageGroupProcedure();
+ DeleteDatabaseProcedure deleteDatabaseProcedure = new DeleteDatabaseProcedure();
TDatabaseSchema tDatabaseSchema = new TDatabaseSchema();
tDatabaseSchema.setName("root.sg");
- deleteStorageGroupProcedure.setDeleteSgSchema(tDatabaseSchema);
- req0.setProcedure(deleteStorageGroupProcedure);
+ deleteDatabaseProcedure.setDeleteSgSchema(tDatabaseSchema);
+ req0.setProcedure(deleteDatabaseProcedure);
UpdateProcedurePlan req1 =
(UpdateProcedurePlan) ConfigPhysicalPlan.Factory.create(req0.serializeToByteBuffer());
Assert.assertEquals(req0, req1);
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/DeleteStorageGroupProcedureTest.java b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/DeleteDatabaseProcedureTest.java
similarity index 81%
rename from confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/DeleteStorageGroupProcedureTest.java
rename to confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/DeleteDatabaseProcedureTest.java
index 612ac01c60..1d4be74c5f 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/DeleteStorageGroupProcedureTest.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/DeleteDatabaseProcedureTest.java
@@ -19,7 +19,7 @@
package org.apache.iotdb.confignode.procedure.impl;
-import org.apache.iotdb.confignode.procedure.impl.schema.DeleteStorageGroupProcedure;
+import org.apache.iotdb.confignode.procedure.impl.schema.DeleteDatabaseProcedure;
import org.apache.iotdb.confignode.procedure.store.ProcedureFactory;
import org.apache.iotdb.confignode.rpc.thrift.TDatabaseSchema;
import org.apache.iotdb.tsfile.utils.PublicBAOS;
@@ -32,23 +32,22 @@ import java.nio.ByteBuffer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
-public class DeleteStorageGroupProcedureTest {
+public class DeleteDatabaseProcedureTest {
@Test
public void serializeDeserializeTest() {
PublicBAOS byteArrayOutputStream = new PublicBAOS();
DataOutputStream outputStream = new DataOutputStream(byteArrayOutputStream);
- DeleteStorageGroupProcedure p1 =
- new DeleteStorageGroupProcedure(new TDatabaseSchema("root.sg"));
+ DeleteDatabaseProcedure p1 = new DeleteDatabaseProcedure(new TDatabaseSchema("root.sg"));
try {
p1.serialize(outputStream);
ByteBuffer buffer =
ByteBuffer.wrap(byteArrayOutputStream.getBuf(), 0, byteArrayOutputStream.size());
- DeleteStorageGroupProcedure p2 =
- (DeleteStorageGroupProcedure) ProcedureFactory.getInstance().create(buffer);
+ DeleteDatabaseProcedure p2 =
+ (DeleteDatabaseProcedure) ProcedureFactory.getInstance().create(buffer);
assertEquals(p1, p2);
} catch (Exception e) {