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) {
