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 <[email protected]>
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();