diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java index 4aa8d54522b5c..6e508da618c50 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java @@ -134,7 +134,7 @@ private void loadProps() { MetricConfigDescriptor.getInstance().loadProps(commonProperties); MetricConfigDescriptor.getInstance() .getMetricConfig() - .updateRpcInstance(conf.getClusterName(), conf.getConfigNodeId(), NodeType.CONFIGNODE); + .updateRpcInstance(conf.getClusterName(), NodeType.CONFIGNODE); } } else { LOGGER.warn( diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java index e0d85b9b46d8a..090d1f4bb0e76 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java @@ -42,6 +42,7 @@ import org.apache.iotdb.confignode.service.thrift.ConfigNodeRPCServiceProcessor; import org.apache.iotdb.db.service.metrics.ProcessMetrics; import org.apache.iotdb.db.service.metrics.SystemMetrics; +import org.apache.iotdb.metrics.config.MetricConfigDescriptor; import org.apache.iotdb.metrics.metricsets.disk.DiskMetrics; import org.apache.iotdb.metrics.metricsets.jvm.JvmMetrics; import org.apache.iotdb.metrics.metricsets.logback.LogbackMetrics; @@ -114,6 +115,9 @@ public void active() { } configManager.initConsensusManager(); + setUpMetricService(); + // Notice: We always set up Seed-ConfigNode's RPC service lastly to ensure + // that the external service is not provided until ConfigNode is fully available setUpRPCService(); LOGGER.info( "{} has successfully restarted and joined the cluster: {}.", @@ -144,8 +148,9 @@ public void active() { SEED_CONFIG_NODE_ID, new TEndPoint(CONF.getInternalAddress(), CONF.getInternalPort()), new TEndPoint(CONF.getInternalAddress(), CONF.getConsensusPort()))); - // We always set up Seed-ConfigNode's RPC service lastly to ensure that - // the external service is not provided until Seed-ConfigNode is fully initialized + setUpMetricService(); + // Notice: We always set up Seed-ConfigNode's RPC service lastly to ensure + // that the external service is not provided until Seed-ConfigNode is fully initialized setUpRPCService(); // The initial startup of Seed-ConfigNode finished @@ -168,6 +173,7 @@ public void active() { ConfigNodeConstant.GLOBAL_NAME, CONF.getConfigNodeId(), CONF.getClusterName()); + setUpMetricService(); boolean isJoinedCluster = false; for (int retry = 0; retry < SCHEDULE_WAITING_RETRY_NUM; retry++) { @@ -184,6 +190,7 @@ public void active() { TimeUnit.MILLISECONDS.sleep(STARTUP_RETRY_INTERVAL_IN_MS); } catch (InterruptedException e) { LOGGER.warn("Waiting leader's scheduling is interrupted."); + Thread.currentThread().interrupt(); } } @@ -210,6 +217,11 @@ private void setUpInternalServices() throws StartupException, IOException { registerManager.register(new JMXService()); JMXService.registerMBean(this, mbeanName); + LOGGER.info("Successfully setup internal services."); + } + + private void setUpMetricService() throws StartupException { + MetricConfigDescriptor.getInstance().getMetricConfig().setNodeId(CONF.getConfigNodeId()); registerManager.register(MetricService.getInstance()); // bind predefined metric sets MetricService.getInstance().addMetricSet(new JvmMetrics()); @@ -217,8 +229,6 @@ private void setUpInternalServices() throws StartupException, IOException { MetricService.getInstance().addMetricSet(new ProcessMetrics()); MetricService.getInstance().addMetricSet(new SystemMetrics(false)); MetricService.getInstance().addMetricSet(new DiskMetrics(IoTDBConstant.CN_ROLE)); - - LOGGER.info("Successfully setup internal services."); } private void initConfigManager() { diff --git a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java index 9d9b061847518..2d551495d28e0 100644 --- a/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java +++ b/metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java @@ -156,12 +156,15 @@ public int getNodeId() { } /** Update rpc address and rpc port of monitored node. */ - public void updateRpcInstance(String clusterName, int nodeId, NodeType nodeType) { + public void updateRpcInstance(String clusterName, NodeType nodeType) { this.clusterName = clusterName; - this.nodeId = nodeId; this.nodeType = nodeType; } + public void setNodeId(int nodeId) { + this.nodeId = nodeId; + } + /** Copy properties from another metric config. */ public void copy(MetricConfig newMetricConfig) { metricFrameType = newMetricConfig.getMetricFrameType(); diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java index 5efca9f11dc97..bef143f3f9524 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java @@ -189,7 +189,7 @@ private void loadProps() { MetricConfigDescriptor.getInstance().loadProps(commonProperties); MetricConfigDescriptor.getInstance() .getMetricConfig() - .updateRpcInstance(conf.getClusterName(), conf.getDataNodeId(), NodeType.DATANODE); + .updateRpcInstance(conf.getClusterName(), NodeType.DATANODE); } } else { logger.warn( diff --git a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java index 31e89349feed9..45959def262f1 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java +++ b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java @@ -168,12 +168,12 @@ protected void doAddNode() { // Active DataNode active(); - // Setup rpc service - setUpRPCService(); - // Setup metric service setUpMetricService(); + // Setup rpc service + setUpRPCService(); + // Serialize mutable system properties IoTDBStartCheck.getInstance().serializeMutableSystemPropertiesIfNecessary(); @@ -555,6 +555,7 @@ private void setUpRPCService() throws StartupException { } private void setUpMetricService() throws StartupException { + MetricConfigDescriptor.getInstance().getMetricConfig().setNodeId(config.getDataNodeId()); registerManager.register(MetricService.getInstance()); // init metric service