You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hx...@apache.org on 2021/09/26 23:21:40 UTC
[iotdb] branch cluster- updated: add 800 error code for incorrect
configuration. remove some System.exit(1) in codes
This is an automated email from the ASF dual-hosted git repository.
hxd pushed a commit to branch cluster-
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/cluster- by this push:
new 0e9b730 add 800 error code for incorrect configuration. remove some System.exit(1) in codes
0e9b730 is described below
commit 0e9b730455323d41682ea93bb4da13a70d5939a8
Author: xiangdong huang <sa...@gmail.com>
AuthorDate: Mon Sep 27 07:21:03 2021 +0800
add 800 error code for incorrect configuration. remove some System.exit(1) in codes
---
.../org/apache/iotdb/cluster/ClusterIoTDB.java | 16 ++++----
.../cluster/server/member/MetaGroupMember.java | 1 -
docs/UserGuide/Appendix/Status-Codes.md | 1 +
docs/zh/UserGuide/Appendix/Status-Codes.md | 2 +
.../org/apache/iotdb/db/conf/IoTDBConfigCheck.java | 27 +++++++-------
.../iotdb/db/exception/ConfigurationException.java | 43 ++++++++++++++++++++++
.../java/org/apache/iotdb/db/service/IoTDB.java | 4 +-
.../iotdb/db/integration/IoTDBCheckConfigIT.java | 43 +++++++++-------------
.../java/org/apache/iotdb/rpc/TSStatusCode.java | 5 ++-
9 files changed, 94 insertions(+), 48 deletions(-)
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
index 851e8a2..e17eb43 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
@@ -52,6 +52,7 @@ import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
import org.apache.iotdb.db.conf.IoTDBConfigCheck;
import org.apache.iotdb.db.conf.IoTDBConstant;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.exception.ConfigurationException;
import org.apache.iotdb.db.exception.StartupException;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.service.IoTDB;
@@ -213,7 +214,12 @@ public class ClusterIoTDB implements ClusterIoTDBMBean {
ClusterIoTDB cluster = ClusterIoTDBHolder.INSTANCE;
// check config of iotdb,and set some configs in cluster mode
- if (!cluster.serverCheckAndInit()) {
+ try {
+ if (!cluster.serverCheckAndInit()) {
+ return;
+ }
+ } catch (ConfigurationException | IOException e) {
+ logger.error("meet error when doing start checking", e);
return;
}
String mode = args[0];
@@ -238,12 +244,8 @@ public class ClusterIoTDB implements ClusterIoTDBMBean {
}
}
- private boolean serverCheckAndInit() {
- try {
- IoTDBConfigCheck.getInstance().checkConfig();
- } catch (IOException e) {
- logger.error("meet error when doing start checking", e);
- }
+ private boolean serverCheckAndInit() throws ConfigurationException, IOException {
+ IoTDBConfigCheck.getInstance().checkConfig();
// init server's configuration first, because the cluster configuration may read settings from
// the server's configuration.
IoTDBDescriptor.getInstance().getConfig().setSyncEnable(false);
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
index d3d44e1..74fb7da 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
@@ -80,7 +80,6 @@ import org.apache.iotdb.cluster.utils.nodetool.function.Status;
import org.apache.iotdb.db.conf.IoTDBConstant;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.engine.StorageEngine;
-import org.apache.iotdb.db.exception.ShutdownException;
import org.apache.iotdb.db.exception.StartupException;
import org.apache.iotdb.db.exception.StorageEngineException;
import org.apache.iotdb.db.exception.metadata.MetadataException;
diff --git a/docs/UserGuide/Appendix/Status-Codes.md b/docs/UserGuide/Appendix/Status-Codes.md
index aba90f2..ee11062 100644
--- a/docs/UserGuide/Appendix/Status-Codes.md
+++ b/docs/UserGuide/Appendix/Status-Codes.md
@@ -101,6 +101,7 @@ Here is a list of Status Code and related message:
|705|CONSISTENCY_FAILURE|Consistency check failure|
|706|NO_CONNECTION|Can not get connection error|
|707|NEED_REDIRECTION|Need direction|
+|800|CONFIG_ERROR|Configuration error|
> All exceptions are refactored in latest version by extracting uniform message into exception classes. Different error codes are added to all exceptions. When an exception is caught and a higher-level exception is thrown, the error code will keep and pass so that users will know the detailed error reason.
A base exception class "ProcessException" is also added to be extended by all exceptions.
diff --git a/docs/zh/UserGuide/Appendix/Status-Codes.md b/docs/zh/UserGuide/Appendix/Status-Codes.md
index d272e1e..ccb4dd3 100644
--- a/docs/zh/UserGuide/Appendix/Status-Codes.md
+++ b/docs/zh/UserGuide/Appendix/Status-Codes.md
@@ -101,5 +101,7 @@ try {
|705|CONSISTENCY_FAILURE|一致性检查失败|
|706|NO_CONNECTION|连接获取失败|
|707|NEED_REDIRECTION|需要重定向|
+|800|CONFIG_ERROR|配置文件有错误项|
+
> 在最新版本中,我们重构了 IoTDB 的异常类。通过将错误信息统一提取到异常类中,并为所有异常添加不同的错误代码,从而当捕获到异常并引发更高级别的异常时,错误代码将保留并传递,以便用户了解详细的错误原因。
除此之外,我们添加了一个基础异常类“ProcessException”,由所有异常扩展。
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java
index 992ef36..d9947a5 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java
@@ -22,6 +22,7 @@ import org.apache.iotdb.db.conf.directories.DirectoryManager;
import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
import org.apache.iotdb.db.engine.modification.ModificationFile;
import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
+import org.apache.iotdb.db.exception.ConfigurationException;
import org.apache.iotdb.db.metadata.logfile.MLogWriter;
import org.apache.iotdb.db.utils.FilePathUtils;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
@@ -164,7 +165,7 @@ public class IoTDBConfigCheck {
* <p>When upgrading the system.properties: (1) create system.properties.tmp (2) delete
* system.properties (3) rename system.properties.tmp to system.properties
*/
- public void checkConfig() throws IOException {
+ public void checkConfig() throws ConfigurationException, IOException {
propertiesFile =
SystemFileFactory.INSTANCE.getFile(
IoTDBConfigCheck.SCHEMA_DIR + File.separator + PROPERTIES_FILE_NAME);
@@ -296,7 +297,7 @@ public class IoTDBConfigCheck {
}
/** Check all immutable properties */
- private void checkProperties() throws IOException {
+ private void checkProperties() throws ConfigurationException, IOException {
for (Entry<String, String> entry : systemProperties.entrySet()) {
if (!properties.containsKey(entry.getKey())) {
upgradePropertiesFileFromBrokenFile();
@@ -305,41 +306,41 @@ public class IoTDBConfigCheck {
}
if (!properties.getProperty(TIMESTAMP_PRECISION_STRING).equals(timestampPrecision)) {
- printErrorLogAndExit(TIMESTAMP_PRECISION_STRING);
+ throwException(TIMESTAMP_PRECISION_STRING, timestampPrecision);
}
if (Boolean.parseBoolean(properties.getProperty(ENABLE_PARTITION_STRING)) != enablePartition) {
- printErrorLogAndExit(ENABLE_PARTITION_STRING);
+ throwException(ENABLE_PARTITION_STRING, enablePartition);
}
if (Long.parseLong(properties.getProperty(PARTITION_INTERVAL_STRING)) != partitionInterval) {
- printErrorLogAndExit(PARTITION_INTERVAL_STRING);
+ throwException(PARTITION_INTERVAL_STRING, partitionInterval);
}
if (!(properties.getProperty(TSFILE_FILE_SYSTEM_STRING).equals(tsfileFileSystem))) {
- printErrorLogAndExit(TSFILE_FILE_SYSTEM_STRING);
+ throwException(TSFILE_FILE_SYSTEM_STRING, tsfileFileSystem);
}
if (!(properties.getProperty(TAG_ATTRIBUTE_SIZE_STRING).equals(tagAttributeTotalSize))) {
- printErrorLogAndExit(TAG_ATTRIBUTE_SIZE_STRING);
+ throwException(TAG_ATTRIBUTE_SIZE_STRING, tagAttributeTotalSize);
}
if (!(properties.getProperty(MAX_DEGREE_OF_INDEX_STRING).equals(maxDegreeOfIndexNode))) {
- printErrorLogAndExit(MAX_DEGREE_OF_INDEX_STRING);
+ throwException(MAX_DEGREE_OF_INDEX_STRING, maxDegreeOfIndexNode);
}
if (!(properties.getProperty(VIRTUAL_STORAGE_GROUP_NUM).equals(virtualStorageGroupNum))) {
- printErrorLogAndExit(VIRTUAL_STORAGE_GROUP_NUM);
+ throwException(VIRTUAL_STORAGE_GROUP_NUM, virtualStorageGroupNum);
}
if (!(properties.getProperty(TIME_ENCODER_KEY).equals(timeEncoderValue))) {
- printErrorLogAndExit(TIME_ENCODER_KEY);
+ throwException(TIME_ENCODER_KEY, timeEncoderValue);
}
}
- private void printErrorLogAndExit(String property) {
- logger.error("Wrong {}, please set as: {} !", property, properties.getProperty(property));
- System.exit(-1);
+ private void throwException(String parameter, Object badValue) throws ConfigurationException {
+ throw new ConfigurationException(
+ parameter, String.valueOf(badValue), properties.getProperty(parameter));
}
/** ensure all TsFiles are closed when starting 0.12 */
diff --git a/server/src/main/java/org/apache/iotdb/db/exception/ConfigurationException.java b/server/src/main/java/org/apache/iotdb/db/exception/ConfigurationException.java
new file mode 100644
index 0000000..ad50558
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/exception/ConfigurationException.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.exception;
+
+import org.apache.iotdb.rpc.TSStatusCode;
+
+public class ConfigurationException extends IoTDBException {
+ String parameter;
+ String correctValue;
+
+ public ConfigurationException(String parameter, String badValue, String correctValue) {
+ super(
+ String.format(
+ "Parameter %s can not be %s, please set to: %s", parameter, badValue, correctValue),
+ TSStatusCode.CONFIG_ERROR.getStatusCode());
+ this.parameter = parameter;
+ this.correctValue = correctValue;
+ }
+
+ public String getParameter() {
+ return parameter;
+ }
+
+ public String getCorrectValue() {
+ return correctValue;
+ }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
index dd383ea..0b7b46c 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.db.engine.compaction.CompactionMergeTaskPoolManager;
import org.apache.iotdb.db.engine.flush.FlushManager;
import org.apache.iotdb.db.engine.merge.manage.MergeManager;
import org.apache.iotdb.db.engine.trigger.service.TriggerRegistrationService;
+import org.apache.iotdb.db.exception.ConfigurationException;
import org.apache.iotdb.db.exception.StartupException;
import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.db.monitor.StatMonitor;
@@ -64,8 +65,9 @@ public class IoTDB implements IoTDBMBean {
public static void main(String[] args) {
try {
IoTDBConfigCheck.getInstance().checkConfig();
- } catch (IOException e) {
+ } catch (ConfigurationException | IOException e) {
logger.error("meet error when doing start checking", e);
+ System.exit(1);
}
IoTDB daemon = IoTDB.getInstance();
daemon.active();
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBCheckConfigIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBCheckConfigIT.java
index d9f56a6..91e72c2 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBCheckConfigIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBCheckConfigIT.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.integration;
import org.apache.iotdb.db.conf.IoTDBConfigCheck;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
+import org.apache.iotdb.db.exception.ConfigurationException;
import org.apache.iotdb.db.service.IoTDB;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
@@ -37,14 +38,13 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
-import java.security.AccessControlException;
-import java.security.Permission;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
public class IoTDBCheckConfigIT {
private File propertiesFile =
@@ -67,15 +67,15 @@ public class IoTDBCheckConfigIT {
EnvironmentUtils.closeStatMonitor();
EnvironmentUtils.envSetUp();
- final SecurityManager securityManager =
- new SecurityManager() {
- public void checkPermission(Permission permission) {
- if (permission.getName().startsWith("exitVM")) {
- throw new AccessControlException("Wrong system config");
- }
- }
- };
- System.setSecurityManager(securityManager);
+ // final SecurityManager securityManager =
+ // new SecurityManager() {
+ // public void checkPermission(Permission permission) {
+ // if (permission.getName().startsWith("exitVM")) {
+ // throw new AccessControlException("Wrong system config");
+ // }
+ // }
+ // };
+ // System.setSecurityManager(securityManager);
bytes = new ByteArrayOutputStream();
console = System.out;
System.setOut(new PrintStream(bytes));
@@ -100,12 +100,7 @@ public class IoTDBCheckConfigIT {
@Test
public void testSaveTimeEncoderToSystemProperties() throws Exception {
- try {
- IoTDBConfigCheck.getInstance().checkConfig();
- } finally {
- System.setSecurityManager(null);
- }
-
+ IoTDBConfigCheck.getInstance().checkConfig();
// read properties from system.properties
try (FileInputStream inputStream = new FileInputStream(propertiesFile);
InputStreamReader inputStreamReader =
@@ -126,12 +121,12 @@ public class IoTDBCheckConfigIT {
EnvironmentUtils.reactiveDaemon();
try {
IoTDBConfigCheck.getInstance().checkConfig();
- } catch (Throwable t) {
- assertEquals("Wrong system config", t.getMessage());
- } finally {
- System.setSecurityManager(null);
+ } catch (ConfigurationException t) {
+ assertEquals(t.getParameter(), "time_encoder");
+ assertEquals(t.getCorrectValue(), "REGULAR");
+ return;
}
- assertTrue(bytes.toString().contains("Wrong time_encoder, please set as: REGULAR"));
+ fail("should detect configration errors");
}
@Test
@@ -145,9 +140,7 @@ public class IoTDBCheckConfigIT {
try {
IoTDBConfigCheck.getInstance().checkConfig();
} catch (Throwable t) {
- assertTrue(false);
- } finally {
- System.setSecurityManager(null);
+ fail("should have no configration errors");
}
}
diff --git a/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java b/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
index 5bf62fb..8bc0917 100644
--- a/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
+++ b/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
@@ -93,7 +93,10 @@ public enum TSStatusCode {
CONSISTENCY_FAILURE(705),
NO_CONNECTION(706),
NEED_REDIRECTION(707),
- PARSE_LOG_ERROR(708);
+ PARSE_LOG_ERROR(708),
+
+ // configuration
+ CONFIG_ERROR(800);
private int statusCode;