This is an automated email from the ASF dual-hosted git repository.
rong 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 78b1ba9 [IOTDB-2136] Fix timeseries deletion issue (#4559)
78b1ba9 is described below
commit 78b1ba9087a2cd3ece2e0fee7c2c9f6ed8746ec7
Author: Zhong Wang <[email protected]>
AuthorDate: Wed Dec 15 16:32:09 2021 +0800
[IOTDB-2136] Fix timeseries deletion issue (#4559)
---
.../apache/iotdb/session/IoTDBSessionSimpleIT.java | 3 +-
.../org/apache/iotdb/db/metadata/MManager.java | 53 +++++++++++++++++++---
.../iotdb/db/metadata/MManagerBasicTest.java | 18 ++++++++
3 files changed, 65 insertions(+), 9 deletions(-)
diff --git
a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
index 15fcd3e..316063a 100644
---
a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
+++
b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
@@ -539,8 +539,7 @@ public class IoTDBSessionSimpleIT {
try {
session.deleteTimeseries(Arrays.asList("root.sg1.d1.t6",
"root.sg1.d1.t2", "root.sg1.d1.t3"));
} catch (BatchExecutionException e) {
- assertEquals(
- "No matched timeseries or aligned timeseries for Path
[root.sg1.d1.t6];", e.getMessage());
+ assertEquals("Path [root.sg1.d1.t6] does not exist;", e.getMessage());
}
assertTrue(session.checkTimeseriesExists("root.sg1.d1.t1"));
assertFalse(session.checkTimeseriesExists("root.sg1.d1.t2"));
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index dde8efd..0e4b57c 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -24,7 +24,19 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.engine.StorageEngine;
import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
import org.apache.iotdb.db.engine.trigger.executor.TriggerEngine;
-import org.apache.iotdb.db.exception.metadata.*;
+import org.apache.iotdb.db.exception.metadata.AliasAlreadyExistException;
+import org.apache.iotdb.db.exception.metadata.DataTypeMismatchException;
+import org.apache.iotdb.db.exception.metadata.DeleteFailedException;
+import org.apache.iotdb.db.exception.metadata.DifferentTemplateException;
+import org.apache.iotdb.db.exception.metadata.MNodeTypeMismatchException;
+import org.apache.iotdb.db.exception.metadata.MetadataException;
+import org.apache.iotdb.db.exception.metadata.NoTemplateOnMNodeException;
+import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException;
+import org.apache.iotdb.db.exception.metadata.PathNotExistException;
+import org.apache.iotdb.db.exception.metadata.StorageGroupAlreadySetException;
+import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
+import org.apache.iotdb.db.exception.metadata.TemplateIsInUseException;
+import org.apache.iotdb.db.exception.metadata.UndefinedTemplateException;
import org.apache.iotdb.db.metadata.lastCache.LastCacheManager;
import org.apache.iotdb.db.metadata.logfile.MLogReader;
import org.apache.iotdb.db.metadata.logfile.MLogWriter;
@@ -45,7 +57,25 @@ import org.apache.iotdb.db.qp.physical.PhysicalPlan;
import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan;
import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan;
-import org.apache.iotdb.db.qp.physical.sys.*;
+import org.apache.iotdb.db.qp.physical.sys.ActivateTemplatePlan;
+import org.apache.iotdb.db.qp.physical.sys.AppendTemplatePlan;
+import org.apache.iotdb.db.qp.physical.sys.AutoCreateDeviceMNodePlan;
+import org.apache.iotdb.db.qp.physical.sys.ChangeAliasPlan;
+import org.apache.iotdb.db.qp.physical.sys.ChangeTagOffsetPlan;
+import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.CreateContinuousQueryPlan;
+import org.apache.iotdb.db.qp.physical.sys.CreateTemplatePlan;
+import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.DeleteStorageGroupPlan;
+import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.DropContinuousQueryPlan;
+import org.apache.iotdb.db.qp.physical.sys.PruneTemplatePlan;
+import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
+import org.apache.iotdb.db.qp.physical.sys.SetTTLPlan;
+import org.apache.iotdb.db.qp.physical.sys.SetTemplatePlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
+import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
+import org.apache.iotdb.db.qp.physical.sys.UnsetTemplatePlan;
import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
@@ -72,8 +102,17 @@ import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
@@ -599,10 +638,10 @@ public class MManager {
try {
List<MeasurementPath> allTimeseries =
mtree.getMeasurementPaths(pathPattern);
if (allTimeseries.isEmpty()) {
- throw new MetadataException(
- String.format(
- "No matched timeseries or aligned timeseries for Path [%s]",
- pathPattern.getFullPath()));
+ // In the cluster mode, the deletion of a timeseries will be forwarded
to all the nodes. For
+ // nodes that do not have the metadata of the timeseries, the
coordinator expects a
+ // PathNotExistException.
+ throw new PathNotExistException(pathPattern.getFullPath());
}
// Monitor storage group seriesPath is not allowed to be deleted
diff --git
a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index d1227cc..4efed46 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -251,6 +251,24 @@ public class MManagerBasicTest {
assertFalse(manager.isPathExist(new PartialPath("root.1")));
}
+ /**
+ * Test if the PathNotExistException can be correctly thrown when the path
to be deleted does not
+ * exist. See {@link MManager#deleteTimeseries(PartialPath)}.
+ */
+ @Test
+ public void testDeleteNonExistentTimeseries() {
+ MManager manager = IoTDB.metaManager;
+ try {
+ manager.deleteTimeseries(new PartialPath("root.non.existent"));
+ fail();
+ } catch (PathNotExistException e) {
+ assertEquals("Path [root.non.existent] does not exist", e.getMessage());
+ } catch (MetadataException e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ }
+ }
+
@SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity
warning
@Test
public void testCreateAlignedTimeseries() throws MetadataException {