From bc34f7ed9b8eb7aa778dd7510227ae2ee29863e8 Mon Sep 17 00:00:00 2001 From: Matthias Oesterheld <33032967+moesterheld@users.noreply.github.com> Date: Wed, 17 Jul 2024 14:40:05 +0200 Subject: [PATCH] Datanode migration: fix invalid hostname (#19894) * silently remove trailing slash from hostname (#19884) * move check up further --- .../migration/state/actions/MigrationActionsImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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!