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:39 UTC

[iotdb] branch fixDeleteBug created (now c2bd20a)

This is an automated email from the ASF dual-hosted git repository.

xiangweiwei pushed a change to branch fixDeleteBug
in repository https://gitbox.apache.org/repos/asf/iotdb.git.


      at c2bd20a  Fix delete multi time interval bug

This branch includes the following new commits:

     new c2bd20a  Fix delete multi time interval bug

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[iotdb] 01/01: Fix delete multi time interval bug

Posted by xi...@apache.org.
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);
+    }
+  }
 }