This is an automated email from the ASF dual-hosted git repository. jt2594838 pushed a commit to branch insert_numeric_row in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 5b301e02d30daf1efe699cc6a23907108f74deb2 Author: Tian Jiang <[email protected]> AuthorDate: Mon Sep 21 18:26:45 2026 +0800 Add perf --- .../it/session/IoTDBTableModelSessionIT.java | 29 ++++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBTableModelSessionIT.java b/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBTableModelSessionIT.java index db971c7cc02..df4669db155 100644 --- a/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBTableModelSessionIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/relational/it/session/IoTDBTableModelSessionIT.java @@ -439,16 +439,20 @@ public class IoTDBTableModelSessionIT { final int warmupRounds = 2; final int measuredRounds = 6; final int fieldCount = 99; + final String databasePrefix = "numeric_perf_"; try (ITableSession session = EnvFactory.getEnv().getTableSessionConnection()) { - session.executeNonQueryStatement("CREATE DATABASE numeric_perf"); - session.executeNonQueryStatement("USE numeric_perf"); StringBuilder ddl = new StringBuilder("CREATE TABLE prepared_perf (tag STRING TAG"); for (int i = 0; i < fieldCount; i++) { ddl.append(", f").append(i).append(" DOUBLE FIELD"); } ddl.append(")"); - session.executeNonQueryStatement(ddl.toString()); - session.executeNonQueryStatement(ddl.toString().replace("prepared_perf", "tablet_perf")); + // Give each writer its own database so concurrent writes use independent DataRegions. + for (int i = 0; i < concurrency; i++) { + session.executeNonQueryStatement("CREATE DATABASE " + databasePrefix + i); + session.executeNonQueryStatement("USE " + databasePrefix + i); + session.executeNonQueryStatement(ddl.toString()); + session.executeNonQueryStatement(ddl.toString().replace("prepared_perf", "tablet_perf")); + } } List<String> names = new ArrayList<>(); @@ -474,7 +478,7 @@ public class IoTDBTableModelSessionIT { // Connections, USE, prepare and reusable input allocation are outside every timed round. for (int i = 0; i < concurrency; i++) { sessions[i] = EnvFactory.getEnv().getTableSessionConnection(); - sessions[i].executeNonQueryStatement("USE numeric_perf"); + sessions[i].executeNonQueryStatement("USE " + databasePrefix + i); prepared[i] = sessions[i].prepareInsertNumericRow("prepared_perf", names, types, categories); tablets[i] = new Tablet("tablet_perf", names, types, categories, 1); @@ -551,12 +555,15 @@ public class IoTDBTableModelSessionIT { // Per-device monotonic timestamps span warmup and measurement, so no rows overwrite others. for (int path = 0; path < 2; path++) { String table = path == 0 ? "prepared_perf" : "tablet_perf"; - long expectedRows = Arrays.stream(path == 0 ? preparedRows : tabletRows).sum(); - try (SessionDataSet dataSet = - sessions[0].executeQueryStatement("SELECT count(*) FROM " + table)) { - assertTrue(dataSet.hasNext()); - assertEquals(expectedRows, dataSet.next().getFields().get(0).getLongV()); - assertFalse(dataSet.hasNext()); + long[] rowsByThread = path == 0 ? preparedRows : tabletRows; + long expectedRows = Arrays.stream(rowsByThread).sum(); + for (int i = 0; i < concurrency; i++) { + try (SessionDataSet dataSet = + sessions[i].executeQueryStatement("SELECT count(*) FROM " + table)) { + assertTrue(dataSet.hasNext()); + assertEquals(rowsByThread[i], dataSet.next().getFields().get(0).getLongV()); + assertFalse(dataSet.hasNext()); + } } System.out.printf("verified %s: %d rows%n", table, expectedRows); }
