aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2016-05-18 16:02:12 +0200
committerSimon Brandhof <simon.brandhof@sonarsource.com>2016-05-19 15:35:58 +0200
commit4478d4093e636acf7811e96b08fb9ecdbe22eb0f (patch)
tree18af88b01b82f3d655becd07a87106f5dfb3dfba /server
parentbc9b9edb7c887a74c47c59d615c48ae7024ab392 (diff)
downloadsonarqube-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.java13
-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.java2
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/db/CheckDatabaseCharsetAtStartupTest.java22
-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);
}