This is an automated email from the ASF dual-hosted git repository. yongzao pushed a commit to branch aa091b0882 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 001401daf8186827e140ae690572e7d43ae2f490 Author: Yongzao <[email protected]> AuthorDate: Wed Oct 18 13:37:04 2023 +0800 [IOTDB-6193] Reject Node startup when loading configuration file failed (#11331) --- .../confignode/conf/ConfigNodeDescriptor.java | 15 ++++++----- .../confignode/conf/SystemPropertiesUtils.java | 14 +++++++++- .../org/apache/iotdb/db/conf/IoTDBDescriptor.java | 30 ++++++++++++++++------ .../iotdb/commons/conf/CommonDescriptor.java | 16 +++--------- 4 files changed, 47 insertions(+), 28 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java index b52f7f70092..f0ec2a9f6db 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java @@ -106,11 +106,14 @@ public class ConfigNodeDescriptor { commonProperties.load(inputStream); } catch (FileNotFoundException e) { - LOGGER.warn("Fail to find config file {}", url, e); + LOGGER.error("Fail to find config file {}, reject ConfigNode startup.", url, e); + System.exit(-1); } catch (IOException e) { - LOGGER.warn("Cannot load config file, use default configuration", e); + LOGGER.error("Cannot load config file, reject ConfigNode startup.", e); + System.exit(-1); } catch (Exception e) { - LOGGER.warn("Incorrect format in config file, use default configuration", e); + LOGGER.error("Incorrect format in config file, reject ConfigNode startup.", e); + System.exit(-1); } } else { LOGGER.warn( @@ -127,7 +130,8 @@ public class ConfigNodeDescriptor { commonProperties.putAll(properties); loadProperties(commonProperties); } catch (IOException | BadNodeUrlException e) { - LOGGER.warn("Couldn't load ConfigNode conf file, use default config", e); + LOGGER.error("Couldn't load ConfigNode conf file, reject ConfigNode startup.", e); + System.exit(-1); } finally { conf.updatePath(); commonDescriptor @@ -268,8 +272,7 @@ public class ConfigNodeDescriptor { "region_group_allocate_policy", conf.getRegionGroupAllocatePolicy().name()) .trim())); } catch (IllegalArgumentException e) { - LOGGER.warn( - "The configured region allocate strategy does not exist, use the default: GREEDY!"); + throw new IOException(e); } conf.setCnRpcAdvancedCompressionEnable( diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java index 0f7b9e4f85f..9faebf545df 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java @@ -57,6 +57,7 @@ public class SystemPropertiesUtils { private static final String CN_INTERNAL_ADDRESS = "cn_internal_address"; private static final String CN_INTERNAL_PORT = "cn_internal_port"; private static final String CN_CONSENSUS_PORT = "cn_consensus_port"; + private static final String TIMESTAMP_PRECISION = "timestamp_precision"; private static final String CN_CONSENSUS_PROTOCOL = "config_node_consensus_protocol_class"; private static final String DATA_CONSENSUS_PROTOCOL = "data_region_consensus_protocol_class"; private static final String SCHEMA_CONSENSUS_PROTOCOL = "schema_region_consensus_protocol_class"; @@ -127,6 +128,17 @@ public class SystemPropertiesUtils { } } + if (systemProperties.getProperty(TIMESTAMP_PRECISION, null) == null) { + needReWrite = true; + } else { + String timestampPrecision = systemProperties.getProperty(TIMESTAMP_PRECISION); + if (!timestampPrecision.equals(COMMON_CONFIG.getTimestampPrecision())) { + LOGGER.warn( + format, TIMESTAMP_PRECISION, COMMON_CONFIG.getTimestampPrecision(), timestampPrecision); + COMMON_CONFIG.setTimestampPrecision(timestampPrecision); + } + } + // Consensus protocol configuration String configNodeConsensusProtocolClass = systemProperties.getProperty(CN_CONSENSUS_PROTOCOL, null); @@ -280,7 +292,7 @@ public class SystemPropertiesUtils { SERIES_PARTITION_EXECUTOR_CLASS, conf.getSeriesPartitionExecutorClass()); systemProperties.setProperty( TIME_PARTITION_INTERVAL, String.valueOf(COMMON_CONFIG.getTimePartitionInterval())); - systemProperties.setProperty("timestamp_precision", COMMON_CONFIG.getTimestampPrecision()); + systemProperties.setProperty(TIMESTAMP_PRECISION, COMMON_CONFIG.getTimestampPrecision()); // DataNode Functions systemProperties.setProperty("schema_engine_mode", COMMON_CONFIG.getSchemaEngineMode()); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java index 4e082a76635..483c874a999 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java @@ -89,7 +89,15 @@ public class IoTDBDescriptor { for (IPropertiesLoader loader : propertiesLoaderServiceLoader) { logger.info("Will reload properties from {} ", loader.getClass().getName()); Properties properties = loader.loadProperties(); - loadProperties(properties); + try { + loadProperties(properties); + } catch (Exception e) { + logger.error( + "Failed to reload properties from {}, reject DataNode startup.", + loader.getClass().getName(), + e); + System.exit(-1); + } conf.setCustomizedProperties(loader.getCustomizedProperties()); TSFileDescriptor.getInstance().overwriteConfigByCustomSettings(properties); TSFileDescriptor.getInstance() @@ -162,11 +170,14 @@ public class IoTDBDescriptor { logger.info("Start to read config file {}", url); commonProperties.load(inputStream); } catch (FileNotFoundException e) { - logger.warn("Fail to find config file {}", url, e); + logger.error("Fail to find config file {}, reject DataNode startup.", url, e); + System.exit(-1); } catch (IOException e) { - logger.warn("Cannot load config file, use default configuration", e); + logger.error("Cannot load config file, reject DataNode startup.", e); + System.exit(-1); } catch (Exception e) { - logger.warn("Incorrect format in config file, use default configuration", e); + logger.error("Incorrect format in config file, reject DataNode startup.", e); + System.exit(-1); } } else { logger.warn( @@ -182,11 +193,14 @@ public class IoTDBDescriptor { commonProperties.putAll(properties); loadProperties(commonProperties); } catch (FileNotFoundException e) { - logger.warn("Fail to find config file {}", url, e); + logger.error("Fail to find config file {}, reject DataNode startup.", url, e); + System.exit(-1); } catch (IOException e) { - logger.warn("Cannot load config file, use default configuration", e); + logger.error("Cannot load config file, reject DataNode startup.", e); + System.exit(-1); } catch (Exception e) { - logger.warn("Incorrect format in config file, use default configuration", e); + logger.error("Incorrect format in config file, reject DataNode startup.", e); + System.exit(-1); } finally { // update all data seriesPath conf.updatePath(); @@ -204,7 +218,7 @@ public class IoTDBDescriptor { } } - public void loadProperties(Properties properties) { + public void loadProperties(Properties properties) throws BadNodeUrlException { conf.setClusterSchemaLimitLevel( properties .getProperty("cluster_schema_limit_level", conf.getClusterSchemaLimitLevel()) diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonDescriptor.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonDescriptor.java index 01a25714560..82e6e9bd696 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonDescriptor.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonDescriptor.java @@ -25,16 +25,11 @@ import org.apache.iotdb.commons.utils.CommonDateTimeUtils; import org.apache.iotdb.commons.utils.NodeUrlUtils; import org.apache.iotdb.confignode.rpc.thrift.TGlobalConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.util.Properties; public class CommonDescriptor { - private static final Logger LOGGER = LoggerFactory.getLogger(CommonDescriptor.class); - private final CommonConfig config = new CommonConfig(); private CommonDescriptor() {} @@ -62,7 +57,7 @@ public class CommonDescriptor { config.setProcedureWalFolder(systemDir + File.separator + "procedure"); } - public void loadCommonProps(Properties properties) { + public void loadCommonProps(Properties properties) throws BadNodeUrlException { config.setAuthorizerProvider( properties.getProperty("authorizer_provider_class", config.getAuthorizerProvider()).trim()); // if using org.apache.iotdb.db.auth.authorizer.OpenIdAuthorizer, openID_url is needed. @@ -212,13 +207,8 @@ public class CommonDescriptor { NodeUrlUtils.convertTEndPointUrl(config.getTargetMLNodeEndPoint())); loadPipeProps(properties); - try { - config.setTargetMLNodeEndPoint(NodeUrlUtils.parseTEndPointUrl(endPointUrl)); - } catch (BadNodeUrlException e) { - LOGGER.warn( - "Illegal target MLNode endpoint url format in config file: {}, use default configuration.", - endPointUrl); - } + + config.setTargetMLNodeEndPoint(NodeUrlUtils.parseTEndPointUrl(endPointUrl)); config.setSchemaEngineMode( properties.getProperty("schema_engine_mode", String.valueOf(config.getSchemaEngineMode())));
