This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch fix_insertTablets_no_error in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit f20afec5aacd983e4c3a3d3ebf8543aebc8af976 Author: HTHou <[email protected]> AuthorDate: Mon Nov 20 11:15:53 2023 +0800 Fix insertTablets API didn't return schema validation error --- .../iotdb/session/it/IoTDBSessionSimpleIT.java | 66 +++++++++++++++++++++- .../crud/InsertMultiTabletsStatement.java | 9 +++ 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java index 6601e3593be..03c24cb3e4d 100644 --- a/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/session/it/IoTDBSessionSimpleIT.java @@ -93,7 +93,7 @@ public class IoTDBSessionSimpleIT { schemaList.add(new MeasurementSchema("s2", TSDataType.DOUBLE)); schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT)); - Tablet tablet = new Tablet("root.sg.d", schemaList, 10); + Tablet tablet = new Tablet("root.sg.d1", schemaList, 10); long timestamp = System.currentTimeMillis(); @@ -123,11 +123,73 @@ public class IoTDBSessionSimpleIT { assertEquals(15L, rowRecord.getFields().get(2).getLongV()); } } catch (Exception e) { - e.printStackTrace(); fail(e.getMessage()); } } + @Test + @Category({LocalStandaloneIT.class, ClusterIT.class}) + public void insertPartialTabletsTest() { + try (ISession session = EnvFactory.getEnv().getSessionConnection()) { + session.createTimeseries( + "root.sg.d2.s2", TSDataType.BOOLEAN, TSEncoding.PLAIN, CompressionType.SNAPPY); + + List<MeasurementSchema> schemaList = new ArrayList<>(); + schemaList.add(new MeasurementSchema("s1", TSDataType.INT64)); + schemaList.add(new MeasurementSchema("s2", TSDataType.DOUBLE)); + schemaList.add(new MeasurementSchema("s3", TSDataType.TEXT)); + + Tablet tablet1 = new Tablet("root.sg.d1", schemaList, 10); + Tablet tablet2 = new Tablet("root.sg.d2", schemaList, 10); + Tablet tablet3 = new Tablet("root.sg.d3", schemaList, 10); + + Map<String, Tablet> tabletMap = new HashMap<>(); + tabletMap.put("root.sg.d1", tablet1); + tabletMap.put("root.sg.d2", tablet2); + tabletMap.put("root.sg.d3", tablet3); + + long timestamp = System.currentTimeMillis(); + + for (long row = 0; row < 15; row++) { + int rowIndex1 = tablet1.rowSize++; + tablet1.addTimestamp(rowIndex1, timestamp); + tablet1.addValue("s1", rowIndex1, 1L); + tablet1.addValue("s2", rowIndex1, 1D); + tablet1.addValue("s3", rowIndex1, new Binary("1", TSFileConfig.STRING_CHARSET)); + + int rowIndex2 = tablet2.rowSize++; + tablet2.addTimestamp(rowIndex2, timestamp); + tablet2.addValue("s1", rowIndex2, 1L); + tablet2.addValue("s2", rowIndex2, 1D); + tablet2.addValue("s3", rowIndex2, new Binary("1", TSFileConfig.STRING_CHARSET)); + + int rowIndex3 = tablet3.rowSize++; + tablet3.addTimestamp(rowIndex3, timestamp); + tablet3.addValue("s1", rowIndex3, 1L); + tablet3.addValue("s2", rowIndex3, 1D); + tablet3.addValue("s3", rowIndex3, new Binary("1", TSFileConfig.STRING_CHARSET)); + + if (tablet1.rowSize == tablet1.getMaxRowNumber()) { + session.insertTablets(tabletMap); + tablet1.reset(); + tablet2.reset(); + tablet3.reset(); + } + timestamp++; + } + + if (tablet1.rowSize != 0) { + session.insertTablets(tabletMap); + tablet1.reset(); + tablet2.reset(); + tablet3.reset(); + } + fail(); + } catch (Exception e) { + Assert.assertTrue(e.getMessage().contains("DataType")); + } + } + @Test @Category({LocalStandaloneIT.class, ClusterIT.class}) public void insertByStrAndInferTypeTest() { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertMultiTabletsStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertMultiTabletsStatement.java index da695c21d11..969af58cd82 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertMultiTabletsStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertMultiTabletsStatement.java @@ -87,6 +87,15 @@ public class InsertMultiTabletsStatement extends InsertBaseStatement { .collect(Collectors.toList()); } + @Override + public void updateAfterSchemaValidation() { + for (InsertTabletStatement insertTabletStatement : insertTabletStatementList) { + if (!this.hasFailedMeasurements() && insertTabletStatement.hasFailedMeasurements()) { + this.failedMeasurementIndex2Info = insertTabletStatement.failedMeasurementIndex2Info; + } + } + } + @Override protected boolean checkAndCastDataType(int columnIndex, TSDataType dataType) { return false;
