From eefc838e05b0c44d1efdb7ebb5a4ab4a81edd032 Mon Sep 17 00:00:00 2001 From: Jan Heise Date: Fri, 16 Feb 2024 09:12:39 +0100 Subject: [PATCH] DataNode: Adding the additional DataNode start step (#18270) * adding the additional datanode start step * switch to correct guard in remote reindexing * fixing test * moving steps a bit more, fixing tests * changing startup * changing startup, fixing states etc. * fix test * fix: do not set preflight result to FINISHED for reindexing branch --------- Co-authored-by: Matthias Oesterheld --- .../DataNodeConfigurationPeriodical.java | 1 + .../management/OpensearchProcessService.java | 2 +- .../state/actions/MigrationActions.java | 7 ++++ .../state/actions/MigrationActionsImpl.java | 31 ++++++++++++++-- .../state/machine/MigrationState.java | 4 ++- .../machine/MigrationStateMachineBuilder.java | 23 +++++++----- .../state/machine/MigrationStep.java | 4 ++- ...ylogCertificateProvisioningPeriodical.java | 8 +++++ .../preflight/DataNodeProvisioningConfig.java | 5 +++ .../machine/MigrationActionsAdapter.java | 14 ++++++++ .../MigrationStateMachineBuilderTest.java | 35 ++++++++++++++----- .../MigrationStateMachineImplTest.java | 2 +- 12 files changed, 112 insertions(+), 24 deletions(-) diff --git a/data-node/src/main/java/org/graylog/datanode/bootstrap/preflight/DataNodeConfigurationPeriodical.java b/data-node/src/main/java/org/graylog/datanode/bootstrap/preflight/DataNodeConfigurationPeriodical.java index d141f9f46e..4b1923dd4d 100644 --- a/data-node/src/main/java/org/graylog/datanode/bootstrap/preflight/DataNodeConfigurationPeriodical.java +++ b/data-node/src/main/java/org/graylog/datanode/bootstrap/preflight/DataNodeConfigurationPeriodical.java @@ -112,6 +112,7 @@ public class DataNodeConfigurationPeriodical extends Periodical { switch (state) { case CONFIGURED -> writeCsr(c); case SIGNED -> readSignedCertificate(c); + case STARTUP_TRIGGER -> dataNodeProvisioningService.changeState(nodeId.getNodeId(), DataNodeProvisioningConfig.State.STARTUP_REQUESTED); } }); } diff --git a/data-node/src/main/java/org/graylog/datanode/management/OpensearchProcessService.java b/data-node/src/main/java/org/graylog/datanode/management/OpensearchProcessService.java index 7443c2086f..8829925135 100644 --- a/data-node/src/main/java/org/graylog/datanode/management/OpensearchProcessService.java +++ b/data-node/src/main/java/org/graylog/datanode/management/OpensearchProcessService.java @@ -125,7 +125,7 @@ public class OpensearchProcessService extends AbstractIdleService implements Pro case STARTUP_REQUESTED -> startUp(); case STORED -> { configure(); - dataNodeProvisioningService.changeState(event.nodeId(), DataNodeProvisioningConfig.State.STARTUP_REQUESTED); + dataNodeProvisioningService.changeState(event.nodeId(), DataNodeProvisioningConfig.State.STARTUP_PREPARED); } } } diff --git a/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/actions/MigrationActions.java b/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/actions/MigrationActions.java index e801ed970b..90a9db5072 100644 --- a/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/actions/MigrationActions.java +++ b/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/actions/MigrationActions.java @@ -45,11 +45,18 @@ public interface MigrationActions { void provisionDataNodes(); + void provisionAndStartDataNodes(); + boolean provisioningFinished(); + void startDataNodes(); + void resetMigration(); + boolean dataNodeStartupFinished(); + void setStateMachineContext(MigrationStateMachineContext context); MigrationStateMachineContext getStateMachineContext(); + } diff --git a/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/actions/MigrationActionsImpl.java b/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/actions/MigrationActionsImpl.java index 0e005d0445..a88a5852d1 100644 --- a/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/actions/MigrationActionsImpl.java +++ b/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/actions/MigrationActionsImpl.java @@ -22,6 +22,8 @@ import org.graylog.plugins.views.storage.migration.state.machine.MigrationStateM import org.graylog.plugins.views.storage.migration.state.persistence.DatanodeMigrationConfiguration; import org.graylog.security.certutil.CaService; import org.graylog.security.certutil.ca.exceptions.KeyStoreStorageException; +import org.graylog2.bootstrap.preflight.PreflightConfigResult; +import org.graylog2.bootstrap.preflight.PreflightConfigService; import org.graylog2.cluster.nodes.DataNodeDto; import org.graylog2.cluster.nodes.DataNodeStatus; import org.graylog2.cluster.nodes.NodeService; @@ -46,18 +48,21 @@ public class MigrationActionsImpl implements MigrationActions { private final NodeService nodeService; private final CaService caService; private final DataNodeProvisioningService dataNodeProvisioningService; + private final PreflightConfigService preflightConfigService; private MigrationStateMachineContext stateMachineContext; @Inject public MigrationActionsImpl(final ClusterConfigService clusterConfigService, NodeService nodeService, final CaService caService, DataNodeProvisioningService dataNodeProvisioningService, - final ClusterProcessingControlFactory clusterProcessingControlFactory) { + final ClusterProcessingControlFactory clusterProcessingControlFactory, + final PreflightConfigService preflightConfigService) { this.clusterConfigService = clusterConfigService; this.nodeService = nodeService; this.caService = caService; this.dataNodeProvisioningService = dataNodeProvisioningService; - this.clusterProcessingControlFactory = clusterProcessingControlFactory; + this.clusterProcessingControlFactory = clusterProcessingControlFactory; + this.preflightConfigService = preflightConfigService; } @Override @@ -146,12 +151,34 @@ public class MigrationActionsImpl implements MigrationActions { @Override public void provisionDataNodes() { + // if we start provisioning DataNodes via the migration, Preflight is definitely done/no option anymore + var preflight = preflightConfigService.getPreflightConfigResult(); + if(preflight == null || !preflight.equals(PreflightConfigResult.FINISHED)) { + preflightConfigService.setConfigResult(PreflightConfigResult.FINISHED); + } + final Map activeDataNodes = nodeService.allActive(); + activeDataNodes.values().forEach(node -> dataNodeProvisioningService.changeState(node.getNodeId(), DataNodeProvisioningConfig.State.CONFIGURED)); + } + + @Override + public void provisionAndStartDataNodes() { final Map activeDataNodes = nodeService.allActive(); activeDataNodes.values().forEach(node -> dataNodeProvisioningService.changeState(node.getNodeId(), DataNodeProvisioningConfig.State.CONFIGURED)); } @Override public boolean provisioningFinished() { + return nodeService.allActive().values().stream().allMatch(node -> node.getDataNodeStatus() == DataNodeStatus.PREPARED); + } + + @Override + public void startDataNodes() { + final Map activeDataNodes = nodeService.allActive(); + activeDataNodes.values().forEach(node -> dataNodeProvisioningService.changeState(node.getNodeId(), DataNodeProvisioningConfig.State.STARTUP_REQUESTED)); + } + + @Override + public boolean dataNodeStartupFinished() { return nodeService.allActive().values().stream().allMatch(node -> node.getDataNodeStatus() == DataNodeStatus.AVAILABLE); } diff --git a/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationState.java b/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationState.java index d8b8952bcb..7ddd9896a3 100644 --- a/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationState.java +++ b/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationState.java @@ -34,7 +34,9 @@ public enum MigrationState { PROVISION_ROLLING_UPGRADE_NODES_WITH_CERTIFICATES, PROVISION_ROLLING_UPGRADE_NODES_RUNNING, JOURNAL_SIZE_DOWNTIME_WARNING, - MESSAGE_PROCESSING_STOP_REPLACE_CLUSTER_AND_MP_RESTART, + MESSAGE_PROCESSING_STOP, + REPLACE_CLUSTER, + MESSAGE_PROCESSING_RESTART, MANUALLY_REMOVE_OLD_CONNECTION_STRING_FROM_CONFIG, FAILED, DIRECTORY_COMPATIBILITY_CHECK_PAGE2, FINISHED diff --git a/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineBuilder.java b/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineBuilder.java index fc981b70f6..dc18bcf15b 100644 --- a/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineBuilder.java +++ b/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineBuilder.java @@ -71,10 +71,10 @@ public class MigrationStateMachineBuilder { }); config.configure(MigrationState.PROVISION_DATANODE_CERTIFICATES_PAGE) - .permit(MigrationStep.PROVISION_DATANODE_CERTIFICATES, MigrationState.PROVISION_DATANODE_CERTIFICATES_RUNNING, migrationActions::provisionDataNodes); + .permit(MigrationStep.PROVISION_DATANODE_CERTIFICATES, MigrationState.PROVISION_DATANODE_CERTIFICATES_RUNNING, migrationActions::provisionAndStartDataNodes); config.configure(MigrationState.PROVISION_DATANODE_CERTIFICATES_RUNNING) - .permitIf(MigrationStep.SHOW_DATA_MIGRATION_QUESTION, MigrationState.EXISTING_DATA_MIGRATION_QUESTION_PAGE, migrationActions::provisioningFinished); + .permitIf(MigrationStep.SHOW_DATA_MIGRATION_QUESTION, MigrationState.EXISTING_DATA_MIGRATION_QUESTION_PAGE, migrationActions::dataNodeStartupFinished); config.configure(MigrationState.EXISTING_DATA_MIGRATION_QUESTION_PAGE) .permit(MigrationStep.SHOW_MIGRATE_EXISTING_DATA, MigrationState.MIGRATE_EXISTING_DATA) @@ -84,6 +84,9 @@ public class MigrationStateMachineBuilder { .onEntry(migrationActions::reindexOldData) .permitIf(MigrationStep.SHOW_ASK_TO_SHUTDOWN_OLD_CLUSTER, MigrationState.ASK_TO_SHUTDOWN_OLD_CLUSTER, migrationActions::reindexingFinished); + config.configure(MigrationState.ASK_TO_SHUTDOWN_OLD_CLUSTER) + .permitIf(MigrationStep.CONFIRM_OLD_CLUSTER_STOPPED, MigrationState.MANUALLY_REMOVE_OLD_CONNECTION_STRING_FROM_CONFIG, migrationActions::isOldClusterStopped); + // in place / rolling upgrade branch of the migration config.configure(MigrationState.ROLLING_UPGRADE_MIGRATION_WELCOME_PAGE) .onEntry(migrationActions::rollingUpgradeSelected) @@ -99,17 +102,19 @@ public class MigrationStateMachineBuilder { .permitIf(MigrationStep.CALCULATE_JOURNAL_SIZE, MigrationState.JOURNAL_SIZE_DOWNTIME_WARNING, migrationActions::provisioningFinished); config.configure(MigrationState.JOURNAL_SIZE_DOWNTIME_WARNING) - .permit(MigrationStep.SHOW_STOP_PROCESSING_PAGE, MigrationState.MESSAGE_PROCESSING_STOP_REPLACE_CLUSTER_AND_MP_RESTART); + .permit(MigrationStep.SHOW_STOP_PROCESSING_PAGE, MigrationState.MESSAGE_PROCESSING_STOP); - config.configure(MigrationState.MESSAGE_PROCESSING_STOP_REPLACE_CLUSTER_AND_MP_RESTART) + config.configure(MigrationState.MESSAGE_PROCESSING_STOP) .onEntry(migrationActions::stopMessageProcessing) - .onExit(migrationActions::startMessageProcessing) - .permit(MigrationStep.SHOW_ASK_TO_SHUTDOWN_OLD_CLUSTER, MigrationState.ASK_TO_SHUTDOWN_OLD_CLUSTER); + .permit(MigrationStep.SHOW_ROLLING_UPGRADE_ASK_TO_SHUTDOWN_OLD_CLUSTER, MigrationState.REPLACE_CLUSTER, migrationActions::startDataNodes); + + config.configure(MigrationState.REPLACE_CLUSTER) + .permit(MigrationStep.SHOW_ASK_TO_RESTART_MESSAGE_PROCESSING, MigrationState.MESSAGE_PROCESSING_RESTART, migrationActions::startMessageProcessing); + + config.configure(MigrationState.MESSAGE_PROCESSING_RESTART) + .permit(MigrationStep.CONFIRM_ROLLING_UPGRADE_OLD_CLUSTER_STOPPED, MigrationState.MANUALLY_REMOVE_OLD_CONNECTION_STRING_FROM_CONFIG, migrationActions::isOldClusterStopped); // common cleanup steps - config.configure(MigrationState.ASK_TO_SHUTDOWN_OLD_CLUSTER) - .permitIf(MigrationStep.CONFIRM_OLD_CLUSTER_STOPPED, MigrationState.MANUALLY_REMOVE_OLD_CONNECTION_STRING_FROM_CONFIG, migrationActions::isOldClusterStopped); - config.configure(MigrationState.MANUALLY_REMOVE_OLD_CONNECTION_STRING_FROM_CONFIG) .permit(MigrationStep.CONFIRM_OLD_CONNECTION_STRING_FROM_CONFIG_REMOVED, MigrationState.FINISHED); diff --git a/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStep.java b/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStep.java index e831bd17f2..959c174f95 100644 --- a/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStep.java +++ b/graylog2-server/src/main/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStep.java @@ -29,6 +29,8 @@ public enum MigrationStep { SHOW_ASK_TO_SHUTDOWN_OLD_CLUSTER, SHOW_PROVISION_ROLLING_UPGRADE_NODES_WITH_CERTIFICATES, SHOW_STOP_PROCESSING_PAGE, + SHOW_ASK_TO_START_DATANODE_AND_REPlACE_CLUSTER, + SHOW_ASK_TO_RESTART_MESSAGE_PROCESSING, RUN_DIRECTORY_COMPATIBILITY_CHECK, DIRECTORY_COMPATIBILITY_CHECK_OK, SELECT_ROLLING_UPGRADE_MIGRATION, @@ -46,5 +48,5 @@ public enum MigrationStep { CONFIRM_OLD_CLUSTER_STOPPED, START_DATANODE_CLUSTER, START_MESSAGE_PROCESSING, - CONFIRM_OLD_CONNECTION_STRING_FROM_CONFIG_REMOVED, + CONFIRM_OLD_CONNECTION_STRING_FROM_CONFIG_REMOVED, SHOW_ROLLING_UPGRADE_ASK_TO_SHUTDOWN_OLD_CLUSTER, CONFIRM_ROLLING_UPGRADE_OLD_CLUSTER_STOPPED, } diff --git a/graylog2-server/src/main/java/org/graylog2/bootstrap/preflight/GraylogCertificateProvisioningPeriodical.java b/graylog2-server/src/main/java/org/graylog2/bootstrap/preflight/GraylogCertificateProvisioningPeriodical.java index 4adb886744..90594c4dc9 100644 --- a/graylog2-server/src/main/java/org/graylog2/bootstrap/preflight/GraylogCertificateProvisioningPeriodical.java +++ b/graylog2-server/src/main/java/org/graylog2/bootstrap/preflight/GraylogCertificateProvisioningPeriodical.java @@ -196,6 +196,14 @@ public class GraylogCertificateProvisioningPeriodical extends Periodical { notificationService.fixed(Notification.Type.DATA_NODE_NEEDS_PROVISIONING); } } + } else { + // if we're running through preflight and reach "STARTUP_PREPARED", we want to request STARTUP of OpenSearch + var preparedNodes = nodesByState.getOrDefault(DataNodeProvisioningConfig.State.STARTUP_PREPARED, List.of()); + if(!preparedNodes.isEmpty()) { + preparedNodes.forEach(c -> dataNodeProvisioningService.save(c.asStartupTrigger())); + // waiting one iteration after writing the new state, so we return from execution here and skip the rest of the periodical + return; + } } final var caKeystore = optKey.get(); diff --git a/graylog2-server/src/main/java/org/graylog2/cluster/preflight/DataNodeProvisioningConfig.java b/graylog2-server/src/main/java/org/graylog2/cluster/preflight/DataNodeProvisioningConfig.java index db2c916bc8..5e91b0fc91 100644 --- a/graylog2-server/src/main/java/org/graylog2/cluster/preflight/DataNodeProvisioningConfig.java +++ b/graylog2-server/src/main/java/org/graylog2/cluster/preflight/DataNodeProvisioningConfig.java @@ -38,6 +38,7 @@ public abstract class DataNodeProvisioningConfig { SIGNED, // Graylog CA signed the CSR STORED, // Certificate is combined with private key and stored in Mongo STARTUP_PREPARED, // All configuration has been written + STARTUP_TRIGGER, // Startup of the OpenSearch process requested from Graylog STARTUP_REQUESTED, // Startup of the OpenSearch process requested CONNECTING, // connectivity check running until error or connected CONNECTED, // DataNode started with the certificate @@ -110,6 +111,10 @@ public abstract class DataNodeProvisioningConfig { return toBuilder().state(State.STARTUP_REQUESTED).errorMsg(null).build(); } + public DataNodeProvisioningConfig asStartupTrigger() { + return toBuilder().state(State.STARTUP_TRIGGER).errorMsg(null).build(); + } + public abstract Builder toBuilder(); @AutoValue.Builder diff --git a/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationActionsAdapter.java b/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationActionsAdapter.java index 410a053488..378aa9d37a 100644 --- a/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationActionsAdapter.java +++ b/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationActionsAdapter.java @@ -31,6 +31,11 @@ public class MigrationActionsAdapter implements MigrationActions { } + @Override + public boolean dataNodeStartupFinished() { + return false; + } + public void setStateMachineContext(MigrationStateMachineContext context) { this.context = context; } @@ -104,8 +109,17 @@ public class MigrationActionsAdapter implements MigrationActions { public void provisionDataNodes() { } + @Override + public void provisionAndStartDataNodes() { + } + @Override public boolean provisioningFinished() { return false; } + + @Override + public void startDataNodes() { + + } } diff --git a/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineBuilderTest.java b/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineBuilderTest.java index fdfab63629..a1e1cd4d6b 100644 --- a/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineBuilderTest.java +++ b/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineBuilderTest.java @@ -143,14 +143,14 @@ public class MigrationStateMachineBuilderTest { public void testProvisionDatanodeCertificatesRunning() { StateMachine stateMachine = getStateMachine(MigrationState.PROVISION_DATANODE_CERTIFICATES_PAGE); stateMachine.fire(MigrationStep.PROVISION_DATANODE_CERTIFICATES); - verify(migrationActions, times(1)).provisionDataNodes(); + verify(migrationActions, times(1)).provisionAndStartDataNodes(); assertThat(stateMachine.getState()).isEqualTo(MigrationState.PROVISION_DATANODE_CERTIFICATES_RUNNING); assertThat(stateMachine.getPermittedTriggers()).isEmpty(); - verify(migrationActions, times(1)).provisioningFinished(); + verify(migrationActions, times(1)).dataNodeStartupFinished(); reset(migrationActions); - when(migrationActions.provisioningFinished()).thenReturn(true); + when(migrationActions.dataNodeStartupFinished()).thenReturn(true); assertThat(stateMachine.getPermittedTriggers()).containsOnly(MigrationStep.SHOW_DATA_MIGRATION_QUESTION); - verify(migrationActions, times(1)).provisioningFinished(); + verify(migrationActions, times(1)).dataNodeStartupFinished(); verifyNoMoreInteractions(migrationActions); } @@ -225,16 +225,33 @@ public class MigrationStateMachineBuilderTest { } @Test - public void testMessageProcessingStopReplaceClusterAndMpRestart() { + public void testMessageProcessingStop() { StateMachine stateMachine = getStateMachine(MigrationState.JOURNAL_SIZE_DOWNTIME_WARNING); stateMachine.fire(MigrationStep.SHOW_STOP_PROCESSING_PAGE); - assertThat(stateMachine.getState()).isEqualTo(MigrationState.MESSAGE_PROCESSING_STOP_REPLACE_CLUSTER_AND_MP_RESTART); + assertThat(stateMachine.getState()).isEqualTo(MigrationState.MESSAGE_PROCESSING_STOP); verify(migrationActions).stopMessageProcessing(); - assertThat(stateMachine.getPermittedTriggers()).containsOnly(MigrationStep.SHOW_ASK_TO_SHUTDOWN_OLD_CLUSTER); + assertThat(stateMachine.getPermittedTriggers()).containsOnly(MigrationStep.SHOW_ROLLING_UPGRADE_ASK_TO_SHUTDOWN_OLD_CLUSTER); verifyNoMoreInteractions(migrationActions); - stateMachine.fire(MigrationStep.SHOW_ASK_TO_SHUTDOWN_OLD_CLUSTER); + stateMachine.fire(MigrationStep.SHOW_ROLLING_UPGRADE_ASK_TO_SHUTDOWN_OLD_CLUSTER); + } + + @Test + public void testDataNodeClusterStart() { + StateMachine stateMachine = getStateMachine(MigrationState.MESSAGE_PROCESSING_STOP); + stateMachine.fire(MigrationStep.SHOW_ROLLING_UPGRADE_ASK_TO_SHUTDOWN_OLD_CLUSTER); + assertThat(stateMachine.getState()).isEqualTo(MigrationState.REPLACE_CLUSTER); + assertThat(stateMachine.getPermittedTriggers()).containsOnly(MigrationStep.SHOW_ASK_TO_RESTART_MESSAGE_PROCESSING); + stateMachine.fire(MigrationStep.SHOW_ASK_TO_RESTART_MESSAGE_PROCESSING); + } + + @Test + public void testMessageProcessingRestart() { + StateMachine stateMachine = getStateMachine(MigrationState.REPLACE_CLUSTER); + stateMachine.fire(MigrationStep.SHOW_ASK_TO_RESTART_MESSAGE_PROCESSING); + assertThat(stateMachine.getState()).isEqualTo(MigrationState.MESSAGE_PROCESSING_RESTART); verify(migrationActions).startMessageProcessing(); - verifyNoMoreInteractions(migrationActions); + assertThat(stateMachine.getPermittedTriggers()).containsOnly(MigrationStep.CONFIRM_ROLLING_UPGRADE_OLD_CLUSTER_STOPPED); + stateMachine.fire(MigrationStep.CONFIRM_ROLLING_UPGRADE_OLD_CLUSTER_STOPPED); } @Test diff --git a/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineImplTest.java b/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineImplTest.java index d811735241..5520d9e2d1 100644 --- a/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineImplTest.java +++ b/graylog2-server/src/test/java/org/graylog/plugins/views/storage/migration/state/machine/MigrationStateMachineImplTest.java @@ -150,7 +150,7 @@ class MigrationStateMachineImplTest { private static class TestMigrationActions extends MigrationActionsImpl { public TestMigrationActions() { - super(null, null, null, null, null); + super(null, null, null, null, null, null); } public void runTestFunction(Consumer testFunction) {