From 158d448975098162bcbe34dc4731f5dd58cd36a6 Mon Sep 17 00:00:00 2001 From: zy-kkk Date: Thu, 27 Mar 2025 12:14:10 +0800 Subject: [PATCH 1/2] [fix](jdbc catalog) Fix connection leak in PostgreSQL JDBC client --- .../jdbc/client/JdbcPostgreSQLClient.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java index 21c16f2dd20ad5..f6637a35d475e7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java @@ -65,12 +65,26 @@ public List getJdbcColumnsInfo(String remoteDbName, String remo int arrayDimensions = 0; if (dataType == Types.ARRAY) { String columnName = rs.getString("COLUMN_NAME"); - try (PreparedStatement pstmt = conn.prepareStatement( - String.format("SELECT array_ndims(%s) FROM %s.%s LIMIT 1", - columnName, remoteDbName, remoteTableName))) { - try (ResultSet arrayRs = pstmt.executeQuery()) { - if (arrayRs.next()) { - arrayDimensions = arrayRs.getInt(1); + PreparedStatement pstmt = null; + ResultSet arrayRs = null; + try { + pstmt = conn.prepareStatement( + String.format("SELECT array_ndims(%s) FROM %s.%s LIMIT 1", + columnName, remoteDbName, remoteTableName)); + arrayRs = pstmt.executeQuery(); + if (arrayRs.next()) { + arrayDimensions = arrayRs.getInt(1); + } + } catch (SQLException ex) { + LOG.warn("Failed to get array dimensions for column {}: {}", + columnName, Util.getRootCauseMessage(ex)); + } finally { + close(arrayRs, null); + if (pstmt != null) { + try { + pstmt.close(); + } catch (SQLException ex) { + LOG.warn("Failed to close prepared statement: {}", Util.getRootCauseMessage(ex)); } } } From f5444e6a53e5af08912d61b129966c756a21f5ed Mon Sep 17 00:00:00 2001 From: zy-kkk Date: Thu, 27 Mar 2025 12:15:31 +0800 Subject: [PATCH 2/2] 1 --- .../doris/datasource/jdbc/client/JdbcPostgreSQLClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java index f6637a35d475e7..fe1e365d1ac8d5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcPostgreSQLClient.java @@ -76,7 +76,7 @@ public List getJdbcColumnsInfo(String remoteDbName, String remo arrayDimensions = arrayRs.getInt(1); } } catch (SQLException ex) { - LOG.warn("Failed to get array dimensions for column {}: {}", + LOG.warn("Failed to get array dimensions for column {}: {}", columnName, Util.getRootCauseMessage(ex)); } finally { close(arrayRs, null);