You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2022/08/16 10:14:13 UTC
[iotdb] branch master updated: [IOTDB-4047] Fix query NPE after change device alignment (#7009)
This is an automated email from the ASF dual-hosted git repository.
jackietien 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 41a60b5026 [IOTDB-4047] Fix query NPE after change device alignment (#7009)
41a60b5026 is described below
commit 41a60b50260dbbd510e22b6693f1a53ddee91707
Author: Haonan <hh...@outlook.com>
AuthorDate: Tue Aug 16 18:14:05 2022 +0800
[IOTDB-4047] Fix query NPE after change device alignment (#7009)
---
.../aligned/IoTDBDeleteTimeseriesIT.java | 64 ++++++++++++++++++++++
.../iotdb/db/engine/memtable/AbstractMemTable.java | 3 +
2 files changed, 67 insertions(+)
diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBDeleteTimeseriesIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBDeleteTimeseriesIT.java
index 34dbe151ab..a86b591b02 100644
--- a/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBDeleteTimeseriesIT.java
+++ b/integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBDeleteTimeseriesIT.java
@@ -169,6 +169,70 @@ public class IoTDBDeleteTimeseriesIT {
}
}
+ @Test
+ public void deleteTimeseriesAndChangeDeviceAlignmentTest() throws Exception {
+ String[] retArray = new String[] {"1,1.0,2.0,"};
+ int cnt = 0;
+
+ try (Connection connection =
+ DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+ statement.execute("INSERT INTO root.sg3.d1(timestamp,s1,s2) ALIGNED VALUES(1,1,2)");
+ statement.execute("SHOW DEVICES");
+ try (ResultSet resultSet = statement.getResultSet()) {
+ while (resultSet.next()) {
+ Assert.assertEquals("true", resultSet.getString("isAligned"));
+ }
+ }
+ cnt = 0;
+ statement.execute("DELETE timeseries root.sg3.d1.s1");
+ statement.execute("DELETE timeseries root.sg3.d1.s2");
+ statement.execute("INSERT INTO root.sg3.d1(timestamp,s1,s2) VALUES(1,1,2)");
+ statement.execute("SHOW DEVICES");
+ try (ResultSet resultSet = statement.getResultSet()) {
+ while (resultSet.next()) {
+ Assert.assertEquals("false", resultSet.getString("isAligned"));
+ }
+ }
+ boolean hasResult = statement.execute("SELECT * FROM root.sg3.d1");
+ Assert.assertTrue(hasResult);
+ try (ResultSet resultSet = statement.getResultSet()) {
+ ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+ while (resultSet.next()) {
+ StringBuilder builder = new StringBuilder();
+ for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+ builder.append(resultSet.getString(i)).append(",");
+ }
+ Assert.assertEquals(retArray[cnt], builder.toString());
+ cnt++;
+ }
+ }
+ cnt = 0;
+ statement.execute("DELETE timeseries root.sg3.d1.s1");
+ statement.execute("DELETE timeseries root.sg3.d1.s2");
+ statement.execute("INSERT INTO root.sg3.d1(timestamp,s1,s2) ALIGNED VALUES(1,1,2)");
+ statement.execute("SHOW DEVICES");
+ try (ResultSet resultSet = statement.getResultSet()) {
+ while (resultSet.next()) {
+ Assert.assertEquals("true", resultSet.getString("isAligned"));
+ }
+ }
+ hasResult = statement.execute("SELECT * FROM root.sg3.d1");
+ Assert.assertTrue(hasResult);
+ try (ResultSet resultSet = statement.getResultSet()) {
+ ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
+ while (resultSet.next()) {
+ StringBuilder builder = new StringBuilder();
+ for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
+ builder.append(resultSet.getString(i)).append(",");
+ }
+ Assert.assertEquals(retArray[cnt], builder.toString());
+ cnt++;
+ }
+ }
+ }
+ }
+
@Test
public void deleteTimeSeriesMultiIntervalTest() {
String[] retArray1 = new String[] {"0,0"};
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
index e008ff8056..91c3375fc1 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AbstractMemTable.java
@@ -642,6 +642,9 @@ public abstract class AbstractMemTable implements IMemTable {
return;
}
totalPointsNum -= memChunkGroup.delete(originalPath, devicePath, startTimestamp, endTimestamp);
+ if (memChunkGroup.getMemChunkMap().isEmpty()) {
+ memTableMap.remove(getDeviceID(devicePath));
+ }
}
@Override