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 50ad280fe33b..fe03303003f1 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 @@ -41,6 +41,7 @@ import org.graylog2.plugin.certificates.RenewalPolicy; import org.graylog2.plugin.cluster.ClusterConfigService; import org.graylog2.rest.resources.datanodes.DatanodeRestApiProxy; +import org.graylog2.shared.utilities.StringUtils; import org.graylog2.storage.providers.ElasticsearchVersionProvider; import org.graylog2.system.processing.control.ClusterProcessingControl; import org.graylog2.system.processing.control.ClusterProcessingControlFactory; @@ -256,7 +257,11 @@ public boolean dataNodeStartupFinished() { @Override public void startRemoteReindex() { final String allowlist = getStateMachineContext().getActionArgumentOpt("allowlist", String.class).orElse(null); - final URI hostname = Objects.requireNonNull(URI.create(getStateMachineContext().getActionArgument("hostname", String.class)), "hostname has to be provided"); + String host = StringUtils.requireNonBlank(getStateMachineContext().getActionArgument("hostname", String.class), "hostname has to be provided"); + if (host.endsWith("/")) { + host = host.substring(0, host.length() - 1); + } + final URI hostname = URI.create(host); final String user = getStateMachineContext().getActionArgumentOpt("user", String.class).orElse(null); final String password = getStateMachineContext().getActionArgumentOpt("password", String.class).orElse(null); final List indices = getStateMachineContext().getActionArgumentOpt("indices", List.class).orElse(Collections.emptyList()); // todo: generics!