diff options
author | Simon Brandhof <simon.brandhof@sonarsource.com> | 2016-05-18 16:02:12 +0200 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@sonarsource.com> | 2016-05-19 15:35:58 +0200 |
commit | 4478d4093e636acf7811e96b08fb9ecdbe22eb0f (patch) | |
tree | 18af88b01b82f3d655becd07a87106f5dfb3dfba /server | |
parent | bc9b9edb7c887a74c47c59d615c48ae7024ab392 (diff) | |
download | sonarqube-4478d4093e636acf7811e96b08fb9ecdbe22eb0f.tar.gz sonarqube-4478d4093e636acf7811e96b08fb9ecdbe22eb0f.zip |
SONAR-7649 do not repair db collation outside migration
Diffstat (limited to 'server')
-rw-r--r-- | server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCharsetAtStartup.java | 13 | ||||
-rw-r--r-- | server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCollationDuringMigration.java (renamed from server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCharsetAfterMigration.java) | 28 | ||||
-rw-r--r-- | server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java | 2 | ||||
-rw-r--r-- | server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java | 2 | ||||
-rw-r--r-- | server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCharsetAtStartupTest.java | 22 | ||||
-rw-r--r-- | server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCollationDuringMigrationTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCharsetAfterMigrationTest.java) | 31 |
6 files changed, 61 insertions, 37 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCharsetAtStartup.java b/server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCharsetAtStartup.java index 966e676a509..91da7bd33c0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCharsetAtStartup.java +++ b/server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCharsetAtStartup.java @@ -23,6 +23,8 @@ import org.picocontainer.Startable; import org.sonar.api.platform.ServerUpgradeStatus; import org.sonar.db.charset.DatabaseCharsetChecker; +import static org.sonar.db.charset.DatabaseCharsetChecker.Flag.ENFORCE_UTF8; + /** * Checks charset of all existing database columns at startup, before executing db migrations. This requires * to be defined in platform level 2 ({@link org.sonar.server.platform.platformlevel.PlatformLevel2}). @@ -48,11 +50,10 @@ public class CheckDatabaseCharsetAtStartup implements Startable { } protected final void check() { - boolean enforceUtf8 = getUpgradeStatus().isFreshInstall(); - charsetChecker.check(enforceUtf8); - } - - protected final ServerUpgradeStatus getUpgradeStatus() { - return upgradeStatus; + if (upgradeStatus.isFreshInstall()) { + charsetChecker.check(ENFORCE_UTF8); + } else if (!upgradeStatus.isUpgraded()) { + charsetChecker.check(); + } } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCharsetAfterMigration.java b/server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCollationDuringMigration.java index ce7c2ea6257..ebb5a5993cb 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCharsetAfterMigration.java +++ b/server/sonar-server/src/main/java/org/sonar/server/db/CheckDatabaseCollationDuringMigration.java @@ -19,23 +19,37 @@ */ package org.sonar.server.db; +import org.picocontainer.Startable; import org.sonar.api.platform.ServerUpgradeStatus; import org.sonar.db.charset.DatabaseCharsetChecker; +import static org.sonar.db.charset.DatabaseCharsetChecker.Flag.AUTO_REPAIR_COLLATION; +import static org.sonar.db.charset.DatabaseCharsetChecker.Flag.ENFORCE_UTF8; + /** - * Checks charset of all database columns when at least one db migration has been executed. This requires - * to be defined in platform level 3 ({@link org.sonar.server.platform.platformlevel.PlatformLevel3}). + * Checks charset of all database columns when at least one db migration has been executed. */ -public class CheckDatabaseCharsetAfterMigration extends CheckDatabaseCharsetAtStartup { +public class CheckDatabaseCollationDuringMigration implements Startable { + + private final ServerUpgradeStatus upgradeStatus; + private final DatabaseCharsetChecker charsetChecker; - public CheckDatabaseCharsetAfterMigration(ServerUpgradeStatus upgradeStatus, DatabaseCharsetChecker charsetChecker) { - super(upgradeStatus, charsetChecker); + public CheckDatabaseCollationDuringMigration(ServerUpgradeStatus upgradeStatus, DatabaseCharsetChecker charsetChecker) { + this.upgradeStatus = upgradeStatus; + this.charsetChecker = charsetChecker; } @Override public void start() { - if (getUpgradeStatus().isFreshInstall() || getUpgradeStatus().isUpgraded()) { - check(); + if (upgradeStatus.isFreshInstall()) { + charsetChecker.check(ENFORCE_UTF8, AUTO_REPAIR_COLLATION); + } else if (upgradeStatus.isUpgraded()) { + charsetChecker.check(AUTO_REPAIR_COLLATION); } } + + @Override + public void stop() { + // do nothing + } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java index 060eae8ee9c..74c62e0d6d1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java @@ -21,7 +21,6 @@ package org.sonar.server.platform.platformlevel; import org.sonar.api.utils.UriReader; import org.sonar.core.util.DefaultHttpDownloader; -import org.sonar.server.db.CheckDatabaseCharsetAfterMigration; import org.sonar.server.platform.PersistentSettings; import org.sonar.server.platform.ServerIdGenerator; import org.sonar.server.platform.ServerIdLoader; @@ -35,7 +34,6 @@ public class PlatformLevel3 extends PlatformLevel { @Override protected void configureLevel() { add( - CheckDatabaseCharsetAfterMigration.class, PersistentSettings.class, ServerMetadataPersister.class, DefaultHttpDownloader.class, diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java index 662d46becab..ae8a6c8ee43 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java @@ -20,6 +20,7 @@ package org.sonar.server.platform.platformlevel; import org.sonar.server.app.ProcessCommandWrapper; +import org.sonar.server.db.CheckDatabaseCollationDuringMigration; import org.sonar.server.es.IndexerStartupTask; import org.sonar.server.issue.filter.RegisterIssueFilters; import org.sonar.server.platform.ServerLifecycleNotifier; @@ -49,6 +50,7 @@ public class PlatformLevelStartup extends PlatformLevel { @Override protected void configureLevel() { add( + CheckDatabaseCollationDuringMigration.class, IndexerStartupTask.class, RegisterMetrics.class, RegisterQualityGates.class, diff --git a/server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCharsetAtStartupTest.java b/server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCharsetAtStartupTest.java index 4b2d4dd903b..16d7ec302b8 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCharsetAtStartupTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCharsetAtStartupTest.java @@ -19,14 +19,15 @@ */ package org.sonar.server.db; +import org.junit.After; import org.junit.Test; import org.sonar.api.platform.ServerUpgradeStatus; import org.sonar.db.charset.DatabaseCharsetChecker; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import static org.sonar.db.charset.DatabaseCharsetChecker.Flag.ENFORCE_UTF8; public class CheckDatabaseCharsetAtStartupTest { @@ -34,23 +35,26 @@ public class CheckDatabaseCharsetAtStartupTest { DatabaseCharsetChecker charsetChecker = mock(DatabaseCharsetChecker.class); CheckDatabaseCharsetAtStartup underTest = new CheckDatabaseCharsetAtStartup(upgradeStatus, charsetChecker); + @After + public void tearDown() { + underTest.stop(); + } + @Test - public void enforces_utf8_if_fresh_install() { + public void enforce_utf8_if_fresh_install() { when(upgradeStatus.isFreshInstall()).thenReturn(true); + underTest.start(); - verify(charsetChecker).check(true); - underTest.stop(); - verifyNoMoreInteractions(charsetChecker); + verify(charsetChecker).check(ENFORCE_UTF8); } @Test - public void does_not_enforce_utf8_if_not_fresh_install() { + public void do_not_enforce_utf8_and_do_not_repair_at_startup_if_not_fresh_install() { when(upgradeStatus.isFreshInstall()).thenReturn(false); + underTest.start(); - verify(charsetChecker).check(false); - underTest.stop(); - verifyNoMoreInteractions(charsetChecker); + verify(charsetChecker).check(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCharsetAfterMigrationTest.java b/server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCollationDuringMigrationTest.java index f2f014aedf6..fdb4ef283a8 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCharsetAfterMigrationTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCollationDuringMigrationTest.java @@ -19,49 +19,54 @@ */ package org.sonar.server.db; +import org.junit.After; import org.junit.Test; import org.sonar.api.platform.ServerUpgradeStatus; import org.sonar.db.charset.DatabaseCharsetChecker; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; +import static org.sonar.db.charset.DatabaseCharsetChecker.Flag.AUTO_REPAIR_COLLATION; +import static org.sonar.db.charset.DatabaseCharsetChecker.Flag.ENFORCE_UTF8; -public class CheckDatabaseCharsetAfterMigrationTest { +public class CheckDatabaseCollationDuringMigrationTest { ServerUpgradeStatus upgradeStatus = mock(ServerUpgradeStatus.class); DatabaseCharsetChecker charsetChecker = mock(DatabaseCharsetChecker.class); - CheckDatabaseCharsetAfterMigration underTest = new CheckDatabaseCharsetAfterMigration(upgradeStatus, charsetChecker); + CheckDatabaseCollationDuringMigration underTest = new CheckDatabaseCollationDuringMigration(upgradeStatus, charsetChecker); + + @After + public void tearDown() { + underTest.stop(); + } @Test - public void enforces_utf8_if_fresh_install() { + public void enforce_utf8_and_optionally_repair_collation_if_fresh_install() { when(upgradeStatus.isFreshInstall()).thenReturn(true); + underTest.start(); - verify(charsetChecker).check(true); - underTest.stop(); - verifyNoMoreInteractions(charsetChecker); + verify(charsetChecker).check(ENFORCE_UTF8, AUTO_REPAIR_COLLATION); } @Test - public void checks_charset_but_does_not_enforce_utf8_if_db_upgrade() { + public void repair_collation_but_do_not_enforce_utf8_if_db_upgrade() { when(upgradeStatus.isFreshInstall()).thenReturn(false); when(upgradeStatus.isUpgraded()).thenReturn(true); + underTest.start(); - verify(charsetChecker).check(false); - underTest.stop(); - verifyNoMoreInteractions(charsetChecker); + verify(charsetChecker).check(AUTO_REPAIR_COLLATION); } @Test - public void does_nothing_if_no_db_changes() { + public void do_nothing_if_no_db_changes() { when(upgradeStatus.isFreshInstall()).thenReturn(false); when(upgradeStatus.isUpgraded()).thenReturn(false); underTest.start(); - underTest.stop(); + verifyZeroInteractions(charsetChecker); } |