From 6d1a1e109105645bc7ad9d240cf3de79e9097192 Mon Sep 17 00:00:00 2001 From: Duarte Meneses Date: Tue, 13 Sep 2022 16:31:22 -0500 Subject: [PATCH] SONAR-17326 Project measure index fails due to cursor leak --- .../ProjectMeasuresIndexerIterator.java | 75 ++++++++----------- 1 file changed, 33 insertions(+), 42 deletions(-) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java b/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java index 12bf3034740..e4dba2dce99 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/measure/ProjectMeasuresIndexerIterator.java @@ -131,7 +131,7 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator selectProjects(DbSession session, @Nullable String projectUuid) { List projects = new ArrayList<>(); try (PreparedStatement stmt = createProjectsStatement(session, projectUuid); - ResultSet rs = stmt.executeQuery()) { + ResultSet rs = stmt.executeQuery()) { while (rs.next()) { String uuid = rs.getString(1); String key = rs.getString(2); @@ -191,14 +191,13 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator projectBranches = selectProjectBranches(dbSession, projectUuid); @@ -206,19 +205,18 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator selectProjectBranches(DbSession session, String projectUuid) { - ResultSet rs = null; List projectBranches = new ArrayList<>(); try (PreparedStatement stmt = session.getConnection().prepareStatement(SQL_PROJECT_BRANCHES)) { AtomicInteger index = new AtomicInteger(1); stmt.setString(index.getAndIncrement(), projectUuid); - rs = stmt.executeQuery(); - - while (rs.next()) { - String uuid = rs.getString(1); - projectBranches.add(uuid); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String uuid = rs.getString(1); + projectBranches.add(uuid); + } } return projectBranches; } catch (SQLException e) { throw new IllegalStateException("Fail to execute request to select all project branches", e); - } finally { - DatabaseUtils.closeQuietly(rs); } } private static long selectProjectBiggestNcloc(DbSession session, List projectBranches) { - try { - long ncloc = 0; - + try (PreparedStatement nclocStatement = getPreparedStatement(projectBranches, SQL_BIGGEST_NCLOC_VALUE, session)) { AtomicInteger index = new AtomicInteger(1); - PreparedStatement nclocStatement = getPreparedStatement(projectBranches, SQL_BIGGEST_NCLOC_VALUE, session); projectBranches.forEach(DatabaseUtils.setStrings(nclocStatement, index::getAndIncrement)); nclocStatement.setString(index.getAndIncrement(), CoreMetrics.NCLOC_KEY); nclocStatement.setBoolean(index.getAndIncrement(), ENABLED); - ResultSet rs = nclocStatement.executeQuery(); - - if (rs.next()) { - ncloc = rs.getLong(1); + try (ResultSet rs = nclocStatement.executeQuery()) { + long ncloc = 0; + if (rs.next()) { + ncloc = rs.getLong(1); + } + return ncloc; } - return ncloc; } catch (SQLException e) { throw new IllegalStateException("Fail to execute request to select the project biggest ncloc", e); } } private static String selectProjectBiggestBranch(DbSession session, List projectBranches, long ncloc) { - try { - String biggestBranchUuid = ""; - + try (PreparedStatement nclocStatement = getPreparedStatement(projectBranches, SQL_BIGGEST_BRANCH, session)) { AtomicInteger index = new AtomicInteger(1); - PreparedStatement nclocStatement = getPreparedStatement(projectBranches, SQL_BIGGEST_BRANCH, session); projectBranches.forEach(DatabaseUtils.setStrings(nclocStatement, index::getAndIncrement)); nclocStatement.setString(index.getAndIncrement(), CoreMetrics.NCLOC_KEY); nclocStatement.setLong(index.getAndIncrement(), ncloc); nclocStatement.setBoolean(index.getAndIncrement(), ENABLED); - ResultSet rs = nclocStatement.executeQuery(); - - if (rs.next()) { - biggestBranchUuid = rs.getString(1); + String biggestBranchUuid = ""; + try (ResultSet rs = nclocStatement.executeQuery()) { + if (rs.next()) { + biggestBranchUuid = rs.getString(1); + } } return biggestBranchUuid; } catch (SQLException e) { @@ -401,7 +392,7 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator numericMeasures = new HashMap<>(); + private final Map numericMeasures = new HashMap<>(); private String qualityGateStatus; private Map nclocByLanguages = new LinkedHashMap<>(); @@ -435,8 +426,8 @@ public class ProjectMeasuresIndexerIterator extends CloseableIterator