This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch rc/2.0.1 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d0b17c396b1bb27907acd6db9ac8e4908c2997ba Author: Haonan <[email protected]> AuthorDate: Tue Dec 3 11:46:31 2024 +0800 Optimize table cache leader implement 2 (#14278) --- .../src/main/java/org/apache/iotdb/session/Session.java | 5 +++++ .../java/org/apache/iotdb/session/util/SessionUtils.java | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java index 63eb0b77701..3fbdb4214ff 100644 --- a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java +++ b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java @@ -2729,6 +2729,9 @@ public class Session implements ISession { */ public void insertRelationalTablet(Tablet tablet) throws IoTDBConnectionException, StatementExecutionException { + if (tablet.getRowSize() == 0) { + return; + } if (enableRedirection) { insertRelationalTabletWithLeaderCache(tablet); } else { @@ -2750,6 +2753,8 @@ public class Session implements ISession { Map<SessionConnection, Tablet> relationalTabletGroup = new HashMap<>(); if (tableModelDeviceIdToEndpoint.isEmpty()) { relationalTabletGroup.put(defaultSessionConnection, tablet); + } else if (SessionUtils.isTabletContainsSingleDevice(tablet)) { + relationalTabletGroup.put(getSessionConnection(tablet.getDeviceID(0)), tablet); } else { for (int i = 0; i < tablet.getRowSize(); i++) { IDeviceID iDeviceID = tablet.getDeviceID(i); diff --git a/iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java b/iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java index 5febc232f07..0ec1eb1621a 100644 --- a/iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java +++ b/iotdb-client/session/src/main/java/org/apache/iotdb/session/util/SessionUtils.java @@ -25,6 +25,7 @@ import org.apache.iotdb.rpc.UrlUtils; import org.apache.tsfile.common.conf.TSFileConfig; import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.utils.Binary; import org.apache.tsfile.utils.BitMap; import org.apache.tsfile.utils.BytesUtils; @@ -344,6 +345,20 @@ public class SessionUtils { } } + /* Used for table model insert only. */ + public static boolean isTabletContainsSingleDevice(Tablet tablet) { + if (tablet.getRowSize() == 1) { + return true; + } + IDeviceID firstDeviceId = tablet.getDeviceID(0); + for (int i = 1; i < tablet.getRowSize(); ++i) { + if (!firstDeviceId.equals(tablet.getDeviceID(i))) { + return false; + } + } + return true; + } + public static List<TEndPoint> parseSeedNodeUrls(List<String> nodeUrls) { if (nodeUrls == null) { throw new NumberFormatException("nodeUrls is null");
