Search in sources :

Example 1 with RegisteredMigrationStep

use of org.sonar.server.platform.db.migration.step.RegisteredMigrationStep in project sonarqube by SonarSource.

the class MigrationEngineImpl method execute.

@Override
public void execute() {
    MigrationContainer migrationContainer = new MigrationContainerImpl(serverContainer, MigrationStepsExecutorImpl.class);
    boolean blueGreen = configuration.getBoolean(ProcessProperties.Property.BLUE_GREEN_ENABLED.getKey()).orElse(false);
    try {
        MigrationStepsExecutor stepsExecutor = migrationContainer.getComponentByType(MigrationStepsExecutor.class);
        Optional<Long> lastMigrationNumber = migrationHistory.getLastMigrationNumber();
        List<RegisteredMigrationStep> steps = lastMigrationNumber.map(i -> migrationSteps.readFrom(i + 1)).orElse(migrationSteps.readAll());
        if (blueGreen) {
            ensureSupportBlueGreen(steps);
        }
        stepsExecutor.execute(steps);
    } finally {
        migrationContainer.cleanup();
    }
}
Also used : SupportsBlueGreen(org.sonar.server.platform.db.migration.SupportsBlueGreen) MigrationHistory(org.sonar.server.platform.db.migration.history.MigrationHistory) AnnotationUtils(org.sonar.api.utils.AnnotationUtils) SpringComponentContainer(org.sonar.core.platform.SpringComponentContainer) String.format(java.lang.String.format) MigrationStepsExecutorImpl(org.sonar.server.platform.db.migration.step.MigrationStepsExecutorImpl) List(java.util.List) ProcessProperties(org.sonar.process.ProcessProperties) MigrationStepsExecutor(org.sonar.server.platform.db.migration.step.MigrationStepsExecutor) Configuration(org.sonar.api.config.Configuration) Optional(java.util.Optional) MigrationSteps(org.sonar.server.platform.db.migration.step.MigrationSteps) RegisteredMigrationStep(org.sonar.server.platform.db.migration.step.RegisteredMigrationStep) MigrationStepsExecutor(org.sonar.server.platform.db.migration.step.MigrationStepsExecutor) RegisteredMigrationStep(org.sonar.server.platform.db.migration.step.RegisteredMigrationStep)

Example 2 with RegisteredMigrationStep

use of org.sonar.server.platform.db.migration.step.RegisteredMigrationStep in project sonarqube by SonarSource.

the class MigrationHistoryMeddler method meddle.

public void meddle(MigrationHistory migrationHistory) {
    // change last migration number on specific cases
    migrationHistory.getLastMigrationNumber().ifPresent(migrationNumber -> {
        Long newMigrationNumber = meddledSteps.get(migrationNumber);
        if (newMigrationNumber != null) {
            RegisteredMigrationStep registeredMigrationStep = migrationSteps.readFrom(newMigrationNumber).get(0);
            migrationHistory.done(registeredMigrationStep);
        }
    });
}
Also used : RegisteredMigrationStep(org.sonar.server.platform.db.migration.step.RegisteredMigrationStep)

Example 3 with RegisteredMigrationStep

use of org.sonar.server.platform.db.migration.step.RegisteredMigrationStep in project sonarqube by SonarSource.

the class MigrationEngineImplTest method execute_execute_all_steps_of_there_is_no_last_migration_number.

@Test
public void execute_execute_all_steps_of_there_is_no_last_migration_number() {
    when(migrationHistory.getLastMigrationNumber()).thenReturn(Optional.empty());
    List<RegisteredMigrationStep> steps = singletonList(new RegisteredMigrationStep(1, "doo", TestMigrationStep.class));
    when(migrationSteps.readAll()).thenReturn(steps);
    underTest.execute();
    verify(migrationSteps, times(2)).readAll();
    assertThat(stepRegistry.stepRan).isTrue();
}
Also used : RegisteredMigrationStep(org.sonar.server.platform.db.migration.step.RegisteredMigrationStep) Test(org.junit.Test)

Example 4 with RegisteredMigrationStep

use of org.sonar.server.platform.db.migration.step.RegisteredMigrationStep in project sonarqube by SonarSource.

the class MigrationEngineImplTest method fail_blue_green_execution_if_some_migrations_are_not_compatible.

@Test
public void fail_blue_green_execution_if_some_migrations_are_not_compatible() {
    settings.setProperty(ProcessProperties.Property.BLUE_GREEN_ENABLED.getKey(), true);
    when(migrationHistory.getLastMigrationNumber()).thenReturn(Optional.of(50L));
    List<RegisteredMigrationStep> steps = asList(new RegisteredMigrationStep(1, "foo", TestBlueGreenMigrationStep.class), new RegisteredMigrationStep(2, "bar", TestMigrationStep.class));
    when(migrationSteps.readFrom(51)).thenReturn(steps);
    try {
        underTest.execute();
        fail();
    } catch (IllegalStateException e) {
        assertThat(e).hasMessage("All migrations canceled. #2 does not support blue/green deployment: bar");
        assertThat(stepRegistry.stepRan).isFalse();
    }
}
Also used : RegisteredMigrationStep(org.sonar.server.platform.db.migration.step.RegisteredMigrationStep) Test(org.junit.Test)

Example 5 with RegisteredMigrationStep

use of org.sonar.server.platform.db.migration.step.RegisteredMigrationStep in project sonarqube by SonarSource.

the class MigrationEngineImplTest method execute_steps_in_blue_green_mode.

@Test
public void execute_steps_in_blue_green_mode() {
    settings.setProperty(ProcessProperties.Property.BLUE_GREEN_ENABLED.getKey(), true);
    when(migrationHistory.getLastMigrationNumber()).thenReturn(Optional.of(50L));
    List<RegisteredMigrationStep> steps = singletonList(new RegisteredMigrationStep(1, "doo", TestBlueGreenMigrationStep.class));
    when(migrationSteps.readFrom(51)).thenReturn(steps);
    when(migrationSteps.readAll()).thenReturn(steps);
    underTest.execute();
    verify(migrationSteps).readFrom(51);
    assertThat(stepRegistry.stepRan).isTrue();
}
Also used : RegisteredMigrationStep(org.sonar.server.platform.db.migration.step.RegisteredMigrationStep) Test(org.junit.Test)

Aggregations

RegisteredMigrationStep (org.sonar.server.platform.db.migration.step.RegisteredMigrationStep)8 Test (org.junit.Test)6 List (java.util.List)2 Optional (java.util.Optional)2 MigrationStep (org.sonar.server.platform.db.migration.step.MigrationStep)2 MigrationSteps (org.sonar.server.platform.db.migration.step.MigrationSteps)2 DataProvider (com.tngtech.java.junit.dataprovider.DataProvider)1 DataProviderRunner (com.tngtech.java.junit.dataprovider.DataProviderRunner)1 UseDataProvider (com.tngtech.java.junit.dataprovider.UseDataProvider)1 String.format (java.lang.String.format)1 Random (java.util.Random)1 Collectors (java.util.stream.Collectors)1 IntStream (java.util.stream.IntStream)1 RunWith (org.junit.runner.RunWith)1 Mockito.mock (org.mockito.Mockito.mock)1 Mockito.verify (org.mockito.Mockito.verify)1 Mockito.verifyNoMoreInteractions (org.mockito.Mockito.verifyNoMoreInteractions)1 Mockito.when (org.mockito.Mockito.when)1 Configuration (org.sonar.api.config.Configuration)1 AnnotationUtils (org.sonar.api.utils.AnnotationUtils)1