This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch rel/0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.13 by this push:
new 042a445e04 [To rel/0.13][IOTDB-3045] Deleted timeseries are created
again after restart (#5898)
042a445e04 is described below
commit 042a445e048d9a0392bb546b8423f4496e5b6aa6
Author: Alan Choo <[email protected]>
AuthorDate: Fri May 13 23:51:19 2022 +0800
[To rel/0.13][IOTDB-3045] Deleted timeseries are created again after
restart (#5898)
---
.../iotdb/db/integration/IoTDBRestartIT.java | 29 ++++++++++++++--------
.../java/org/apache/iotdb/db/service/IoTDB.java | 14 +++++++++++
.../java/org/apache/iotdb/db/utils/MemUtils.java | 6 +++--
3 files changed, 37 insertions(+), 12 deletions(-)
diff --git
a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java
b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java
index b835a650b1..2b940cfe00 100644
---
a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java
+++
b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java
@@ -312,12 +312,17 @@ public class IoTDBRestartIT {
boolean hasResultSet = statement.execute("select * from root.**");
assertTrue(hasResultSet);
- ResultSet resultSet = statement.getResultSet();
- int cnt = 0;
- while (resultSet.next()) {
- cnt++;
+ try (ResultSet resultSet = statement.getResultSet()) {
+ int cnt = 0;
+ Assert.assertEquals(3, resultSet.getMetaData().getColumnCount());
+ while (resultSet.next()) {
+ Assert.assertEquals("1", resultSet.getString(1));
+ Assert.assertEquals(null, resultSet.getString(2));
+ Assert.assertEquals("2.2", resultSet.getString(3));
+ cnt++;
+ }
+ assertEquals(1, cnt);
}
- assertEquals(1, cnt);
}
EnvironmentUtils.cleanEnv();
@@ -345,12 +350,16 @@ public class IoTDBRestartIT {
boolean hasResultSet = statement.execute("select * from root.**");
assertTrue(hasResultSet);
- ResultSet resultSet = statement.getResultSet();
- int cnt = 0;
- while (resultSet.next()) {
- cnt++;
+ try (ResultSet resultSet = statement.getResultSet()) {
+ int cnt = 0;
+ Assert.assertEquals(2, resultSet.getMetaData().getColumnCount());
+ while (resultSet.next()) {
+ Assert.assertEquals("1", resultSet.getString(1));
+ Assert.assertEquals("2.2", resultSet.getString(2));
+ cnt++;
+ }
+ assertEquals(1, cnt);
}
- assertEquals(1, cnt);
}
EnvironmentUtils.cleanEnv();
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 a5f4f584a0..501acdc4cd 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
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.service;
import org.apache.iotdb.db.concurrent.IoTDBDefaultThreadExceptionHandler;
+import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBConfigCheck;
import org.apache.iotdb.db.conf.IoTDBConstant;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -57,6 +58,7 @@ public class IoTDB implements IoTDBMBean {
private static final Logger logger = LoggerFactory.getLogger(IoTDB.class);
private final String mbeanName =
String.format("%s:%s=%s", IoTDBConstant.IOTDB_PACKAGE,
IoTDBConstant.JMX_TYPE, "IoTDB");
+ private static final IoTDBConfig config =
IoTDBDescriptor.getInstance().getConfig();
private static final RegisterManager registerManager = new RegisterManager();
public static MManager metaManager = MManager.getInstance();
public static ServiceProvider serviceProvider;
@@ -104,6 +106,13 @@ public class IoTDB implements IoTDBMBean {
"{}: failed to start because some checks failed. ",
IoTDBConstant.GLOBAL_DB_NAME, e);
return;
}
+
+ // set recover config, avoid creating deleted time series when recovering
wal
+ boolean prevIsAutoCreateSchemaEnabled = config.isAutoCreateSchemaEnabled();
+ config.setAutoCreateSchemaEnabled(false);
+ boolean prevIsEnablePartialInsert = config.isEnablePartialInsert();
+ config.setEnablePartialInsert(true);
+
try {
setUp();
} catch (StartupException | QueryProcessException e) {
@@ -112,6 +121,11 @@ public class IoTDB implements IoTDBMBean {
logger.error("{} exit", IoTDBConstant.GLOBAL_DB_NAME);
return;
}
+
+ // reset config
+ config.setAutoCreateSchemaEnabled(prevIsAutoCreateSchemaEnabled);
+ config.setEnablePartialInsert(prevIsEnablePartialInsert);
+
logger.info("{} has started.", IoTDBConstant.GLOBAL_DB_NAME);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
b/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
index 8bb89769ee..4cbb8c21a1 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/MemUtils.java
@@ -61,12 +61,14 @@ public class MemUtils {
*/
public static long getRecordsSize(
List<TSDataType> dataTypes, Object[] value, boolean addingTextDataSize) {
+ int emptyRecordCount = 0;
long memSize = 0L;
- for (int i = 0; i < dataTypes.size(); i++) {
+ for (int i = 0; i < value.length; i++) {
if (value[i] == null) {
+ emptyRecordCount++;
continue;
}
- memSize += getRecordSize(dataTypes.get(i), value[i], addingTextDataSize);
+ memSize += getRecordSize(dataTypes.get(i - emptyRecordCount), value[i],
addingTextDataSize);
}
return memSize;
}