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 2021/06/22 09:34:40 UTC
[iotdb] 01/01: Fix delete multi time interval bug
This is an automated email from the ASF dual-hosted git repository.
xiangweiwei pushed a commit to branch fixDeleteBug
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit c2bd20a8671b8e46ee23aee2b7341dede9977d90
Author: Alima777 <wx...@gmail.com>
AuthorDate: Tue Jun 22 17:33:54 2021 +0800
Fix delete multi time interval bug
---
.../java/org/apache/iotdb/db/utils/QueryUtils.java | 5 +-
.../db/integration/IoTDBDeleteTimeseriesIT.java | 55 ++++++++++++++++++++--
2 files changed, 55 insertions(+), 5 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java
index 4e07b2a..28bd297 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/QueryUtils.java
@@ -75,10 +75,11 @@ public class QueryUtils {
if (range.contains(metaData.getStartTime(), metaData.getEndTime())) {
return true;
} else {
- if (range.overlaps(new TimeRange(metaData.getStartTime(), metaData.getEndTime()))) {
+ if (!metaData.isModified()
+ && range.overlaps(
+ new TimeRange(metaData.getStartTime(), metaData.getEndTime()))) {
metaData.setModified(true);
}
- return false;
}
}
}
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteTimeseriesIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteTimeseriesIT.java
index 558d7ba..db52ec2 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteTimeseriesIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteTimeseriesIT.java
@@ -35,13 +35,18 @@ import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
+import static org.apache.iotdb.db.constant.TestConstant.TIMESTAMP_STR;
+import static org.apache.iotdb.db.constant.TestConstant.count;
+import static org.junit.Assert.fail;
+
public class IoTDBDeleteTimeseriesIT {
private long memtableSizeThreshold;
private CompactionStrategy tsFileManagementStrategy;
@Before
- public void setUp() {
+ public void setUp() throws ClassNotFoundException {
+ Class.forName(Config.JDBC_DRIVER_NAME);
EnvironmentUtils.closeStatMonitor();
EnvironmentUtils.envSetUp();
memtableSizeThreshold = IoTDBDescriptor.getInstance().getConfig().getMemtableSizeThreshold();
@@ -61,7 +66,6 @@ public class IoTDBDeleteTimeseriesIT {
@Test
public void deleteTimeseriesAndCreateDifferentTypeTest() throws Exception {
- Class.forName(Config.JDBC_DRIVER_NAME);
String[] retArray = new String[] {"1,1,", "2,1.1,"};
int cnt = 0;
@@ -120,7 +124,6 @@ public class IoTDBDeleteTimeseriesIT {
@Test
public void deleteTimeseriesAndCreateSameTypeTest() throws Exception {
- Class.forName(Config.JDBC_DRIVER_NAME);
String[] retArray = new String[] {"1,1,", "2,5,"};
int cnt = 0;
@@ -176,4 +179,50 @@ public class IoTDBDeleteTimeseriesIT {
Assert.assertTrue(hasResult);
}
}
+
+ @Test
+ public void deleteTimeSeriesMultiIntervalTest() {
+ String[] retArray1 = new String[] {"0,0"};
+
+ int preAvgSeriesPointNumberThreshold =
+ IoTDBDescriptor.getInstance().getConfig().getAvgSeriesPointNumberThreshold();
+ try (Connection connection =
+ DriverManager.getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement()) {
+
+ IoTDBDescriptor.getInstance().getConfig().setAvgSeriesPointNumberThreshold(2);
+ String insertSql = "insert into root.sg.d1(time, s1) values(%d, %d)";
+ for (int i = 1; i <= 4; i++) {
+ statement.execute(String.format(insertSql, i, i));
+ }
+ statement.execute("flush");
+
+ statement.execute("delete from root.sg.d1.s1 where time >= 1 and time <= 2");
+ statement.execute("delete from root.sg.d1.s1 where time >= 3 and time <= 4");
+
+ boolean hasResultSet =
+ statement.execute("select count(s1) from root.sg.d1 where time >= 3 and time <= 4");
+
+ Assert.assertTrue(hasResultSet);
+ int cnt = 0;
+ try (ResultSet resultSet = statement.getResultSet()) {
+ while (resultSet.next()) {
+ String ans =
+ resultSet.getString(TIMESTAMP_STR)
+ + ","
+ + resultSet.getString(count("root.sg.d1.s1"));
+ Assert.assertEquals(retArray1[cnt], ans);
+ cnt++;
+ }
+ Assert.assertEquals(retArray1.length, cnt);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ } finally {
+ IoTDBDescriptor.getInstance()
+ .getConfig()
+ .setAvgSeriesPointNumberThreshold(preAvgSeriesPointNumberThreshold);
+ }
+ }
}