]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8435 fix safemode on non startup-leader failing at startup
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Tue, 21 Feb 2017 13:48:21 +0000 (14:48 +0100)
committerSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Fri, 24 Feb 2017 19:27:07 +0000 (20:27 +0100)
because of unresolved dependency DatabaseMigration and that now safemode can occur even non startup-leader nodes

server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java
server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java

index 3c1381b55d3bcca1c9ac6d441402c45797e2a9b2..c95b279cb2db6517549ab448b7fc54f79a3c38d0 100644 (file)
@@ -135,16 +135,36 @@ public abstract class PlatformLevel {
    *
    * @throws IllegalStateException if called from PlatformLevel1, when cluster settings are not loaded
    */
-  protected void addIfStartupLeader(Object... objects) {
-    Optional<Cluster> cluster = getOptional(Cluster.class);
-    checkState(cluster.isPresent(), "Cluster settings not loaded yet");
-    if (cluster.get().isStartupLeader()) {
-      for (Object object : objects) {
-        if (object != null) {
-          container.addComponent(object, true);
-        }
+  protected AddIfStartupLeader addIfStartupLeader(Object... objects) {
+    AddIfStartupLeader res = new AddIfStartupLeader(isStartupLeader());
+    res.ifAdd(objects);
+    return res;
+  }
+
+  public final class AddIfStartupLeader {
+    private final boolean startupLeader;
+
+    private AddIfStartupLeader(boolean startupLeader) {
+      this.startupLeader = startupLeader;
+    }
+
+    private void ifAdd(Object... objects) {
+      if (startupLeader) {
+        PlatformLevel.this.add(objects);
       }
     }
+
+    public void otherwiseAdd(Object... objects) {
+      if (!startupLeader) {
+        PlatformLevel.this.add(objects);
+      }
+    }
+  }
+
+  private boolean isStartupLeader() {
+    Optional<Cluster> cluster = getOptional(Cluster.class);
+    checkState(cluster.isPresent(), "Cluster settings not loaded yet");
+    return cluster.get().isStartupLeader();
   }
 
   protected void addAll(Collection<?> objects) {
index 976e9a8dd9c2f5cf37eb54472a8e68dfc74e13bc..23208b88d334bb1dc29b3d43aefbb9c951c56de8 100644 (file)
@@ -24,6 +24,7 @@ import org.sonar.server.platform.ServerImpl;
 import org.sonar.server.platform.db.migration.AutoDbMigration;
 import org.sonar.server.platform.db.migration.DatabaseMigrationImpl;
 import org.sonar.server.platform.db.migration.MigrationEngineModule;
+import org.sonar.server.platform.db.migration.NoopDatabaseMigrationImpl;
 import org.sonar.server.platform.web.WebPagesFilter;
 import org.sonar.server.platform.ws.DbMigrationStatusAction;
 import org.sonar.server.platform.ws.IndexAction;
@@ -64,9 +65,10 @@ public class PlatformLevelSafeMode extends PlatformLevel {
       WebServiceFilter.class,
 
       NoopDefaultOrganizationCache.class);
-    add(DatabaseMigrationImpl.class);
     addIfStartupLeader(
+      DatabaseMigrationImpl.class,
       MigrationEngineModule.class,
-      AutoDbMigration.class);
+      AutoDbMigration.class)
+        .otherwiseAdd(NoopDatabaseMigrationImpl.class);
   }
 }