This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch rc/2.0.5
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit d4584a9915af8eb37622d3f4f102108651948093
Author: Zhenyu Luo <[email protected]>
AuthorDate: Fri Jul 25 16:45:16 2025 +0800

    Load: Fix the Session exit issue after type conversion (#16037)
    
    * Load: Fix the Session exit issue after type conversion
    
    * fix
    
    (cherry picked from commit 8a79fa3b44660f37495aedc956b14aa148ebf878)
---
 .../iotdb/db/protocol/session/SessionManager.java  | 10 +++
 .../converter/LoadTsFileDataTypeConverter.java     | 81 +++++++++++++++-------
 2 files changed, 67 insertions(+), 24 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
index d7c5cb6f8be..6da3ee64110 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/SessionManager.java
@@ -411,6 +411,16 @@ public class SessionManager implements SessionManagerMBean 
{
         IClientSession.SqlDialect.TREE);
   }
 
+  public SessionInfo getSessionInfoOfTreeModel(IClientSession session) {
+    return new SessionInfo(
+        session.getId(),
+        session.getUsername(),
+        ZoneId.systemDefault(),
+        session.getClientVersion(),
+        session.getDatabaseName(),
+        IClientSession.SqlDialect.TREE);
+  }
+
   public SessionInfo getSessionInfoOfTableModel(IClientSession session) {
     return new SessionInfo(
         session.getId(),
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
index fea85b11f8d..59ff67f902d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
@@ -89,18 +89,24 @@ public class LoadTsFileDataTypeConverter {
   }
 
   private TSStatus executeForTableModel(final Statement statement, final 
String databaseName) {
-    final IClientSession session =
-        new InternalClientSession(
-            String.format(
-                "%s_%s",
-                LoadTsFileDataTypeConverter.class.getSimpleName(),
-                Thread.currentThread().getName()));
-    session.setUsername(AuthorityChecker.SUPER_USER);
-    session.setClientVersion(IoTDBConstant.ClientVersion.V_1_0);
-    session.setZoneId(ZoneId.systemDefault());
-    session.setSqlDialect(IClientSession.SqlDialect.TABLE);
-
-    SESSION_MANAGER.registerSession(session);
+    final IClientSession session;
+    final boolean needToCreateSession = SESSION_MANAGER.getCurrSession() == 
null;
+    if (needToCreateSession) {
+      session =
+          new InternalClientSession(
+              String.format(
+                  "%s_%s",
+                  LoadTsFileDataTypeConverter.class.getSimpleName(),
+                  Thread.currentThread().getName()));
+      session.setUsername(AuthorityChecker.SUPER_USER);
+      session.setClientVersion(IoTDBConstant.ClientVersion.V_1_0);
+      session.setZoneId(ZoneId.systemDefault());
+      session.setSqlDialect(IClientSession.SqlDialect.TABLE);
+
+      SESSION_MANAGER.registerSession(session);
+    } else {
+      session = SESSION_MANAGER.getCurrSession();
+    }
     try {
       return Coordinator.getInstance()
           .executeForTableModel(
@@ -114,7 +120,9 @@ public class LoadTsFileDataTypeConverter {
               
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold())
           .status;
     } finally {
-      SESSION_MANAGER.removeCurrSession();
+      if (needToCreateSession) {
+        SESSION_MANAGER.removeCurrSession();
+      }
     }
   }
 
@@ -134,17 +142,42 @@ public class LoadTsFileDataTypeConverter {
   }
 
   private TSStatus executeForTreeModel(final Statement statement) {
-    return Coordinator.getInstance()
-        .executeForTreeModel(
-            isGeneratedByPipe ? new PipeEnrichedStatement(statement) : 
statement,
-            SESSION_MANAGER.requestQueryId(),
-            SESSION_MANAGER.getSessionInfo(SESSION_MANAGER.getCurrSession()),
-            "",
-            ClusterPartitionFetcher.getInstance(),
-            ClusterSchemaFetcher.getInstance(),
-            
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
-            false)
-        .status;
+    final IClientSession session;
+    final boolean needToCreateSession = SESSION_MANAGER.getCurrSession() == 
null;
+    if (needToCreateSession) {
+      session =
+          new InternalClientSession(
+              String.format(
+                  "%s_%s",
+                  LoadTsFileDataTypeConverter.class.getSimpleName(),
+                  Thread.currentThread().getName()));
+      session.setUsername(AuthorityChecker.SUPER_USER);
+      session.setClientVersion(IoTDBConstant.ClientVersion.V_1_0);
+      session.setZoneId(ZoneId.systemDefault());
+      session.setSqlDialect(IClientSession.SqlDialect.TREE);
+
+      SESSION_MANAGER.registerSession(session);
+    } else {
+      session = SESSION_MANAGER.getCurrSession();
+    }
+
+    try {
+      return Coordinator.getInstance()
+          .executeForTreeModel(
+              isGeneratedByPipe ? new PipeEnrichedStatement(statement) : 
statement,
+              SESSION_MANAGER.requestQueryId(),
+              SESSION_MANAGER.getSessionInfoOfTreeModel(session),
+              "",
+              ClusterPartitionFetcher.getInstance(),
+              ClusterSchemaFetcher.getInstance(),
+              
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
+              false)
+          .status;
+    } finally {
+      if (needToCreateSession) {
+        SESSION_MANAGER.removeCurrSession();
+      }
+    }
   }
 
   public boolean isSuccessful(final TSStatus status) {

Reply via email to