From a219c5a6860ce4cb317dc718288ab5af91e732fe Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Tue, 28 Apr 2015 15:57:49 +0200 Subject: [PATCH] SONAR-6366 SQ state check in RoR now uses Java DBMigration status use to be based on the RoR code handling the DB migration, it is now based on its Java replacement --- .../java/org/sonar/server/ui/JRubyFacade.java | 35 +++++++++++++++++++ .../app/controllers/application_controller.rb | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java b/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java index fd23abd532c..4c2ed9deef1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java @@ -43,10 +43,12 @@ import org.sonar.api.web.Page; import org.sonar.api.web.RubyRailsWebservice; import org.sonar.api.web.Widget; import org.sonar.core.persistence.Database; +import org.sonar.core.persistence.DatabaseVersion; import org.sonar.core.resource.ResourceIndexerDao; import org.sonar.core.timemachine.Periods; import org.sonar.process.ProcessProperties; import org.sonar.server.component.ComponentCleanerService; +import org.sonar.server.db.migrations.DatabaseMigration; import org.sonar.server.db.migrations.DatabaseMigrator; import org.sonar.server.measure.MeasureFilterEngine; import org.sonar.server.measure.MeasureFilterResult; @@ -375,4 +377,37 @@ public final class JRubyFacade { public String getPeriodAbbreviation(int periodIndex) { return get(Periods.class).abbreviation(periodIndex); } + + /** + * Checks whether the SQ instance is up and running (ie. not in safemode and with an up-to-date database). + *

+ * This method duplicates most of the logic code written in {@link org.sonar.server.platform.ws.UpgradesSystemWsAction} + * class. There is no need to refactor code to avoid this duplication since this method is only used by RoR code + * which will soon be replaced by pure JS code based on the {@link org.sonar.server.platform.ws.UpgradesSystemWsAction} + * WebService. + *

+ */ + public boolean isSonarAccessAllowed() { + ComponentContainer container = Platform.getInstance().getContainer(); + DatabaseMigration databaseMigration = container.getComponentByType(DatabaseMigration.class); + if (databaseMigration.status() == DatabaseMigration.Status.RUNNING + || databaseMigration.status() == DatabaseMigration.Status.FAILED) { + return false; + } + if (databaseMigration.status() == DatabaseMigration.Status.SUCCEEDED) { + return true; + } + + DatabaseVersion databaseVersion = container.getComponentByType(DatabaseVersion.class); + Integer currentVersion = databaseVersion.getVersion(); + if (currentVersion == null) { + throw new IllegalStateException("Version can not be retrieved from Database. Database is either blank or corrupted"); + } + if (currentVersion >= DatabaseVersion.LAST_VERSION) { + return true; + } + + Database database = container.getComponentByType(Database.class); + return !database.getDialect().supportsMigration(); + } } diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/application_controller.rb b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/application_controller.rb index 620279a51f8..d1c1682b30e 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/application_controller.rb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/controllers/application_controller.rb @@ -87,7 +87,7 @@ class ApplicationController < ActionController::Base protected def check_database_version - unless DatabaseMigrationManager.instance.is_sonar_access_allowed? + unless java_facade.isSonarAccessAllowed() redirect_to :controller => 'maintenance', :action => 'index' end end -- 2.39.5