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();