You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/01/03 03:37:01 UTC
[iotdb] branch master updated: [IOTDB-5285] TimePartition may be error when restarting with different time partition configuration (#8646)
This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new e4cbca4479 [IOTDB-5285] TimePartition may be error when restarting with different time partition configuration (#8646)
e4cbca4479 is described below
commit e4cbca447910d70ebe139c8c5448af73abf1d972
Author: Alan Choo <43...@users.noreply.github.com>
AuthorDate: Tue Jan 3 11:36:55 2023 +0800
[IOTDB-5285] TimePartition may be error when restarting with different time partition configuration (#8646)
---
.../confignode/conf/SystemPropertiesUtils.java | 4 +-
.../org/apache/iotdb/it/utils/TsFileGenerator.java | 5 +-
.../confignode/it/IoTDBConfigNodeSnapshotIT.java | 8 +-
.../it/cluster/IoTDBClusterRestartIT.java | 5 -
.../it/partition/IoTDBPartitionDurableIT.java | 9 +-
.../it/partition/IoTDBPartitionGetterIT.java | 8 +-
.../partition/IoTDBPartitionInheritPolicyIT.java | 8 +-
.../org/apache/iotdb/db/it/IOTDBLoadTsFileIT.java | 78 ++---
.../apache/iotdb/commons/conf/IoTDBConstant.java | 3 +
.../org/apache/iotdb/db/client/ConfigNodeInfo.java | 2 +-
.../org/apache/iotdb/db/conf/IoTDBStartCheck.java | 385 +++++++--------------
.../java/org/apache/iotdb/db/service/DataNode.java | 8 +-
12 files changed, 182 insertions(+), 341 deletions(-)
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java b/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java
index c1030533ef..4ee1f1ccea 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/conf/SystemPropertiesUtils.java
@@ -35,8 +35,8 @@ import java.util.List;
import java.util.Objects;
import java.util.Properties;
-import static org.apache.iotdb.db.conf.IoTDBStartCheck.CLUSTER_NAME;
-import static org.apache.iotdb.db.conf.IoTDBStartCheck.DEFAULT_CLUSTER_NAME;
+import static org.apache.iotdb.commons.conf.IoTDBConstant.CLUSTER_NAME;
+import static org.apache.iotdb.commons.conf.IoTDBConstant.DEFAULT_CLUSTER_NAME;
public class SystemPropertiesUtils {
diff --git a/integration-test/src/main/java/org/apache/iotdb/it/utils/TsFileGenerator.java b/integration-test/src/main/java/org/apache/iotdb/it/utils/TsFileGenerator.java
index d04d1558ec..c790e0b92f 100644
--- a/integration-test/src/main/java/org/apache/iotdb/it/utils/TsFileGenerator.java
+++ b/integration-test/src/main/java/org/apache/iotdb/it/utils/TsFileGenerator.java
@@ -88,7 +88,7 @@ public class TsFileGenerator implements AutoCloseable {
device2MeasurementSchema.put(path, measurementSchemaList);
}
- public void generateData(String device, int number, boolean isAligned)
+ public void generateData(String device, int number, long timeGap, boolean isAligned)
throws IOException, WriteProcessException {
List<MeasurementSchema> schemas = device2MeasurementSchema.get(device);
TreeSet<Long> timeSet = device2TimeSet.get(device);
@@ -100,7 +100,8 @@ public class TsFileGenerator implements AutoCloseable {
for (long r = 0; r < number; r++) {
int row = tablet.rowSize++;
- timestamps[row] = ++startTime;
+ startTime += timeGap;
+ timestamps[row] = startTime;
timeSet.add(startTime);
for (int i = 0; i < sensorNum; i++) {
generateDataPoint(values[i], row, schemas.get(i));
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBConfigNodeSnapshotIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBConfigNodeSnapshotIT.java
index 1ca9588108..0dc04b4d1e 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBConfigNodeSnapshotIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBConfigNodeSnapshotIT.java
@@ -85,8 +85,8 @@ public class IoTDBConfigNodeSnapshotIT {
protected static int originalRatisSnapshotTriggerThreshold;
private static final int testRatisSnapshotTriggerThreshold = 100;
- protected static long originalTimePartitionInterval;
- private static final long testTimePartitionInterval = 86400;
+ private static final long testTimePartitionInterval =
+ ConfigFactory.getConfig().getTimePartitionInterval();
@Before
public void setUp() throws Exception {
@@ -99,9 +99,6 @@ public class IoTDBConfigNodeSnapshotIT {
ConfigFactory.getConfig()
.setConfigNodeRatisSnapshotTriggerThreshold(testRatisSnapshotTriggerThreshold);
- originalTimePartitionInterval = ConfigFactory.getConfig().getTimePartitionInterval();
- ConfigFactory.getConfig().setTimePartitionInterval(testTimePartitionInterval);
-
// Init 2C2D cluster environment
EnvFactory.getEnv().initClusterEnvironment(2, 2);
}
@@ -114,7 +111,6 @@ public class IoTDBConfigNodeSnapshotIT {
.setConfigNodeConsesusProtocolClass(originalConfigNodeConsensusProtocolClass);
ConfigFactory.getConfig()
.setConfigNodeRatisSnapshotTriggerThreshold(originalRatisSnapshotTriggerThreshold);
- ConfigFactory.getConfig().setTimePartitionInterval(originalTimePartitionInterval);
}
@Test
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterRestartIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterRestartIT.java
index 0191ed3323..1736f4b2f9 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterRestartIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterRestartIT.java
@@ -72,13 +72,11 @@ public class IoTDBClusterRestartIT {
private static final int testConfigNodeNum = 2;
private static final int testDataNodeNum = 2;
private static final int testReplicationFactor = 2;
- private static final long testTimePartitionInterval = 604800000;
protected static String originalConfigNodeConsensusProtocolClass;
protected static String originalSchemaRegionConsensusProtocolClass;
protected static String originalDataRegionConsensusProtocolClass;
protected static int originSchemaReplicationFactor;
protected static int originalDataReplicationFactor;
- protected static long originalTimePartitionInterval;
@Before
public void setUp() throws Exception {
@@ -98,8 +96,6 @@ public class IoTDBClusterRestartIT {
ConfigFactory.getConfig().setSchemaReplicationFactor(testReplicationFactor);
ConfigFactory.getConfig().setDataReplicationFactor(testReplicationFactor);
- originalTimePartitionInterval = ConfigFactory.getConfig().getTimePartitionInterval();
- ConfigFactory.getConfig().setTimePartitionInterval(testTimePartitionInterval);
// Init 2C2D cluster environment
EnvFactory.getEnv().initClusterEnvironment(testConfigNodeNum, testDataNodeNum);
}
@@ -113,7 +109,6 @@ public class IoTDBClusterRestartIT {
.setSchemaRegionConsensusProtocolClass(originalSchemaRegionConsensusProtocolClass);
ConfigFactory.getConfig()
.setDataRegionConsensusProtocolClass(originalDataRegionConsensusProtocolClass);
- ConfigFactory.getConfig().setTimePartitionInterval(originalTimePartitionInterval);
}
@Test
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionDurableIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionDurableIT.java
index a5da4cf85e..2d433f9990 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionDurableIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionDurableIT.java
@@ -81,8 +81,8 @@ public class IoTDBPartitionDurableIT {
private static int originalDataReplicationFactor;
private static final int testReplicationFactor = 3;
- private static long originalTimePartitionInterval;
- private static final long testTimePartitionInterval = 604800000;
+ private static final long testTimePartitionInterval =
+ ConfigFactory.getConfig().getTimePartitionInterval();
private static final int testDataNodeId = 0;
private static final String sg = "root.sg";
@@ -117,9 +117,6 @@ public class IoTDBPartitionDurableIT {
ConfigFactory.getConfig().setSchemaReplicationFactor(testReplicationFactor);
ConfigFactory.getConfig().setDataReplicationFactor(testReplicationFactor);
- originalTimePartitionInterval = ConfigFactory.getConfig().getTimePartitionInterval();
- ConfigFactory.getConfig().setTimePartitionInterval(testTimePartitionInterval);
-
// Init 1C3D environment
EnvFactory.getEnv().initClusterEnvironment(1, 3);
@@ -148,8 +145,6 @@ public class IoTDBPartitionDurableIT {
ConfigFactory.getConfig().setSchemaReplicationFactor(originalSchemaReplicationFactor);
ConfigFactory.getConfig().setDataReplicationFactor(originalDataReplicationFactor);
-
- ConfigFactory.getConfig().setTimePartitionInterval(originalTimePartitionInterval);
}
@Test
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
index 36d4fe4a57..8888cb2f2e 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
@@ -90,8 +90,8 @@ public class IoTDBPartitionGetterIT {
private static int originalSeriesPartitionSlotNum;
- private static long originalTimePartitionInterval;
- private static final long testTimePartitionInterval = 604800000;
+ private static final long testTimePartitionInterval =
+ ConfigFactory.getConfig().getTimePartitionInterval();
protected static int originalLeastDataRegionGroupNum;
private static final int testLeastDataRegionGroupNum = 3;
@@ -123,9 +123,6 @@ public class IoTDBPartitionGetterIT {
originalSeriesPartitionSlotNum = CONF.getSeriesPartitionSlotNum();
CONF.setSeriesPartitionSlotNum(testSeriesPartitionSlotNum);
- originalTimePartitionInterval = CONF.getTimePartitionInterval();
- CONF.setTimePartitionInterval(testTimePartitionInterval);
-
originalLeastDataRegionGroupNum = CONF.getLeastDataRegionGroupNum();
CONF.setLeastDataRegionGroupNum(testLeastDataRegionGroupNum);
@@ -234,7 +231,6 @@ public class IoTDBPartitionGetterIT {
CONF.setSchemaReplicationFactor(originalSchemaReplicationFactor);
CONF.setDataReplicationFactor(originalDataReplicationFactor);
CONF.setSeriesPartitionSlotNum(originalSeriesPartitionSlotNum);
- CONF.setTimePartitionInterval(originalTimePartitionInterval);
}
@Test
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionInheritPolicyIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionInheritPolicyIT.java
index f9dd8af7e9..5d39483d5d 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionInheritPolicyIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionInheritPolicyIT.java
@@ -66,8 +66,8 @@ public class IoTDBPartitionInheritPolicyIT {
private static int originalSeriesPartitionSlotNum;
- private static long originalTimePartitionInterval;
- private static final long testTimePartitionInterval = 604800000;
+ private static final long testTimePartitionInterval =
+ ConfigFactory.getConfig().getTimePartitionInterval();
private static final String sg = "root.sg";
private static final int storageGroupNum = 2;
@@ -94,9 +94,6 @@ public class IoTDBPartitionInheritPolicyIT {
originalSeriesPartitionSlotNum = ConfigFactory.getConfig().getSeriesPartitionSlotNum();
ConfigFactory.getConfig().setSeriesPartitionSlotNum(testSeriesPartitionSlotNum * 10);
- originalTimePartitionInterval = ConfigFactory.getConfig().getTimePartitionInterval();
- ConfigFactory.getConfig().setTimePartitionInterval(testTimePartitionInterval);
-
// Init 1C3D environment
EnvFactory.getEnv().initClusterEnvironment(1, 3);
@@ -121,7 +118,6 @@ public class IoTDBPartitionInheritPolicyIT {
.setEnableDataPartitionInheritPolicy(originalEnableDataPartitionInheritPolicy);
ConfigFactory.getConfig().setDataReplicationFactor(originalDataReplicationFactor);
ConfigFactory.getConfig().setSeriesPartitionSlotNum(originalSeriesPartitionSlotNum);
- ConfigFactory.getConfig().setTimePartitionInterval(originalTimePartitionInterval);
}
@Test
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/IOTDBLoadTsFileIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/IOTDBLoadTsFileIT.java
index 2a2639ae2c..b4e1788ebe 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/IOTDBLoadTsFileIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/IOTDBLoadTsFileIT.java
@@ -55,17 +55,14 @@ import java.util.Map;
@Category({LocalStandaloneIT.class, ClusterIT.class})
public class IOTDBLoadTsFileIT {
private static final Logger LOGGER = LoggerFactory.getLogger(IOTDBLoadTsFileIT.class);
- private static final long PARTITION_INTERVAL = 10 * 1000L;
-
- private long originConfigNodePartitionInterval;
+ private static final long PARTITION_INTERVAL =
+ ConfigFactory.getConfig().getTimePartitionInterval();
private File tmpDir;
@Before
public void setUp() throws Exception {
tmpDir = new File(Files.createTempDirectory("load").toUri());
- originConfigNodePartitionInterval = ConfigFactory.getConfig().getTimePartitionInterval();
- ConfigFactory.getConfig().setTimePartitionInterval(PARTITION_INTERVAL);
EnvFactory.getEnv().initBeforeTest();
}
@@ -74,7 +71,6 @@ public class IOTDBLoadTsFileIT {
deleteSG();
EnvFactory.getEnv().cleanAfterTest();
- ConfigFactory.getConfig().setTimePartitionInterval(originConfigNodePartitionInterval);
if (!deleteDir()) {
LOGGER.error("Can not delete tmp dir for loading tsfile.");
@@ -171,8 +167,8 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.MEASUREMENT_11,
SchemaConfig.MEASUREMENT_12,
SchemaConfig.MEASUREMENT_13));
- generator.generateData(SchemaConfig.DEVICE_0, 100000, false);
- generator.generateData(SchemaConfig.DEVICE_1, 100000, true);
+ generator.generateData(SchemaConfig.DEVICE_0, 100000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_1, 100000, PARTITION_INTERVAL / 10_000, true);
writtenPoint1 = generator.getTotalNumber();
}
@@ -185,9 +181,9 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.DEVICE_3, Arrays.asList(SchemaConfig.MEASUREMENT_30));
generator.registerAlignedTimeseries(
SchemaConfig.DEVICE_4, Arrays.asList(SchemaConfig.MEASUREMENT_40));
- generator.generateData(SchemaConfig.DEVICE_2, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_3, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_4, 10000, true);
+ generator.generateData(SchemaConfig.DEVICE_2, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_3, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_4, 10000, PARTITION_INTERVAL / 10_000, true);
writtenPoint2 = generator.getTotalNumber();
}
@@ -229,8 +225,8 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.MEASUREMENT_11,
SchemaConfig.MEASUREMENT_12,
SchemaConfig.MEASUREMENT_13));
- generator.generateData(SchemaConfig.DEVICE_0, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_1, 10000, true);
+ generator.generateData(SchemaConfig.DEVICE_0, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_1, 10000, PARTITION_INTERVAL / 10_000, true);
writtenPoint1 = generator.getTotalNumber();
}
@@ -243,9 +239,9 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.DEVICE_3, Arrays.asList(SchemaConfig.MEASUREMENT_30));
generator.registerAlignedTimeseries(
SchemaConfig.DEVICE_4, Arrays.asList(SchemaConfig.MEASUREMENT_40));
- generator.generateData(SchemaConfig.DEVICE_2, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_3, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_4, 10000, true);
+ generator.generateData(SchemaConfig.DEVICE_2, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_3, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_4, 10000, PARTITION_INTERVAL / 10_000, true);
writtenPoint2 = generator.getTotalNumber();
}
@@ -309,8 +305,8 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.MEASUREMENT_11,
SchemaConfig.MEASUREMENT_12,
SchemaConfig.MEASUREMENT_13));
- generator.generateData(SchemaConfig.DEVICE_0, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_1, 10000, true);
+ generator.generateData(SchemaConfig.DEVICE_0, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_1, 10000, PARTITION_INTERVAL / 10_000, true);
writtenPoint1 = generator.getTotalNumber();
}
@@ -323,9 +319,9 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.DEVICE_3, Arrays.asList(SchemaConfig.MEASUREMENT_30));
generator.registerAlignedTimeseries(
SchemaConfig.DEVICE_4, Arrays.asList(SchemaConfig.MEASUREMENT_40));
- generator.generateData(SchemaConfig.DEVICE_2, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_3, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_4, 10000, true);
+ generator.generateData(SchemaConfig.DEVICE_2, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_3, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_4, 10000, PARTITION_INTERVAL / 10_000, true);
writtenPoint2 = generator.getTotalNumber();
}
@@ -394,7 +390,6 @@ public class IOTDBLoadTsFileIT {
File file1 = new File(tmpDir, "1-0-0-0.tsfile");
File file2 = new File(tmpDir, "2-0-0-0.tsfile");
- long writtenPoint1 = 0;
// device 0, device 1, sg 0
try (TsFileGenerator generator = new TsFileGenerator(file1)) {
generator.registerTimeseries(
@@ -411,12 +406,10 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.MEASUREMENT_11,
SchemaConfig.MEASUREMENT_12,
SchemaConfig.MEASUREMENT_13));
- generator.generateData(SchemaConfig.DEVICE_0, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_1, 10000, true);
- writtenPoint1 = generator.getTotalNumber();
+ generator.generateData(SchemaConfig.DEVICE_0, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_1, 10000, PARTITION_INTERVAL / 10_000, true);
}
- long writtenPoint2 = 0;
// device 2, device 3, device4, sg 1
try (TsFileGenerator generator = new TsFileGenerator(file2)) {
generator.registerTimeseries(
@@ -425,10 +418,9 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.DEVICE_3, Arrays.asList(SchemaConfig.MEASUREMENT_30));
generator.registerAlignedTimeseries(
SchemaConfig.DEVICE_4, Arrays.asList(SchemaConfig.MEASUREMENT_40));
- generator.generateData(SchemaConfig.DEVICE_2, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_3, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_4, 10000, true);
- writtenPoint2 = generator.getTotalNumber();
+ generator.generateData(SchemaConfig.DEVICE_2, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_3, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_4, 10000, PARTITION_INTERVAL / 10_000, true);
}
try (Connection connection = EnvFactory.getEnv().getConnection();
@@ -440,7 +432,7 @@ public class IOTDBLoadTsFileIT {
statement.executeQuery(String.format("select last %s from %s", measurement, device))) {
if (resultSet.next()) {
String lastTime = resultSet.getString(ColumnHeaderConstant.TIME);
- Assert.assertEquals("10000", lastTime);
+ Assert.assertEquals(String.valueOf(PARTITION_INTERVAL), lastTime);
} else {
Assert.fail("This ResultSet is empty.");
}
@@ -469,8 +461,8 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.MEASUREMENT_11,
SchemaConfig.MEASUREMENT_12,
SchemaConfig.MEASUREMENT_13));
- generator.generateData(SchemaConfig.DEVICE_0, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_1, 10000, true);
+ generator.generateData(SchemaConfig.DEVICE_0, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_1, 10000, PARTITION_INTERVAL / 10_000, true);
writtenPoint1 = generator.getTotalNumber();
}
@@ -483,9 +475,9 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.DEVICE_3, Arrays.asList(SchemaConfig.MEASUREMENT_30));
generator.registerAlignedTimeseries(
SchemaConfig.DEVICE_4, Arrays.asList(SchemaConfig.MEASUREMENT_40));
- generator.generateData(SchemaConfig.DEVICE_2, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_3, 10000, false);
- generator.generateData(SchemaConfig.DEVICE_4, 10000, true);
+ generator.generateData(SchemaConfig.DEVICE_2, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_3, 10000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_4, 10000, PARTITION_INTERVAL / 10_000, true);
writtenPoint2 = generator.getTotalNumber();
}
@@ -527,8 +519,8 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.MEASUREMENT_11,
SchemaConfig.MEASUREMENT_12,
SchemaConfig.MEASUREMENT_13));
- generator.generateData(SchemaConfig.DEVICE_0, 100000, false);
- generator.generateData(SchemaConfig.DEVICE_1, 100000, true);
+ generator.generateData(SchemaConfig.DEVICE_0, 100000, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_1, 100000, PARTITION_INTERVAL / 10_000, true);
generator.generateDeletion(SchemaConfig.DEVICE_0, 10);
generator.generateDeletion(SchemaConfig.DEVICE_1, 10);
writtenPoint1 = generator.getTotalNumber();
@@ -544,13 +536,13 @@ public class IOTDBLoadTsFileIT {
SchemaConfig.DEVICE_3, Arrays.asList(SchemaConfig.MEASUREMENT_30));
generator.registerAlignedTimeseries(
SchemaConfig.DEVICE_4, Arrays.asList(SchemaConfig.MEASUREMENT_40));
- generator.generateData(SchemaConfig.DEVICE_2, 100, false);
- generator.generateData(SchemaConfig.DEVICE_3, 100, false);
- generator.generateData(SchemaConfig.DEVICE_4, 100, true);
+ generator.generateData(SchemaConfig.DEVICE_2, 100, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_3, 100, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_4, 100, PARTITION_INTERVAL / 10_000, true);
generator.generateDeletion(SchemaConfig.DEVICE_2, 2);
generator.generateDeletion(SchemaConfig.DEVICE_4, 2);
- generator.generateData(SchemaConfig.DEVICE_2, 100, false);
- generator.generateData(SchemaConfig.DEVICE_4, 100, true);
+ generator.generateData(SchemaConfig.DEVICE_2, 100, PARTITION_INTERVAL / 10_000, false);
+ generator.generateData(SchemaConfig.DEVICE_4, 100, PARTITION_INTERVAL / 10_000, true);
generator.generateDeletion(SchemaConfig.DEVICE_2, 2);
generator.generateDeletion(SchemaConfig.DEVICE_4, 2);
writtenPoint2 = generator.getTotalNumber();
diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java b/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
index b380716089..cb0dd9472b 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
@@ -69,6 +69,9 @@ public class IoTDBConstant {
public static final String CN_TARGET_CONFIG_NODE_LIST = "cn_target_config_node_list";
public static final String DN_TARGET_CONFIG_NODE_LIST = "dn_target_config_node_list";
+ public static final String CLUSTER_NAME = "cluster_name";
+ public static final String DEFAULT_CLUSTER_NAME = "defaultCluster";
+
// when running the program in IDE, we can not get the version info using
// getImplementationVersion()
public static final String VERSION =
diff --git a/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeInfo.java b/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeInfo.java
index 4222afc753..b5332f899f 100644
--- a/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeInfo.java
+++ b/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeInfo.java
@@ -67,7 +67,7 @@ public class ConfigNodeInfo {
+ PROPERTIES_FILE_NAME);
}
- /** Update ConfigNodeList both in memory and confignode-system.properties file */
+ /** Update ConfigNodeList both in memory and system.properties file */
public void updateConfigNodeList(List<TEndPoint> latestConfigNodes) {
// check whether the config nodes are latest or not
configNodeInfoReadWriteLock.readLock().lock();
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
index 3715f4fa81..197ed51716 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.conf;
import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
-import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
import org.apache.iotdb.commons.conf.CommonConfig;
import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.conf.IoTDBConstant;
@@ -31,8 +30,6 @@ import org.apache.iotdb.db.conf.directories.DirectoryChecker;
import org.apache.iotdb.db.wal.utils.WALMode;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
-import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer;
-import org.apache.iotdb.tsfile.fileSystem.fsFactory.FSFactory;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
@@ -49,6 +46,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Properties;
+import java.util.function.Supplier;
public class IoTDBStartCheck {
@@ -57,95 +55,91 @@ public class IoTDBStartCheck {
private static final IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
private static final CommonConfig commonConfig = CommonDescriptor.getInstance().getConfig();
- private final FSFactory fsFactory = FSFactoryProducer.getFSFactory();
-
// this file is located in data/system/schema/system.properties
// If user delete folder "data", system.properties can reset.
public static final String PROPERTIES_FILE_NAME = "system.properties";
private static final String SCHEMA_DIR = config.getSchemaDir();
- private static final String[] WAL_DIRS = commonConfig.getWalDirs();
- private File propertiesFile;
- private File tmpPropertiesFile;
+ private final File propertiesFile;
+ private final File tmpPropertiesFile;
private final Properties properties = new Properties();
private final Map<String, String> systemProperties = new HashMap<>();
+ // region params need checking, determined when first start
private static final String SYSTEM_PROPERTIES_STRING = "System properties:";
-
private static final String TIMESTAMP_PRECISION_STRING = "timestamp_precision";
- private static final String timestampPrecision = config.getTimestampPrecision();
-
private static final String PARTITION_INTERVAL_STRING = "time_partition_interval";
- private static final long timePartitionInterval = config.getTimePartitionInterval();
-
private static final String TSFILE_FILE_SYSTEM_STRING = "tsfile_storage_fs";
- private static final String tsfileFileSystem = config.getTsFileStorageFs().toString();
-
private static final String TAG_ATTRIBUTE_SIZE_STRING = "tag_attribute_total_size";
- private static final String tagAttributeTotalSize =
- String.valueOf(config.getTagAttributeTotalSize());
-
private static final String TAG_ATTRIBUTE_FLUSH_INTERVAL = "tag_attribute_flush_interval";
- private static final String tagAttributeFlushInterval =
- String.valueOf(config.getTagAttributeFlushInterval());
-
private static final String MAX_DEGREE_OF_INDEX_STRING = "max_degree_of_index_node";
- private static final String maxDegreeOfIndexNode =
- String.valueOf(TSFileDescriptor.getInstance().getConfig().getMaxDegreeOfIndexNode());
-
private static final String DATA_REGION_NUM = "data_region_num";
- // for upgrading from old file
- private static final String VIRTUAL_STORAGE_GROUP_NUM = "virtual_storage_group_num";
- private static final String dataRegionNum = String.valueOf(config.getDataRegionNum());
-
private static final String ENABLE_ID_TABLE = "enable_id_table";
- private static final String enableIDTable = String.valueOf(config.isEnableIDTable());
-
private static final String ENABLE_ID_TABLE_LOG_FILE = "enable_id_table_log_file";
- private static final String enableIdTableLogFile =
- String.valueOf(config.isEnableIDTableLogFile());
-
private static final String SCHEMA_ENGINE_MODE = "schema_engine_mode";
- private static final String schemaEngineMode = String.valueOf(config.getSchemaEngineMode());
-
private static final String TIME_ENCODER_KEY = "time_encoder";
- private static final String timeEncoderValue =
- String.valueOf(TSFileDescriptor.getInstance().getConfig().getTimeEncoder());
-
- public static final String CLUSTER_NAME = "cluster_name";
- public static final String DEFAULT_CLUSTER_NAME = "defaultCluster";
- private static final String DATA_NODE_ID = "data_node_id";
-
- private static final String SCHEMA_REGION_CONSENSUS_PROTOCOL = "schema_region_consensus_protocol";
-
- private static final String DATA_REGION_CONSENSUS_PROTOCOL = "data_region_consensus_protocol";
-
- private static final String IOTDB_VERSION_STRING = "iotdb_version";
+ private static final Map<String, Supplier<String>> constantParamValueTable = new HashMap<>();
+
+ static {
+ constantParamValueTable.put(TIMESTAMP_PRECISION_STRING, config::getTimestampPrecision);
+ constantParamValueTable.put(
+ PARTITION_INTERVAL_STRING, () -> String.valueOf(config.getTimePartitionInterval()));
+ constantParamValueTable.put(
+ TSFILE_FILE_SYSTEM_STRING, () -> config.getTsFileStorageFs().toString());
+ constantParamValueTable.put(
+ TAG_ATTRIBUTE_SIZE_STRING, () -> String.valueOf(config.getTagAttributeTotalSize()));
+ constantParamValueTable.put(
+ TAG_ATTRIBUTE_FLUSH_INTERVAL, () -> String.valueOf(config.getTagAttributeFlushInterval()));
+ constantParamValueTable.put(
+ MAX_DEGREE_OF_INDEX_STRING,
+ () -> String.valueOf(TSFileDescriptor.getInstance().getConfig().getMaxDegreeOfIndexNode()));
+ constantParamValueTable.put(DATA_REGION_NUM, () -> String.valueOf(config.getDataRegionNum()));
+ constantParamValueTable.put(ENABLE_ID_TABLE, () -> String.valueOf(config.isEnableIDTable()));
+ constantParamValueTable.put(
+ ENABLE_ID_TABLE_LOG_FILE, () -> String.valueOf(config.isEnableIDTableLogFile()));
+ constantParamValueTable.put(
+ SCHEMA_ENGINE_MODE, () -> String.valueOf(config.getSchemaEngineMode()));
+ constantParamValueTable.put(
+ TIME_ENCODER_KEY, TSFileDescriptor.getInstance().getConfig()::getTimeEncoder);
+ }
+ // endregion
+ // region params don't need checking and can be updated
private static final String INTERNAL_ADDRESS = "dn_internal_address";
- private static final String internalAddress = config.getInternalAddress();
-
private static final String INTERNAL_PORT = "dn_internal_port";
- private static final String internalPort = String.valueOf(config.getInternalPort());
-
private static final String RPC_ADDRESS = "dn_rpc_address";
- private static final String rpcAddress = config.getRpcAddress();
-
private static final String RPC_PORT = "dn_rpc_port";
- private static final String rpcPort = String.valueOf(config.getRpcPort());
-
private static final String MPP_DATA_EXCHANGE_PORT = "dn_mpp_data_exchange_port";
- private static final String mppDataExchangePort = String.valueOf(config.getMppDataExchangePort());
-
private static final String SCHEMA_REGION_CONSENSUS_PORT = "dn_schema_region_consensus_port";
- private static final String schemaRegionConsensusPort =
- String.valueOf(config.getSchemaRegionConsensusPort());
-
private static final String DATA_REGION_CONSENSUS_PORT = "dn_data_region_consensus_port";
- private static final String dataRegionConsensusPort =
- String.valueOf(config.getDataRegionConsensusPort());
+ private static final Map<String, Supplier<String>> variableParamValueTable = new HashMap<>();
+
+ static {
+ variableParamValueTable.put(
+ INTERNAL_ADDRESS, () -> String.valueOf(config.getInternalAddress()));
+ variableParamValueTable.put(INTERNAL_PORT, () -> String.valueOf(config.getInternalPort()));
+ variableParamValueTable.put(RPC_ADDRESS, () -> String.valueOf(config.getRpcAddress()));
+ variableParamValueTable.put(RPC_PORT, () -> String.valueOf(config.getRpcPort()));
+ variableParamValueTable.put(
+ MPP_DATA_EXCHANGE_PORT, () -> String.valueOf(config.getMppDataExchangePort()));
+ variableParamValueTable.put(
+ SCHEMA_REGION_CONSENSUS_PORT, () -> String.valueOf(config.getSchemaRegionConsensusPort()));
+ variableParamValueTable.put(
+ DATA_REGION_CONSENSUS_PORT, () -> String.valueOf(config.getDataRegionConsensusPort()));
+ }
+ // endregion
+ // region params don't need checking, determined by the system
+ private static final String IOTDB_VERSION_STRING = "iotdb_version";
+ private static final String CLUSTER_NAME = "cluster_name";
+ private static final String DATA_NODE_ID = "data_node_id";
+ private static final String SCHEMA_REGION_CONSENSUS_PROTOCOL = "schema_region_consensus_protocol";
+ private static final String DATA_REGION_CONSENSUS_PROTOCOL = "data_region_consensus_protocol";
+ // endregion
+ // region params of old versions
+ private static final String VIRTUAL_STORAGE_GROUP_NUM = "virtual_storage_group_num";
+ // endregion
public static IoTDBStartCheck getInstance() {
return IoTDBConfigCheckHolder.INSTANCE;
@@ -156,6 +150,16 @@ public class IoTDBStartCheck {
private static final IoTDBStartCheck INSTANCE = new IoTDBStartCheck();
}
+ private String getVal(String paramName) {
+ if (constantParamValueTable.containsKey(paramName)) {
+ return constantParamValueTable.get(paramName).get();
+ } else if (variableParamValueTable.containsKey(paramName)) {
+ return variableParamValueTable.get(paramName).get();
+ } else {
+ return null;
+ }
+ }
+
private IoTDBStartCheck() {
logger.info("Starting IoTDB " + IoTDBConstant.VERSION_WITH_BUILD);
@@ -170,7 +174,15 @@ public class IoTDBStartCheck {
}
}
+ propertiesFile =
+ SystemFileFactory.INSTANCE.getFile(
+ IoTDBStartCheck.SCHEMA_DIR + File.separator + PROPERTIES_FILE_NAME);
+ tmpPropertiesFile =
+ SystemFileFactory.INSTANCE.getFile(
+ IoTDBStartCheck.SCHEMA_DIR + File.separator + PROPERTIES_FILE_NAME + ".tmp");
+
// Check time stamp precision
+ String timestampPrecision = getVal(TIMESTAMP_PRECISION_STRING);
if (!("ms".equals(timestampPrecision)
|| "us".equals(timestampPrecision)
|| "ns".equals(timestampPrecision))) {
@@ -181,25 +193,52 @@ public class IoTDBStartCheck {
System.exit(-1);
}
+ // check partition interval
+ if (Long.parseLong(getVal(PARTITION_INTERVAL_STRING)) <= 0) {
+ logger.error("Time partition interval must larger than 0!");
+ System.exit(-1);
+ }
+
systemProperties.put(IOTDB_VERSION_STRING, IoTDBConstant.VERSION);
- systemProperties.put(TIMESTAMP_PRECISION_STRING, timestampPrecision);
- systemProperties.put(PARTITION_INTERVAL_STRING, String.valueOf(timePartitionInterval));
- systemProperties.put(TSFILE_FILE_SYSTEM_STRING, tsfileFileSystem);
- systemProperties.put(TAG_ATTRIBUTE_SIZE_STRING, tagAttributeTotalSize);
- systemProperties.put(TAG_ATTRIBUTE_FLUSH_INTERVAL, tagAttributeFlushInterval);
- systemProperties.put(MAX_DEGREE_OF_INDEX_STRING, maxDegreeOfIndexNode);
- systemProperties.put(DATA_REGION_NUM, dataRegionNum);
- systemProperties.put(TIME_ENCODER_KEY, timeEncoderValue);
- systemProperties.put(ENABLE_ID_TABLE, enableIDTable);
- systemProperties.put(ENABLE_ID_TABLE_LOG_FILE, enableIdTableLogFile);
- systemProperties.put(SCHEMA_ENGINE_MODE, schemaEngineMode);
- systemProperties.put(INTERNAL_ADDRESS, internalAddress);
- systemProperties.put(INTERNAL_PORT, internalPort);
- systemProperties.put(RPC_ADDRESS, rpcAddress);
- systemProperties.put(RPC_PORT, rpcPort);
- systemProperties.put(MPP_DATA_EXCHANGE_PORT, mppDataExchangePort);
- systemProperties.put(SCHEMA_REGION_CONSENSUS_PORT, schemaRegionConsensusPort);
- systemProperties.put(DATA_REGION_CONSENSUS_PORT, dataRegionConsensusPort);
+ for (String param : constantParamValueTable.keySet()) {
+ systemProperties.put(param, getVal(param));
+ }
+ for (String param : variableParamValueTable.keySet()) {
+ systemProperties.put(param, getVal(param));
+ }
+ }
+
+ /** check configuration in system.properties when starting IoTDB */
+ public boolean checkIsFirstStart() throws IOException {
+ // system init first time, no need to check, write system.properties and return
+ if (!propertiesFile.exists() && !tmpPropertiesFile.exists()) {
+ // create system.properties
+ if (propertiesFile.createNewFile()) {
+ logger.info(" {} has been created.", propertiesFile.getAbsolutePath());
+ } else {
+ logger.error("can not create {}", propertiesFile.getAbsolutePath());
+ System.exit(-1);
+ }
+
+ // write properties to system.properties
+ try (FileOutputStream outputStream = new FileOutputStream(propertiesFile)) {
+ systemProperties.forEach(properties::setProperty);
+ properties.store(outputStream, SYSTEM_PROPERTIES_STRING);
+ }
+ return true;
+ }
+
+ if (!propertiesFile.exists() && tmpPropertiesFile.exists()) {
+ // rename tmp file to system.properties, no need to check
+ FileUtils.moveFile(tmpPropertiesFile, propertiesFile);
+ logger.info("rename {} to {}", tmpPropertiesFile, propertiesFile);
+ return false;
+ } else if (propertiesFile.exists() && tmpPropertiesFile.exists()) {
+ // both files exist, remove tmp file
+ FileUtils.forceDelete(tmpPropertiesFile);
+ logger.info("remove {}", tmpPropertiesFile);
+ }
+ return false;
}
/**
@@ -210,7 +249,6 @@ public class IoTDBStartCheck {
* accessing same director.
*/
public void checkDirectory() throws ConfigurationException, IOException {
-
// check data dirs
for (String dataDir : config.getDataDirs()) {
DirectoryChecker.getInstance().registerDirectory(new File(dataDir));
@@ -249,43 +287,7 @@ public class IoTDBStartCheck {
* system.properties (3) rename system.properties.tmp to system.properties
*/
public void checkSystemConfig() throws ConfigurationException, IOException {
- propertiesFile =
- SystemFileFactory.INSTANCE.getFile(
- IoTDBStartCheck.SCHEMA_DIR + File.separator + PROPERTIES_FILE_NAME);
- tmpPropertiesFile =
- SystemFileFactory.INSTANCE.getFile(
- IoTDBStartCheck.SCHEMA_DIR + File.separator + PROPERTIES_FILE_NAME + ".tmp");
-
- // system init first time, no need to check, write system.properties and return
- if (!propertiesFile.exists() && !tmpPropertiesFile.exists()) {
- // create system.properties
- if (propertiesFile.createNewFile()) {
- logger.info(" {} has been created.", propertiesFile.getAbsolutePath());
- } else {
- logger.error("can not create {}", propertiesFile.getAbsolutePath());
- System.exit(-1);
- }
-
- // write properties to system.properties
- try (FileOutputStream outputStream = new FileOutputStream(propertiesFile)) {
- systemProperties.forEach(properties::setProperty);
- properties.store(outputStream, SYSTEM_PROPERTIES_STRING);
- }
- return;
- }
-
- if (!propertiesFile.exists() && tmpPropertiesFile.exists()) {
- // rename tmp file to system.properties, no need to check
- FileUtils.moveFile(tmpPropertiesFile, propertiesFile);
- logger.info("rename {} to {}", tmpPropertiesFile, propertiesFile);
- return;
- } else if (propertiesFile.exists() && tmpPropertiesFile.exists()) {
- // both files exist, remove tmp file
- FileUtils.forceDelete(tmpPropertiesFile);
- logger.info("remove {}", tmpPropertiesFile);
- }
-
- // no tmp file, read properties from system.properties
+ // read properties from system.properties
try (FileInputStream inputStream = new FileInputStream(propertiesFile);
InputStreamReader inputStreamReader =
new InputStreamReader(inputStream, TSFileConfig.STRING_CHARSET)) {
@@ -294,11 +296,11 @@ public class IoTDBStartCheck {
// check whether upgrading from <=v0.9
if (!properties.containsKey(IOTDB_VERSION_STRING)) {
logger.error(
- "DO NOT UPGRADE IoTDB from v0.9 or lower version to v0.12!"
+ "DO NOT UPGRADE IoTDB from v0.9 or lower version to v1.0!"
+ " Please upgrade to v0.10 first");
System.exit(-1);
}
- // check whether upgrading from [v0.10, v.12]
+ // check whether upgrading from [v0.10, v.13]
String versionString = properties.getProperty(IOTDB_VERSION_STRING);
if (versionString.startsWith("0.10") || versionString.startsWith("0.11")) {
logger.error("IoTDB version is too old, please upgrade to 0.12 firstly.");
@@ -311,7 +313,7 @@ public class IoTDBStartCheck {
}
private void checkWALNotExists() {
- for (String walDir : WAL_DIRS) {
+ for (String walDir : commonConfig.getWalDirs()) {
if (SystemFileFactory.INSTANCE.getFile(walDir).isDirectory()) {
File[] sgWALs = SystemFileFactory.INSTANCE.getFile(walDir).listFiles();
if (sgWALs != null) {
@@ -399,44 +401,10 @@ public class IoTDBStartCheck {
}
}
- if (!properties.getProperty(TIMESTAMP_PRECISION_STRING).equals(timestampPrecision)) {
- throwException(TIMESTAMP_PRECISION_STRING, timestampPrecision);
- }
-
- if (!(properties.getProperty(TSFILE_FILE_SYSTEM_STRING).equals(tsfileFileSystem))) {
- throwException(TSFILE_FILE_SYSTEM_STRING, tsfileFileSystem);
- }
-
- if (!(properties.getProperty(TAG_ATTRIBUTE_SIZE_STRING).equals(tagAttributeTotalSize))) {
- throwException(TAG_ATTRIBUTE_SIZE_STRING, tagAttributeTotalSize);
- }
-
- if (!(properties.getProperty(TAG_ATTRIBUTE_FLUSH_INTERVAL).equals(tagAttributeFlushInterval))) {
- throwException(TAG_ATTRIBUTE_FLUSH_INTERVAL, tagAttributeFlushInterval);
- }
-
- if (!(properties.getProperty(MAX_DEGREE_OF_INDEX_STRING).equals(maxDegreeOfIndexNode))) {
- throwException(MAX_DEGREE_OF_INDEX_STRING, maxDegreeOfIndexNode);
- }
-
- if (!(properties.getProperty(DATA_REGION_NUM).equals(dataRegionNum))) {
- throwException(DATA_REGION_NUM, dataRegionNum);
- }
-
- if (!(properties.getProperty(TIME_ENCODER_KEY).equals(timeEncoderValue))) {
- throwException(TIME_ENCODER_KEY, timeEncoderValue);
- }
-
- if (!(properties.getProperty(ENABLE_ID_TABLE).equals(enableIDTable))) {
- throwException(ENABLE_ID_TABLE, enableIDTable);
- }
-
- if (!(properties.getProperty(ENABLE_ID_TABLE_LOG_FILE).equals(enableIdTableLogFile))) {
- throwException(ENABLE_ID_TABLE_LOG_FILE, enableIdTableLogFile);
- }
-
- if (!(properties.getProperty(SCHEMA_ENGINE_MODE).equals(schemaEngineMode))) {
- throwException(SCHEMA_ENGINE_MODE, schemaEngineMode);
+ for (String param : constantParamValueTable.keySet()) {
+ if (!(properties.getProperty(param).equals(getVal(param)))) {
+ throwException(param, getVal(param));
+ }
}
// load configuration from system properties only when start as Data node
@@ -498,35 +466,6 @@ public class IoTDBStartCheck {
FileUtils.moveFile(tmpPropertiesFile, propertiesFile);
}
- /** call this method to serialize consensus protocol */
- public void serializeConsensusProtocol(String regionConsensusProtocol, TConsensusGroupType type)
- throws IOException {
- // create an empty tmpPropertiesFile
- if (tmpPropertiesFile.createNewFile()) {
- logger.info("Create system.properties.tmp {}.", tmpPropertiesFile);
- } else {
- logger.error("Create system.properties.tmp {} failed.", tmpPropertiesFile);
- System.exit(-1);
- }
-
- reloadProperties();
-
- try (FileOutputStream tmpFOS = new FileOutputStream(tmpPropertiesFile.toString())) {
- if (type == TConsensusGroupType.DataRegion) {
- properties.setProperty(DATA_REGION_CONSENSUS_PROTOCOL, regionConsensusProtocol);
- } else if (type == TConsensusGroupType.SchemaRegion) {
- properties.setProperty(SCHEMA_REGION_CONSENSUS_PROTOCOL, regionConsensusProtocol);
- }
- properties.store(tmpFOS, SYSTEM_PROPERTIES_STRING);
- // serialize finished, delete old system.properties file
- if (propertiesFile.exists()) {
- Files.delete(propertiesFile.toPath());
- }
- }
- // rename system.properties.tmp to system.properties
- FileUtils.moveFile(tmpPropertiesFile, propertiesFile);
- }
-
public void serializeGlobalConfig(TGlobalConfig globalConfig) throws IOException {
// create an empty tmpPropertiesFile
if (tmpPropertiesFile.createNewFile()) {
@@ -558,30 +497,6 @@ public class IoTDBStartCheck {
FileUtils.moveFile(tmpPropertiesFile, propertiesFile);
}
- public void serializeNewDataNode(TDataNodeLocation dataNodeLocation) throws IOException {
- reloadProperties();
-
- try (FileOutputStream fileOutputStream = new FileOutputStream(propertiesFile)) {
- properties.setProperty(INTERNAL_ADDRESS, dataNodeLocation.getInternalEndPoint().getIp());
- properties.setProperty(
- INTERNAL_PORT, String.valueOf(dataNodeLocation.getInternalEndPoint().getPort()));
- properties.setProperty(
- RPC_ADDRESS, String.valueOf(dataNodeLocation.getClientRpcEndPoint().getIp()));
- properties.setProperty(
- RPC_PORT, String.valueOf(dataNodeLocation.getClientRpcEndPoint().getPort()));
- properties.setProperty(
- MPP_DATA_EXCHANGE_PORT,
- String.valueOf(dataNodeLocation.getMPPDataExchangeEndPoint().getPort()));
- properties.setProperty(
- SCHEMA_REGION_CONSENSUS_PORT,
- String.valueOf(dataNodeLocation.getSchemaRegionConsensusEndPoint().getPort()));
- properties.setProperty(
- DATA_REGION_CONSENSUS_PORT,
- String.valueOf(dataNodeLocation.getDataRegionConsensusEndPoint().getPort()));
- properties.store(fileOutputStream, SYSTEM_PROPERTIES_STRING);
- }
- }
-
public boolean checkConsensusProtocolExists(TConsensusGroupType type) {
if (type == TConsensusGroupType.DataRegion) {
return properties.containsKey(DATA_REGION_CONSENSUS_PROTOCOL);
@@ -592,50 +507,4 @@ public class IoTDBStartCheck {
logger.error("Unexpected consensus group type");
return false;
}
-
- public boolean isIpPortUpdated() {
- boolean isUpdated = false;
- // check the modifiable parts of configuration
- if (!(properties.getProperty(INTERNAL_PORT).equals(internalPort))) {
- isUpdated = true;
- logger.info(
- "Internal port is updated from {} to {}",
- properties.getProperty(INTERNAL_PORT),
- internalPort);
- }
- if (!(properties.getProperty(RPC_ADDRESS).equals(rpcAddress))) {
- isUpdated = true;
- logger.info(
- "RPC address is updated from {} to {}", properties.getProperty(RPC_ADDRESS), rpcAddress);
- }
- if (!(properties.getProperty(RPC_PORT).equals(rpcPort))) {
- isUpdated = true;
- logger.info("RPC port is updated from {} to {}", properties.getProperty(RPC_PORT), rpcPort);
- }
- if (!(properties.getProperty(MPP_DATA_EXCHANGE_PORT).equals(mppDataExchangePort))) {
- isUpdated = true;
- logger.info(
- "MPP data exchange port is updated from {} to {}",
- properties.getProperty(MPP_DATA_EXCHANGE_PORT),
- mppDataExchangePort);
- }
- return isUpdated;
- }
-
- public boolean checkNonModifiableConfiguration() {
- // check the non-modifiable parts of configuration
- if (!(properties.getProperty(INTERNAL_ADDRESS).equals(internalAddress))) {
- logger.error("Internal address is not allowed to be updated");
- return true;
- }
- if (!(properties.getProperty(SCHEMA_REGION_CONSENSUS_PORT).equals(schemaRegionConsensusPort))) {
- logger.error("Schema region consensus port is not allowed to be updated");
- return true;
- }
- if (!(properties.getProperty(DATA_REGION_CONSENSUS_PORT).equals(dataRegionConsensusPort))) {
- logger.error("Data region consensus port is not allowed to be updated");
- return true;
- }
- return false;
- }
}
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 dfba686552..59e85e6ac0 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
@@ -95,7 +95,7 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
-import static org.apache.iotdb.db.conf.IoTDBStartCheck.DEFAULT_CLUSTER_NAME;
+import static org.apache.iotdb.commons.conf.IoTDBConstant.DEFAULT_CLUSTER_NAME;
public class DataNode implements DataNodeMBean {
private static final Logger logger = LoggerFactory.getLogger(DataNode.class);
@@ -190,7 +190,7 @@ public class DataNode implements DataNodeMBean {
config.setClusterMode(true);
// Notice: Consider this DataNode as first start if the system.properties file doesn't exist
- boolean isFirstStart = !SYSTEM_PROPERTIES.exists();
+ boolean isFirstStart = IoTDBStartCheck.getInstance().checkIsFirstStart();
// Check target ConfigNodes
for (TEndPoint endPoint : config.getTargetConfigNodeList()) {
@@ -208,9 +208,6 @@ public class DataNode implements DataNodeMBean {
StartupChecks checks = new StartupChecks(IoTDBConstant.DN_ROLE).withDefaultTest();
checks.verify();
- // Check system configurations
- IoTDBStartCheck.getInstance().checkSystemConfig();
-
return isFirstStart;
}
@@ -282,6 +279,7 @@ public class DataNode implements DataNodeMBean {
/* Check system configurations */
try {
+ IoTDBStartCheck.getInstance().checkSystemConfig();
IoTDBStartCheck.getInstance().checkDirectory();
IoTDBStartCheck.getInstance().serializeGlobalConfig(configurationResp.globalConfig);
IoTDBDescriptor.getInstance().initClusterSchemaMemoryAllocate();