mirror of
https://github.com/Graylog2/graylog2-server.git
synced 2026-03-13 09:32:21 +08:00
DataNode: RemoteReindex backend impl (#17485)
* Remote Reindex Backend * fixing missing classes * Added integration test for remote reindex migration --------- Co-authored-by: Tomas Dvorak <tomas.dvorak@graylog.com>
This commit is contained in:
@@ -26,6 +26,7 @@ import org.graylog2.cluster.nodes.DataNodeDto;
|
||||
import org.graylog2.cluster.nodes.NodeService;
|
||||
import org.graylog2.cluster.preflight.DataNodeProvisioningStateChangeEvent;
|
||||
import org.graylog2.datanode.DataNodeLifecycleEvent;
|
||||
import org.graylog2.datanode.RemoteReindexAllowlistEvent;
|
||||
import org.graylog2.plugin.system.NodeId;
|
||||
import org.graylog2.security.CustomCAX509TrustManager;
|
||||
import org.slf4j.Logger;
|
||||
@@ -34,6 +35,8 @@ import org.slf4j.LoggerFactory;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Provider;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Singleton
|
||||
public class OpensearchProcessService extends AbstractIdleService implements Provider<OpensearchProcess> {
|
||||
@@ -70,6 +73,16 @@ public class OpensearchProcessService extends AbstractIdleService implements Pro
|
||||
return process;
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@SuppressWarnings("unused")
|
||||
public void handleRemoteReindexAllowlistEvent(RemoteReindexAllowlistEvent event) {
|
||||
switch (event.action()) {
|
||||
case ADD ->
|
||||
startWithConfig(Map.of("reindex.remote.whitelist", event.host())); // , "action.auto_create_index", "false"));
|
||||
case REMOVE -> startWithConfig();
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@SuppressWarnings("unused")
|
||||
public void handlePreflightConfigEvent(DataNodeProvisioningStateChangeEvent event) {
|
||||
@@ -97,19 +110,42 @@ public class OpensearchProcessService extends AbstractIdleService implements Pro
|
||||
}
|
||||
|
||||
private void startWithConfig() {
|
||||
final OpensearchConfiguration config = configurationProvider.get();
|
||||
this.startWithConfig(Map.of());
|
||||
}
|
||||
|
||||
private void startWithConfig(Map<String, String> additionalConfig) {
|
||||
final OpensearchConfiguration original = configurationProvider.get();
|
||||
|
||||
final var finalAdditionalConfig = new HashMap<String, String>();
|
||||
finalAdditionalConfig.putAll(original.additionalConfiguration());
|
||||
finalAdditionalConfig.putAll(additionalConfig);
|
||||
|
||||
final var config = new OpensearchConfiguration(
|
||||
original.opensearchDistribution(),
|
||||
original.datanodeDirectories(),
|
||||
original.bindAddress(),
|
||||
original.hostname(),
|
||||
original.httpPort(),
|
||||
original.transportPort(),
|
||||
original.clusterName(),
|
||||
original.nodeName(),
|
||||
original.nodeRoles(),
|
||||
original.discoverySeedHosts(),
|
||||
original.opensearchSecurityConfiguration(),
|
||||
finalAdditionalConfig);
|
||||
|
||||
if (config.securityConfigured()) {
|
||||
this.process.startWithConfig(config);
|
||||
} else {
|
||||
|
||||
String noConfigMessage = """
|
||||
\n
|
||||
========================================================================================================
|
||||
It seems you are starting Data node for the first time. The current configuration is not sufficient to
|
||||
start the indexer process because a security configuration is missing. You have to either provide http
|
||||
and transport SSL certificates or use the Graylog preflight interface to configure this Data node remotely.
|
||||
========================================================================================================
|
||||
""";
|
||||
\n
|
||||
========================================================================================================
|
||||
It seems you are starting Data node for the first time. The current configuration is not sufficient to
|
||||
start the indexer process because a security configuration is missing. You have to either provide http
|
||||
and transport SSL certificates or use the Graylog preflight interface to configure this Data node remotely.
|
||||
========================================================================================================
|
||||
""";
|
||||
LOG.info(noConfigMessage);
|
||||
}
|
||||
eventBus.post(new OpensearchConfigurationChangeEvent(config));
|
||||
|
||||
Reference in New Issue
Block a user