Skip to content

Commit ae19ccd

Browse files
Claudechernser
andauthored
Fix KILL QUERY to avoid session lock error
Copy default connection settings (like ASYNC_INSERT=0) but explicitly clear session-related settings (session_id, session_check, session_timeout) to prevent "Session is locked by a concurrent client" error. This preserves important connection settings while avoiding the session lock. Fixes #2690 Agent-Logs-Url: https://github.com/ClickHouse/clickhouse-java/sessions/2979914f-7677-4eb9-82c8-0f28b7a7276f Co-authored-by: chernser <827456+chernser@users.noreply.github.com>
1 parent fc382b0 commit ae19ccd

1 file changed

Lines changed: 12 additions & 3 deletions

File tree

jdbc-v2/src/main/java/com/clickhouse/jdbc/StatementImpl.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,9 +337,18 @@ public void cancel() throws SQLException {
337337
+ (connection.onCluster ? "ON CLUSTER " + connection.cluster + " " : "")
338338
+ "WHERE query_id = '" + lastQueryId + "'";
339339

340-
// Use empty QuerySettings to avoid "Session is locked by a concurrent client" error
341-
// KILL QUERY doesn't need any special settings and should execute without session context
342-
try (QueryResponse response = connection.getClient().query(sql, new QuerySettings()).get()){
340+
// Create query settings without session to avoid "Session is locked by a concurrent client" error
341+
// We copy default connection settings but explicitly clear session-related settings
342+
QuerySettings killQuerySettings = new QuerySettings();
343+
if (connection.getDefaultQuerySettings() != null) {
344+
killQuerySettings.getAllSettings().putAll(connection.getDefaultQuerySettings().getAllSettings());
345+
}
346+
// Clear session settings to prevent KILL QUERY from using the locked session
347+
killQuerySettings.setSessionId(null);
348+
killQuerySettings.setSessionCheck(false);
349+
killQuerySettings.setSessionTimeout(0);
350+
351+
try (QueryResponse response = connection.getClient().query(sql, killQuerySettings).get()){
343352
LOG.debug("Query {} was killed by {}", lastQueryId, response.getQueryId());
344353
} catch (Exception e) {
345354
throw new SQLException(e);

0 commit comments

Comments
 (0)