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

Reply via email to