in iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java [149:388]
private void loadProperties(TrimProperties properties) throws BadNodeUrlException, IOException {
conf.setClusterName(properties.getProperty(IoTDBConstant.CLUSTER_NAME, conf.getClusterName()));
conf.setInternalAddress(
properties.getProperty(IoTDBConstant.CN_INTERNAL_ADDRESS, conf.getInternalAddress()));
conf.setInternalPort(
Integer.parseInt(
properties.getProperty(
IoTDBConstant.CN_INTERNAL_PORT, String.valueOf(conf.getInternalPort()))));
conf.setConsensusPort(
Integer.parseInt(
properties.getProperty(
IoTDBConstant.CN_CONSENSUS_PORT, String.valueOf(conf.getConsensusPort()))));
String seedConfigNode = properties.getProperty(IoTDBConstant.CN_SEED_CONFIG_NODE, null);
if (seedConfigNode == null) {
seedConfigNode = properties.getProperty(IoTDBConstant.CN_TARGET_CONFIG_NODE_LIST, null);
LOGGER.warn(
"The parameter cn_target_config_node_list has been abandoned, "
+ "only the first ConfigNode address will be used to join in the cluster. "
+ "Please use cn_seed_config_node instead.");
}
if (seedConfigNode != null) {
conf.setSeedConfigNode(NodeUrlUtils.parseTEndPointUrls(seedConfigNode).get(0));
}
conf.setSeriesSlotNum(
Integer.parseInt(
properties.getProperty("series_slot_num", String.valueOf(conf.getSeriesSlotNum()))));
conf.setSeriesPartitionExecutorClass(
properties.getProperty(
"series_partition_executor_class", conf.getSeriesPartitionExecutorClass()));
conf.setConfigNodeConsensusProtocolClass(
properties.getProperty(
"config_node_consensus_protocol_class", conf.getConfigNodeConsensusProtocolClass()));
conf.setSchemaRegionConsensusProtocolClass(
properties.getProperty(
"schema_region_consensus_protocol_class",
conf.getSchemaRegionConsensusProtocolClass()));
conf.setSchemaReplicationFactor(
Integer.parseInt(
properties.getProperty(
"schema_replication_factor", String.valueOf(conf.getSchemaReplicationFactor()))));
conf.setDataRegionConsensusProtocolClass(
properties.getProperty(
"data_region_consensus_protocol_class", conf.getDataRegionConsensusProtocolClass()));
conf.setDataReplicationFactor(
Integer.parseInt(
properties.getProperty(
"data_replication_factor", String.valueOf(conf.getDataReplicationFactor()))));
conf.setSchemaRegionGroupExtensionPolicy(
RegionGroupExtensionPolicy.parse(
properties.getProperty(
"schema_region_group_extension_policy",
conf.getSchemaRegionGroupExtensionPolicy().getPolicy())));
conf.setDefaultSchemaRegionGroupNumPerDatabase(
Integer.parseInt(
properties.getProperty(
"default_schema_region_group_num_per_database",
String.valueOf(conf.getDefaultSchemaRegionGroupNumPerDatabase()))));
conf.setSchemaRegionPerDataNode(
(int)
Double.parseDouble(
properties.getProperty(
"schema_region_per_data_node",
String.valueOf(conf.getSchemaRegionPerDataNode()))));
conf.setDataRegionGroupExtensionPolicy(
RegionGroupExtensionPolicy.parse(
properties.getProperty(
"data_region_group_extension_policy",
conf.getDataRegionGroupExtensionPolicy().getPolicy())));
conf.setDefaultDataRegionGroupNumPerDatabase(
Integer.parseInt(
properties.getProperty(
"default_data_region_group_num_per_database",
String.valueOf(conf.getDefaultDataRegionGroupNumPerDatabase()))));
conf.setDataRegionPerDataNode(
(int)
Double.parseDouble(
properties.getProperty(
"data_region_per_data_node", String.valueOf(conf.getDataRegionPerDataNode()))));
try {
conf.setRegionAllocateStrategy(
RegionBalancer.RegionGroupAllocatePolicy.valueOf(
properties.getProperty(
"region_group_allocate_policy", conf.getRegionGroupAllocatePolicy().name())));
} catch (IllegalArgumentException e) {
throw new IOException(e);
}
conf.setCnRpcMaxConcurrentClientNum(
Integer.parseInt(
properties.getProperty(
"cn_rpc_max_concurrent_client_num",
String.valueOf(conf.getCnRpcMaxConcurrentClientNum()))));
conf.setMaxClientNumForEachNode(
Integer.parseInt(
properties.getProperty(
"cn_max_client_count_for_each_node_in_client_manager",
String.valueOf(conf.getMaxClientNumForEachNode()))));
conf.setSystemDir(properties.getProperty("cn_system_dir", conf.getSystemDir()));
conf.setConsensusDir(properties.getProperty("cn_consensus_dir", conf.getConsensusDir()));
conf.setUdfDir(properties.getProperty("udf_lib_dir", conf.getUdfDir()));
conf.setTriggerDir(properties.getProperty("trigger_lib_dir", conf.getTriggerDir()));
conf.setPipeDir(properties.getProperty("pipe_lib_dir", conf.getPipeDir()));
conf.setPipeReceiverFileDir(
Optional.ofNullable(properties.getProperty("cn_pipe_receiver_file_dir"))
.orElse(
properties.getProperty(
"pipe_receiver_file_dir",
conf.getSystemDir() + File.separator + "pipe" + File.separator + "receiver")));
conf.setHeartbeatIntervalInMs(
Long.parseLong(
properties.getProperty(
"heartbeat_interval_in_ms", String.valueOf(conf.getHeartbeatIntervalInMs()))));
String failureDetector = properties.getProperty("failure_detector", conf.getFailureDetector());
if (IFailureDetector.FIXED_DETECTOR.equals(failureDetector)
|| IFailureDetector.PHI_ACCRUAL_DETECTOR.equals(failureDetector)) {
conf.setFailureDetector(failureDetector);
} else {
throw new IOException(
String.format(
"Unknown failure_detector: %s, " + "please set to \"fixed\" or \"phi_accrual\"",
failureDetector));
}
conf.setFailureDetectorFixedThresholdInMs(
Long.parseLong(
properties.getProperty(
"failure_detector_fixed_threshold_in_ms",
String.valueOf(conf.getFailureDetectorFixedThresholdInMs()))));
conf.setFailureDetectorPhiThreshold(
Long.parseLong(
properties.getProperty(
"failure_detector_phi_threshold",
String.valueOf(conf.getFailureDetectorPhiThreshold()))));
conf.setFailureDetectorPhiAcceptablePauseInMs(
Long.parseLong(
properties.getProperty(
"failure_detector_phi_acceptable_pause_in_ms",
String.valueOf(conf.getFailureDetectorPhiAcceptablePauseInMs()))));
String leaderDistributionPolicy =
properties.getProperty("leader_distribution_policy", conf.getLeaderDistributionPolicy());
if (AbstractLeaderBalancer.GREEDY_POLICY.equals(leaderDistributionPolicy)
|| AbstractLeaderBalancer.CFD_POLICY.equals(leaderDistributionPolicy)) {
conf.setLeaderDistributionPolicy(leaderDistributionPolicy);
} else {
throw new IOException(
String.format(
"Unknown leader_distribution_policy: %s, " + "please set to \"GREEDY\" or \"CFD\"",
leaderDistributionPolicy));
}
conf.setEnableAutoLeaderBalanceForRatisConsensus(
Boolean.parseBoolean(
properties.getProperty(
"enable_auto_leader_balance_for_ratis_consensus",
String.valueOf(conf.isEnableAutoLeaderBalanceForRatisConsensus()))));
conf.setEnableAutoLeaderBalanceForIoTConsensus(
Boolean.parseBoolean(
properties.getProperty(
"enable_auto_leader_balance_for_iot_consensus",
String.valueOf(conf.isEnableAutoLeaderBalanceForIoTConsensus()))));
String routePriorityPolicy =
properties.getProperty("route_priority_policy", conf.getRoutePriorityPolicy());
if (IPriorityBalancer.GREEDY_POLICY.equals(routePriorityPolicy)
|| IPriorityBalancer.LEADER_POLICY.equals(routePriorityPolicy)) {
conf.setRoutePriorityPolicy(routePriorityPolicy);
} else {
throw new IOException(
String.format(
"Unknown route_priority_policy: %s, please set to \"LEADER\" or \"GREEDY\"",
routePriorityPolicy));
}
String readConsistencyLevel =
properties.getProperty("read_consistency_level", conf.getReadConsistencyLevel());
if (readConsistencyLevel.equals("strong") || readConsistencyLevel.equals("weak")) {
conf.setReadConsistencyLevel(readConsistencyLevel);
} else {
throw new IOException(
String.format(
"Unknown read_consistency_level: %s, please set to \"strong\" or \"weak\"",
readConsistencyLevel));
}
// commons
commonDescriptor.loadCommonProps(properties);
commonDescriptor.initCommonConfigDir(conf.getSystemDir());
conf.setProcedureCompletedEvictTTL(
Integer.parseInt(
properties.getProperty(
"procedure_completed_evict_ttl",
String.valueOf(conf.getProcedureCompletedEvictTTL()))));
conf.setProcedureCompletedCleanInterval(
Integer.parseInt(
properties.getProperty(
"procedure_completed_clean_interval",
String.valueOf(conf.getProcedureCompletedCleanInterval()))));
conf.setProcedureCoreWorkerThreadsCount(
Integer.parseInt(
properties.getProperty(
"procedure_core_worker_thread_count",
String.valueOf(conf.getProcedureCoreWorkerThreadsCount()))));
loadRatisConsensusConfig(properties);
loadCQConfig(properties);
}