You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2022/05/31 12:31:23 UTC

[iotdb] branch master updated: [IOTDB-3337] return error which insert wrong type of data (#6089)

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

qiaojialin 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 96f4504e76 [IOTDB-3337] return error  which insert wrong type of  data (#6089)
96f4504e76 is described below

commit 96f4504e76afd87c528659ba4519856f6d6cf90f
Author: Haonan <hh...@outlook.com>
AuthorDate: Tue May 31 20:31:18 2022 +0800

    [IOTDB-3337] return error  which insert wrong type of  data (#6089)
---
 .../statemachine/visitor/DataExecutionVisitor.java        |  2 +-
 .../java/org/apache/iotdb/db/engine/StorageEngineV2.java  |  2 +-
 .../apache/iotdb/db/engine/storagegroup/DataRegion.java   | 15 +++++++++++++--
 .../iotdb/db/engine/storagegroup/DataRegionTest.java      | 12 ++++++++----
 4 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/visitor/DataExecutionVisitor.java b/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/visitor/DataExecutionVisitor.java
index 5144719058..b963ec138d 100644
--- a/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/visitor/DataExecutionVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/visitor/DataExecutionVisitor.java
@@ -68,7 +68,7 @@ public class DataExecutionVisitor extends PlanVisitor<TSStatus, DataRegion> {
     try {
       dataRegion.insertTablet(node);
       return StatusUtils.OK;
-    } catch (TriggerExecutionException e) {
+    } catch (TriggerExecutionException | WriteProcessException e) {
       LOGGER.error("Error in executing plan node: {}", node, e);
       return StatusUtils.EXECUTE_STATEMENT_ERROR;
     } catch (BatchProcessException e) {
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java
index dfe4824466..a3fc388024 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java
@@ -521,7 +521,7 @@ public class StorageEngineV2 implements IService {
   /** insert an InsertTabletNode to a storage group */
   // TODO:(New insert)
   public void insertTablet(DataRegionId dataRegionId, InsertTabletNode insertTabletNode)
-      throws StorageEngineException, BatchProcessException {
+      throws StorageEngineException, BatchProcessException, WriteProcessException {
     if (enableMemControl) {
       try {
         blockInsertionIfReject(null);
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
index 7937b4623d..642c68e760 100755
--- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/DataRegion.java
@@ -63,6 +63,7 @@ import org.apache.iotdb.db.metadata.idtable.IDTable;
 import org.apache.iotdb.db.metadata.idtable.IDTableManager;
 import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertMultiTabletsNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertNode;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowNode;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowsNode;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowsOfOneDeviceNode;
@@ -876,6 +877,7 @@ public class DataRegion {
           "Fail to insert measurements {} caused by {}",
           insertRowNode.getFailedMeasurements(),
           insertRowNode.getFailedMessages());
+      checkFailedMeasurements(insertRowNode);
     }
   }
 
@@ -1005,7 +1007,7 @@ public class DataRegion {
    */
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity warning
   public void insertTablet(InsertTabletNode insertTabletNode)
-      throws BatchProcessException, TriggerExecutionException {
+      throws BatchProcessException, TriggerExecutionException, WriteProcessException {
 
     writeLock("insertTablet");
     try {
@@ -1097,6 +1099,7 @@ public class DataRegion {
           "Fail to insert measurements {} caused by {}",
           insertTabletNode.getFailedMeasurements(),
           insertTabletNode.getFailedMessages());
+      checkFailedMeasurements(insertTabletNode);
     }
   }
 
@@ -3472,7 +3475,7 @@ public class DataRegion {
       InsertTabletNode insertTabletNode = insertMultiTabletsNode.getInsertTabletNodeList().get(i);
       try {
         insertTablet(insertTabletNode);
-      } catch (TriggerExecutionException | BatchProcessException e) {
+      } catch (TriggerExecutionException | BatchProcessException | WriteProcessException e) {
         insertMultiTabletsNode
             .getResults()
             .put(i, RpcUtils.getStatus(e.getErrorCode(), e.getMessage()));
@@ -3484,6 +3487,14 @@ public class DataRegion {
     }
   }
 
+  private void checkFailedMeasurements(InsertNode node) throws WriteProcessException {
+    List<Exception> exceptions = node.getFailedExceptions();
+    throw new WriteProcessException(
+        "failed to insert measurements "
+            + node.getFailedMeasurements()
+            + (!exceptions.isEmpty() ? (" caused by " + exceptions.get(0).getMessage()) : ""));
+  }
+
   @TestOnly
   public long getPartitionMaxFileVersions(long partitionId) {
     return partitionMaxFileVersions.getOrDefault(partitionId, 0L);
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/DataRegionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/DataRegionTest.java
index e7019a8824..28b3b45b6d 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/DataRegionTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/DataRegionTest.java
@@ -252,7 +252,8 @@ public class DataRegionTest {
 
   @Test
   public void testIoTDBTabletWriteAndSyncClose()
-      throws QueryProcessException, IllegalPathException, TriggerExecutionException {
+      throws QueryProcessException, IllegalPathException, TriggerExecutionException,
+          WriteProcessException {
     String[] measurements = new String[2];
     measurements[0] = "s0";
     measurements[1] = "s1";
@@ -416,7 +417,8 @@ public class DataRegionTest {
 
   @Test
   public void testEnableDiscardOutOfOrderDataForInsertTablet1()
-      throws QueryProcessException, IllegalPathException, IOException, TriggerExecutionException {
+      throws QueryProcessException, IllegalPathException, IOException, TriggerExecutionException,
+          WriteProcessException {
     boolean defaultEnableDiscard = config.isEnableDiscardOutOfOrderData();
     long defaultTimePartition = config.getPartitionInterval();
     boolean defaultEnablePartition = config.isEnablePartition();
@@ -508,7 +510,8 @@ public class DataRegionTest {
 
   @Test
   public void testEnableDiscardOutOfOrderDataForInsertTablet2()
-      throws QueryProcessException, IllegalPathException, IOException, TriggerExecutionException {
+      throws QueryProcessException, IllegalPathException, IOException, TriggerExecutionException,
+          WriteProcessException {
     boolean defaultEnableDiscard = config.isEnableDiscardOutOfOrderData();
     long defaultTimePartition = config.getPartitionInterval();
     boolean defaultEnablePartition = config.isEnablePartition();
@@ -600,7 +603,8 @@ public class DataRegionTest {
 
   @Test
   public void testEnableDiscardOutOfOrderDataForInsertTablet3()
-      throws QueryProcessException, IllegalPathException, IOException, TriggerExecutionException {
+      throws QueryProcessException, IllegalPathException, IOException, TriggerExecutionException,
+          WriteProcessException {
     boolean defaultEnableDiscard = config.isEnableDiscardOutOfOrderData();
     long defaultTimePartition = config.getPartitionInterval();
     boolean defaultEnablePartition = config.isEnablePartition();