This is an automated email from the ASF dual-hosted git repository. sunzesong pushed a commit to branch jira_835 in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 17d7b4e68592517373e3bcbd062e94d5d659f1fc Author: samperson1997 <[email protected]> AuthorDate: Sat Aug 15 21:46:54 2020 +0800 [IOTDB-835] Fix delete timeseries and change data type then write failed --- .../iotdb/db/engine/memtable/AbstractMemTable.java | 3 + .../db/integration/IoTDBDeleteTimeseriesIT.java | 95 ++++++++++++++++++++++ 2 files changed, 98 insertions(+) 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 f671316..763b8b4 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 @@ -237,6 +237,9 @@ public abstract class AbstractMemTable implements IMemTable { if (chunk == null) { return; } + if (startTimestamp == Long.MIN_VALUE && endTimestamp == Long.MAX_VALUE) { + deviceMap.remove(measurementId); + } int deletedPointsNumber = chunk.delete(startTimestamp, endTimestamp); totalPointsNum -= deletedPointsNumber; } 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 new file mode 100644 index 0000000..b123efc --- /dev/null +++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteTimeseriesIT.java @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.iotdb.db.integration; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Statement; +import org.apache.iotdb.db.utils.EnvironmentUtils; +import org.apache.iotdb.jdbc.Config; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class IoTDBDeleteTimeseriesIT { + + @Before + public void setUp() throws Exception { + EnvironmentUtils.closeStatMonitor(); + EnvironmentUtils.envSetUp(); + } + + @After + public void tearDown() throws Exception { + EnvironmentUtils.cleanEnv(); + } + + @Test + public void testDeleteTimeseries() throws Exception { + Class.forName(Config.JDBC_DRIVER_NAME); + String[] retArray = new String[]{ + "1,2,3,", + "1,2.1,3," + }; + int cnt = 0; + + try (Connection connection = DriverManager. + getConnection("jdbc:iotdb://127.0.0.1:6667/", "root", "root"); + Statement statement = connection.createStatement();) { + statement.execute( + "create timeseries root.turbine1.d1.s2 with datatype=INT64, encoding=PLAIN, compression=SNAPPY"); + statement.execute( + "create timeseries root.turbine1.d1.s3 with datatype=INT64, encoding=PLAIN, compression=SNAPPY"); + statement.execute("INSERT INTO root.turbine1.d1(timestamp,s2,s3) VALUES(1,2,3)"); + boolean hasResult = statement.execute("SELECT s1 FROM root.turbine.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++; + } + } + statement.execute("DELETE timeseries root.turbine1.d1.s2"); + statement.execute( + "create timeseries root.turbine1.d1.s2 with datatype=FLOAT, encoding=PLAIN, compression=SNAPPY"); + statement.execute("INSERT INTO root.turbine1.d1(timestamp,s2,s3) VALUES(1,2.1,3)"); + hasResult = statement.execute("SELECT s1 FROM root.turbine.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++; + } + } + } + } +}
