summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@gmail.com>2013-09-20 10:40:29 +0200
committerSimon Brandhof <simon.brandhof@gmail.com>2013-09-20 10:40:38 +0200
commitf1cad62d502b4b13c67819065c31097e551e3517 (patch)
tree204df6c89a9632d5bb781222eaa2d161710ff45e
parent7fa78d62901dfd3ac3a2d93bcf06e0ab1b176fef (diff)
downloadsonarqube-f1cad62d502b4b13c67819065c31097e551e3517.tar.gz
sonarqube-f1cad62d502b4b13c67819065c31097e551e3517.zip
SONAR-4690 fix thread sharing of violation ids
-rw-r--r--sonar-server/src/main/java/org/sonar/server/db/migrations/violation/ViolationConverter.java1
-rw-r--r--sonar-server/src/main/java/org/sonar/server/db/migrations/violation/ViolationMigration.java22
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);
- }
}
}