diff options
author | Simon Brandhof <simon.brandhof@gmail.com> | 2013-09-20 10:40:29 +0200 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@gmail.com> | 2013-09-20 10:40:38 +0200 |
commit | f1cad62d502b4b13c67819065c31097e551e3517 (patch) | |
tree | 204df6c89a9632d5bb781222eaa2d161710ff45e | |
parent | 7fa78d62901dfd3ac3a2d93bcf06e0ab1b176fef (diff) | |
download | sonarqube-f1cad62d502b4b13c67819065c31097e551e3517.tar.gz sonarqube-f1cad62d502b4b13c67819065c31097e551e3517.zip |
SONAR-4690 fix thread sharing of violation ids
2 files changed, 12 insertions, 11 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/db/migrations/violation/ViolationConverter.java b/sonar-server/src/main/java/org/sonar/server/db/migrations/violation/ViolationConverter.java index aeffff295a2..73e417faafe 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/migrations/violation/ViolationConverter.java +++ b/sonar-server/src/main/java/org/sonar/server/db/migrations/violation/ViolationConverter.java @@ -91,7 +91,6 @@ class ViolationConverter implements Runnable { @Override public void run() { - System.out.println("convert " + violationIds.length + " violations"); convert(selectRows()); } diff --git a/sonar-server/src/main/java/org/sonar/server/db/migrations/violation/ViolationMigration.java b/sonar-server/src/main/java/org/sonar/server/db/migrations/violation/ViolationMigration.java index e8253d7e73c..249893e7a00 100644 --- a/sonar-server/src/main/java/org/sonar/server/db/migrations/violation/ViolationMigration.java +++ b/sonar-server/src/main/java/org/sonar/server/db/migrations/violation/ViolationMigration.java @@ -81,7 +81,6 @@ public class ViolationMigration implements DatabaseMigration { ViolationConverters converters = new ViolationConverters(db, referentials); Connection readConnection = db.getDataSource().getConnection(); try { - readConnection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED); new QueryRunner().query(readConnection, "select id from rule_failures", new ViolationIdHandler(converters)); } finally { DbUtils.closeQuietly(readConnection); @@ -90,8 +89,6 @@ public class ViolationMigration implements DatabaseMigration { } private static class ViolationIdHandler implements ResultSetHandler { - private Object[] violationIds = new Object[GROUP_SIZE]; - private int cursor = 0; private final ViolationConverters converters; private ViolationIdHandler(ViolationConverters converters) { @@ -100,27 +97,32 @@ public class ViolationMigration implements DatabaseMigration { @Override public Object handle(ResultSet rs) throws SQLException { + // int is enough, it allows to upgrade up to 2 billions violations ! int total = 0; + int cursor = 0; + + Object[] violationIds = new Object[GROUP_SIZE]; while (rs.next()) { long violationId = rs.getLong(1); violationIds[cursor++] = violationId; if (cursor == GROUP_SIZE) { - convert(); - Arrays.fill(violationIds, -1L); + converters.convert(violationIds); + violationIds = new Object[GROUP_SIZE]; cursor = 0; } total++; } if (cursor > 0) { - convert(); + for (int i=0 ; i<violationIds.length ; i++) { + if (violationIds[i]==null) { + violationIds[i]=-1; + } + } + converters.convert(violationIds); } LoggerFactory.getLogger(getClass()).info(String.format("%d violations migrated to issues", total)); return null; } - - private void convert() { - converters.convert(violationIds); - } } } |