From 4113f6b36fcd2f88df2cff1312d66db07ee9c960 Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Mon, 3 Mar 2014 10:20:13 +0100 Subject: [PATCH] SONAR-4996 Improve Java migrations performance --- .../migrations/debt/DevelopmentCostMeasuresMigration.java | 6 +++--- .../server/db/migrations/debt/IssueChangelogMigration.java | 6 +++--- .../org/sonar/server/db/migrations/debt/IssueMigration.java | 4 ++-- .../org/sonar/server/db/migrations/debt/MassUpdater.java | 5 ++++- .../db/migrations/debt/TechnicalDebtMeasuresMigration.java | 6 +++--- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/DevelopmentCostMeasuresMigration.java b/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/DevelopmentCostMeasuresMigration.java index d8778800f1c..37496d84deb 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/DevelopmentCostMeasuresMigration.java +++ b/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/DevelopmentCostMeasuresMigration.java @@ -83,9 +83,9 @@ public class DevelopmentCostMeasuresMigration implements DatabaseMigration { if (row.value != null) { statement.setString(1, convertDebtForDays(row.value)); } else { - statement.setNull(1, Types.NULL); + statement.setNull(1, Types.DOUBLE); } - statement.setDouble(2, row.id); + statement.setLong(2, row.id); } } ); @@ -99,7 +99,7 @@ public class DevelopmentCostMeasuresMigration implements DatabaseMigration { return Long.toString(workDurationConvertor.createFromDays(data)); } - private class Row { + private static class Row { Long id; Double value; } diff --git a/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/IssueChangelogMigration.java b/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/IssueChangelogMigration.java index 1158759a84b..4434de3d08b 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/IssueChangelogMigration.java +++ b/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/IssueChangelogMigration.java @@ -89,10 +89,10 @@ public class IssueChangelogMigration implements DatabaseMigration { if (row.changeData != null) { statement.setString(1, convertChangelog(row.changeData)); } else { - statement.setNull(1, Types.NULL); + statement.setNull(1, Types.VARCHAR); } statement.setDate(2, new Date(system2.now())); - statement.setDouble(3, row.id); + statement.setLong(3, row.id); } } ); @@ -122,7 +122,7 @@ public class IssueChangelogMigration implements DatabaseMigration { return sb.toString(); } - private class Row { + private static class Row { Long id; String changeData; } diff --git a/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/IssueMigration.java b/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/IssueMigration.java index e1b09b9e2c7..777b82d4141 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/IssueMigration.java +++ b/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/IssueMigration.java @@ -86,13 +86,13 @@ public class IssueMigration implements DatabaseMigration { public void convert(Row row, PreparedStatement statement) throws SQLException { statement.setLong(1, workDurationConvertor.createFromLong(row.debt)); statement.setDate(2, new Date(system2.now())); - statement.setDouble(3, row.id); + statement.setLong(3, row.id); } } ); } - private class Row { + private static class Row { Long id; Long debt; } diff --git a/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/MassUpdater.java b/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/MassUpdater.java index 28bcb0c1bdb..0ca0e05263d 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/MassUpdater.java +++ b/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/MassUpdater.java @@ -58,6 +58,7 @@ public class MassUpdater { } public void execute(InputLoader inputLoader, InputConverter converter) { + int count = 0; try { Connection readConnection = db.getDataSource().getConnection(); Statement stmt = null; @@ -86,6 +87,7 @@ public class MassUpdater { writeStatement.addBatch(); cursor++; + count++; if (cursor == GROUP_SIZE) { writeStatement.executeBatch(); writeConnection.commit(); @@ -96,13 +98,14 @@ public class MassUpdater { writeStatement.executeBatch(); writeConnection.commit(); } - } finally { if (writeStatement != null) { writeStatement.close(); } DbUtils.closeQuietly(writeConnection); DbUtils.closeQuietly(readConnection, stmt, rs); + + logger.info("{} rows have been updated", count); } } catch (SQLException e) { logger.error(FAILURE_MESSAGE, e); diff --git a/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/TechnicalDebtMeasuresMigration.java b/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/TechnicalDebtMeasuresMigration.java index c43be700ced..56fb03d76fa 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/TechnicalDebtMeasuresMigration.java +++ b/sonar-server/src/main/java/org/sonar/server/db/migrations/debt/TechnicalDebtMeasuresMigration.java @@ -101,7 +101,7 @@ public class TechnicalDebtMeasuresMigration implements DatabaseMigration { setDouble(statement, 4, row.var3); setDouble(statement, 5, row.var4); setDouble(statement, 6, row.var5); - statement.setDouble(7, row.id); + statement.setLong(7, row.id); } } ); @@ -111,7 +111,7 @@ public class TechnicalDebtMeasuresMigration implements DatabaseMigration { if (value != null) { statement.setDouble(index, convertDebtForDays(value)); } else { - statement.setNull(index, Types.NULL); + statement.setNull(index, Types.DOUBLE); } } @@ -119,7 +119,7 @@ public class TechnicalDebtMeasuresMigration implements DatabaseMigration { return workDurationConvertor.createFromDays(data); } - private class Row { + private static class Row { Long id; Double value; Double var1; -- 2.39.5