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

haonan 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 0cedde0  A fix for delete that use incorrect way to match partial path 
(#1882)
0cedde0 is described below

commit 0cedde01d083e40ddb286d958275759df0759ef0
Author: wshao08 <[email protected]>
AuthorDate: Wed Oct 28 16:49:07 2020 +0800

    A fix for delete that use incorrect way to match partial path (#1882)
---
 .../iotdb/db/engine/memtable/AbstractMemTable.java |  7 +++---
 .../apache/iotdb/db/engine/memtable/IMemTable.java |  3 ++-
 .../db/engine/memtable/PrimitiveMemTableTest.java  |  9 ++++---
 .../iotdb/db/integration/IoTDBDeletionIT.java      | 29 ++++++++++++++++++++++
 4 files changed, 40 insertions(+), 8 deletions(-)

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 598cdc5..eabedcb 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
@@ -30,6 +30,7 @@ import org.apache.iotdb.db.engine.modification.Deletion;
 import org.apache.iotdb.db.engine.modification.Modification;
 import org.apache.iotdb.db.engine.querycontext.ReadOnlyMemChunk;
 import org.apache.iotdb.db.exception.WriteProcessException;
+import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan;
@@ -210,7 +211,7 @@ public abstract class AbstractMemTable implements IMemTable 
{
   @Override
   public ReadOnlyMemChunk query(String deviceId, String measurement, 
TSDataType dataType,
       TSEncoding encoding, Map<String, String> props, long timeLowerBound)
-      throws IOException, QueryProcessException {
+      throws IOException, QueryProcessException, MetadataException {
     if (!checkPath(deviceId, measurement)) {
       return null;
     }
@@ -223,13 +224,13 @@ public abstract class AbstractMemTable implements 
IMemTable {
   }
 
   private List<TimeRange> constructDeletionList(String deviceId, String 
measurement,
-      long timeLowerBound) {
+      long timeLowerBound) throws MetadataException {
     List<TimeRange> deletionList = new ArrayList<>();
     deletionList.add(new TimeRange(Long.MIN_VALUE, timeLowerBound));
     for (Modification modification : modifications) {
       if (modification instanceof Deletion) {
         Deletion deletion = (Deletion) modification;
-        if (deletion.getDevice().equals(deviceId) && 
deletion.getMeasurement().equals(measurement)
+        if (deletion.getPath().matchFullPath(new PartialPath(deviceId, 
measurement))
             && deletion.getEndTime() > timeLowerBound) {
           long lowerBound = Math.max(deletion.getStartTime(), timeLowerBound);
           deletionList.add(new TimeRange(lowerBound, deletion.getEndTime()));
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/IMemTable.java 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/IMemTable.java
index c6134a0..fb3d293 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/IMemTable.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/IMemTable.java
@@ -23,6 +23,7 @@ import java.util.Map;
 import org.apache.iotdb.db.engine.modification.Deletion;
 import org.apache.iotdb.db.engine.querycontext.ReadOnlyMemChunk;
 import org.apache.iotdb.db.exception.WriteProcessException;
+import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan;
@@ -77,7 +78,7 @@ public interface IMemTable {
 
   ReadOnlyMemChunk query(String deviceId, String measurement, TSDataType 
dataType,
       TSEncoding encoding, Map<String, String> props, long timeLowerBound)
-      throws IOException, QueryProcessException;
+      throws IOException, QueryProcessException, MetadataException;
 
   /**
    * putBack all the memory resources.
diff --git 
a/server/src/test/java/org/apache/iotdb/db/engine/memtable/PrimitiveMemTableTest.java
 
b/server/src/test/java/org/apache/iotdb/db/engine/memtable/PrimitiveMemTableTest.java
index 22fad69..8eaef71 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/engine/memtable/PrimitiveMemTableTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/engine/memtable/PrimitiveMemTableTest.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Random;
 import org.apache.iotdb.db.engine.querycontext.ReadOnlyMemChunk;
+import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.utils.MathUtils;
 import org.apache.iotdb.db.utils.datastructure.TVList;
@@ -66,7 +67,7 @@ public class PrimitiveMemTableTest {
   }
 
   @Test
-  public void simpleTest() throws IOException, QueryProcessException {
+  public void simpleTest() throws IOException, QueryProcessException, 
MetadataException {
     IMemTable memTable = new PrimitiveMemTable();
     int count = 10;
     String deviceId = "d1";
@@ -96,7 +97,7 @@ public class PrimitiveMemTableTest {
   }
 
   private void write(IMemTable memTable, String deviceId, String sensorId, 
TSDataType dataType,
-      TSEncoding encoding, int size) throws IOException, QueryProcessException 
{
+      TSEncoding encoding, int size) throws IOException, 
QueryProcessException, MetadataException {
     TimeValuePair[] ret = genTimeValuePair(size, dataType);
 
     for (TimeValuePair aRet : ret) {
@@ -134,7 +135,7 @@ public class PrimitiveMemTableTest {
   }
 
   @Test
-  public void testFloatType() throws IOException, QueryProcessException {
+  public void testFloatType() throws IOException, QueryProcessException, 
MetadataException {
     IMemTable memTable = new PrimitiveMemTable();
     String deviceId = "d1";
     int size = 100;
@@ -142,7 +143,7 @@ public class PrimitiveMemTableTest {
   }
 
   @Test
-  public void testAllType() throws IOException, QueryProcessException {
+  public void testAllType() throws IOException, QueryProcessException, 
MetadataException {
     IMemTable memTable = new PrimitiveMemTable();
     int count = 10;
     String deviceId = "d1";
diff --git 
a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeletionIT.java 
b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeletionIT.java
index 7a1a0d0..3f9daf7 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeletionIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeletionIT.java
@@ -202,6 +202,35 @@ public class IoTDBDeletionIT {
     cleanData();
   }
 
+  @Test
+  public void testDelFlushingMemtable() throws SQLException {
+    long size = 
IoTDBDescriptor.getInstance().getConfig().getMemtableSizeThreshold();
+    // Adjust memstable threshold size to make it flush automatically
+    IoTDBDescriptor.getInstance().getConfig().setMemtableSizeThreshold(10000);
+    try (Connection connection = DriverManager
+        .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
+            "root");
+         Statement statement = connection.createStatement()) {
+
+      for (int i = 1; i <= 10000; i++) {
+        statement.execute(
+            String.format(insertTemplate, i, i, i, (double) i, "\'" + i + "\'",
+                i % 2 == 0));
+      }
+
+      statement.execute("DELETE FROM root.vehicle.d0.s0 WHERE time > 1500 and 
time <= 9000");
+      try (ResultSet set = statement.executeQuery("SELECT s0 FROM 
root.vehicle.d0")) {
+        int cnt = 0;
+        while (set.next()) {
+          cnt++;
+        }
+        assertEquals(2500, cnt);
+      }
+      cleanData();
+    }
+    IoTDBDescriptor.getInstance().getConfig().setMemtableSizeThreshold(size);
+  }
+
   private static void prepareSeries() {
     try (Connection connection = DriverManager
         .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",

Reply via email to