diff --git a/changelog/unreleased/pr-18357.toml b/changelog/unreleased/pr-18357.toml
new file mode 100644
index 0000000000..3643d9c7d1
--- /dev/null
+++ b/changelog/unreleased/pr-18357.toml
@@ -0,0 +1,4 @@
+type = "a"
+message = "Add support for searchable snapshots in data node"
+
+pulls = ["18357"]
diff --git a/data-node/pom.xml b/data-node/pom.xml
index ff7c481d13..06d859667f 100644
--- a/data-node/pom.xml
+++ b/data-node/pom.xml
@@ -572,6 +572,19 @@
+
+ download-repository-s3-plugin
+ generate-resources
+
+ wget
+
+
+ https://artifacts.opensearch.org/releases/plugins/repository-s3/${opensearch.version}/repository-s3-${opensearch.version}.zip
+ repository-s3-${opensearch.version}.zip
+ ${project.build.directory}/opensearch/plugins
+ c361d92a4ae83328dfd413878b8747e6
+
+
diff --git a/data-node/src/main/java/org/graylog/datanode/Configuration.java b/data-node/src/main/java/org/graylog/datanode/Configuration.java
index 5b8b91283e..4313d4f439 100644
--- a/data-node/src/main/java/org/graylog/datanode/Configuration.java
+++ b/data-node/src/main/java/org/graylog/datanode/Configuration.java
@@ -85,6 +85,9 @@ public class Configuration extends BaseConfiguration {
@Parameter(value = "opensearch_location")
private String opensearchDistributionRoot = "dist";
+ @Parameter(value = "opensearch_plugins_location", validators = DirectoryReadableValidator.class)
+ private Path opensearchPluginsDir = Path.of("dist/plugins");
+
@Parameter(value = "opensearch_data_location", required = true, validators = DirectoryWritableValidator.class)
private Path opensearchDataLocation = Path.of("datanode/data");
@@ -240,6 +243,9 @@ public class Configuration extends BaseConfiguration {
@Parameter(value = "metrics_policy")
private String metricsPolicy = "gl-datanode-metrics-ism";
+ @Parameter(value = "node_search_cache_size")
+ private String searchCacheSize = "10gb";
+
/**
* https://opensearch.org/docs/latest/tuning-your-cluster/availability-and-recovery/snapshots/snapshot-restore/#shared-file-system
*/
@@ -277,6 +283,11 @@ public class Configuration extends BaseConfiguration {
return opensearchDistributionRoot;
}
+ @Nullable
+ public Path getOpensearchPluginsDir() {
+ return opensearchPluginsDir;
+ }
+
/**
* Use {@link DatanodeDirectories} to obtain a reference to this directory.
*/
@@ -648,6 +659,11 @@ public class Configuration extends BaseConfiguration {
return rootPasswordSha2;
}
+
+ public String getNodeSearchCacheSize() {
+ return searchCacheSize;
+ }
+
public List getPathRepo() {
return pathRepo;
}
diff --git a/data-node/src/main/java/org/graylog/datanode/OpensearchDistribution.java b/data-node/src/main/java/org/graylog/datanode/OpensearchDistribution.java
index a9c8bbaebb..954b4540d5 100644
--- a/data-node/src/main/java/org/graylog/datanode/OpensearchDistribution.java
+++ b/data-node/src/main/java/org/graylog/datanode/OpensearchDistribution.java
@@ -29,7 +29,12 @@ public record OpensearchDistribution(Path directory, String version, @Nullable S
this(path, version, null, null);
}
- public Path getOpensearchExecutable() {
- return directory.resolve(Paths.get("bin", "opensearch"));
+ public Path getOpensearchBinDirPath() {
+ return directory.resolve("bin");
}
+
+ public Path getOpensearchExecutable() {
+ return getOpensearchBinDirPath().resolve("opensearch");
+ }
+
}
diff --git a/data-node/src/main/java/org/graylog/datanode/commands/Server.java b/data-node/src/main/java/org/graylog/datanode/commands/Server.java
index b98d66a37e..6f473ccee0 100644
--- a/data-node/src/main/java/org/graylog/datanode/commands/Server.java
+++ b/data-node/src/main/java/org/graylog/datanode/commands/Server.java
@@ -31,8 +31,10 @@ import org.graylog.datanode.bindings.PeriodicalBindings;
import org.graylog.datanode.bindings.ServerBindings;
import org.graylog.datanode.bootstrap.Main;
import org.graylog.datanode.bootstrap.ServerBootstrap;
+import org.graylog.datanode.configuration.S3RepositoryConfiguration;
import org.graylog.datanode.rest.RestBindings;
import org.graylog.datanode.shutdown.GracefulShutdown;
+import org.graylog.plugins.map.config.GeoIpProcessorConfig;
import org.graylog2.bindings.MongoDBModule;
import org.graylog2.bindings.PasswordAlgorithmBindings;
import org.graylog2.cluster.nodes.DataNodeDto;
@@ -63,6 +65,7 @@ public class Server extends ServerBootstrap {
private static final Logger LOG = LoggerFactory.getLogger(Server.class);
protected static final Configuration configuration = new Configuration();
+ private final S3RepositoryConfiguration s3RepositoryConfiguration = new S3RepositoryConfiguration();
private final MongoDbConfiguration mongoDbConfiguration = new MongoDbConfiguration();
private final TLSProtocolsConfiguration tlsConfiguration = new TLSProtocolsConfiguration();
@@ -101,7 +104,8 @@ public class Server extends ServerBootstrap {
protected List