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",