]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10502 Fix concurrency error during initial indexing
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Tue, 20 Mar 2018 16:21:12 +0000 (17:21 +0100)
committerSonarTech <sonartech@sonarsource.com>
Thu, 22 Mar 2018 11:37:50 +0000 (12:37 +0100)
server/sonar-server/src/main/java/org/sonar/server/es/IndexingListener.java
server/sonar-server/src/main/java/org/sonar/server/es/IndexingResult.java

index 44e04c18ca6a5c8baefce839d206d3de953cf445..3c869401c39364401a8227345e1e0239f2cc0964 100644 (file)
@@ -36,7 +36,7 @@ public interface IndexingListener {
     @Override
     public void onFinish(IndexingResult result) {
       if (result.getFailures() > 0) {
-        throw new IllegalStateException("Unrecoverable indexation failures");
+        throw new IllegalStateException(String.format("Unrecoverable indexation failures: %d errors among %d requests", result.getFailures(), result.getTotal()));
       }
     }
   };
index fac20747be1be2127d1e160e8f665dbd992d3ffb..5b7386d178e14b2ae5c450f00bdb0cc113bff0b2 100644 (file)
@@ -24,12 +24,12 @@ import java.util.concurrent.atomic.AtomicLong;
 public class IndexingResult {
 
   // FIXME should be private
-  AtomicLong total = new AtomicLong(0L);
-  private long successes = 0L;
+  final AtomicLong total = new AtomicLong(0L);
+  private final AtomicLong successes = new AtomicLong(0L);
 
   IndexingResult clear() {
     total.set(0L);
-    successes = 0L;
+    successes.set(0L);
     return this;
   }
 
@@ -38,17 +38,17 @@ public class IndexingResult {
   }
 
   public IndexingResult incrementSuccess() {
-    successes += 1;
+    successes.incrementAndGet();
     return this;
   }
 
   public void add(IndexingResult other) {
     total.addAndGet(other.total.get());
-    successes += other.successes;
+    successes.addAndGet(other.successes.get());
   }
 
   public long getFailures() {
-    return total.get() - successes;
+    return total.get() - successes.get();
   }
 
   public long getTotal() {
@@ -56,14 +56,14 @@ public class IndexingResult {
   }
 
   public long getSuccess() {
-    return successes;
+    return successes.get();
   }
 
   public double getSuccessRatio() {
-    return total.get() == 0 ? 1.0 : ((1.0 * successes) / total.get());
+    return total.get() == 0 ? 1.0 : ((1.0 * successes.get()) / total.get());
   }
 
   public boolean isSuccess() {
-    return total.get() == successes;
+    return total.get() == successes.get();
   }
 }