Skip to content

Commit 994cc85

Browse files
todvorabernd
andauthored
Update jadconfig to 1.0.0 (#24424)
* Update jadconfig to 1.0.0 * fix configuration test * code cleanup * fixed test * fixed test * fixed datanode configuration in tests * default node_id file moved to data_dir * added changelog * Adapted misc/graylog.conf to reflect node_id_file relocation --------- Co-authored-by: Bernd Ahlers <[email protected]>
1 parent 84d3fd1 commit 994cc85

File tree

14 files changed

+153
-132
lines changed

14 files changed

+153
-132
lines changed

changelog/unreleased/pr-24424.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type = "c"
2+
message = "JadConfig updated to 1.0.0, adapted paths validation"
3+
4+
issues = []
5+
pulls = ["24424", "Graylog2/graylog-plugin-enterprise#12679"]

data-node/src/test/java/org/graylog/datanode/DatanodeTestUtils.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,43 @@
2020
import com.github.joschi.jadconfig.RepositoryException;
2121
import com.github.joschi.jadconfig.ValidationException;
2222
import com.github.joschi.jadconfig.repositories.InMemoryRepository;
23+
import jakarta.annotation.Nonnull;
2324
import org.apache.commons.lang3.RandomStringUtils;
2425
import org.graylog.datanode.configuration.DatanodeDirectories;
2526
import org.graylog.security.certutil.CertRequest;
2627
import org.graylog.security.certutil.CertificateGenerator;
2728
import org.graylog.security.certutil.KeyPair;
2829

30+
import java.io.IOException;
31+
import java.nio.file.Files;
2932
import java.nio.file.Path;
3033
import java.time.Duration;
3134
import java.util.List;
3235
import java.util.Map;
3336

3437
public class DatanodeTestUtils {
35-
public static Configuration datanodeConfiguration(Map<String, String> properties) throws RepositoryException, ValidationException {
38+
public static Configuration datanodeConfiguration(Map<String, String> properties, Path tempDir) throws RepositoryException, ValidationException {
3639
final Configuration configuration = new Configuration();
3740
final InMemoryRepository mandatoryProps = new InMemoryRepository(Map.of(
38-
"password_secret", "thisisverysecretpassword"
41+
"password_secret", "thisisverysecretpassword",
42+
"opensearch_logs_location", createDir(tempDir, "opensearch_logs"),
43+
"opensearch_config_location", createDir(tempDir, "opensearch_config"),
44+
"opensearch_data_location", createDir(tempDir, "opensearch_data"),
45+
"node_id_file", tempDir.resolve("node_id").toAbsolutePath().toString()
3946
));
4047
new JadConfig(List.of(mandatoryProps, new InMemoryRepository(properties)), configuration).process();
4148
return configuration;
4249
}
4350

51+
@Nonnull
52+
private static String createDir(Path tempDir, String dir) {
53+
try {
54+
return Files.createDirectory(tempDir.resolve(dir)).toAbsolutePath().toString();
55+
} catch (IOException e) {
56+
throw new RuntimeException(e);
57+
}
58+
}
59+
4460
public static DatanodeDirectories tempDirectories(Path tempDir) {
4561
return new DatanodeDirectories(tempDir, tempDir, tempDir, tempDir);
4662
}

data-node/src/test/java/org/graylog/datanode/opensearch/CsrRequesterImplTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void testSAN(@TempDir Path tempDir) throws Exception {
5454
final Configuration configuration = DatanodeTestUtils.datanodeConfiguration(Map.of(
5555
"node_name", "my-node-name",
5656
"hostname", "my-datanode-machine"
57-
));
57+
), tempDir);
5858

5959
final DatanodeKeystore datanodeKeystore = new DatanodeKeystore(DatanodeTestUtils.tempDirectories(tempDir), "foobar", new EventBus());
6060
datanodeKeystore.create(DatanodeTestUtils.generateKeyPair(Duration.ofDays(30)));

data-node/src/test/java/org/graylog/datanode/opensearch/configuration/beans/impl/OpensearchClusterConfigurationBeanTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ void setUp() {
7070
@Test
7171
void testManagerNodes(@TempDir Path tempDir) throws ValidationException, RepositoryException {
7272
final OpensearchClusterConfigurationBean configurationBean = new OpensearchClusterConfigurationBean(DatanodeTestUtils.datanodeConfiguration(
73-
Map.of("hostname", "this_node_can_be_manager", "node_roles", OpensearchNodeRole.CLUSTER_MANAGER)), testNodeService);
73+
Map.of("hostname", "this_node_can_be_manager", "node_roles", OpensearchNodeRole.CLUSTER_MANAGER), tempDir), testNodeService);
7474

7575
final DatanodeConfigurationPart configurationPart = configurationBean.buildConfigurationPart(new OpensearchConfigurationParams(Collections.emptyList(), Map.of(), tempDir));
7676

@@ -86,7 +86,7 @@ void testManagerNodes(@TempDir Path tempDir) throws ValidationException, Reposit
8686
@Test
8787
void testManagerNodesWithSelfNoManager(@TempDir Path tempDir) throws ValidationException, RepositoryException {
8888
final OpensearchClusterConfigurationBean configurationBean = new OpensearchClusterConfigurationBean(DatanodeTestUtils.datanodeConfiguration(
89-
Map.of("hostname", "this_node_cannot_be_manager", "node_roles", OpensearchNodeRole.SEARCH)), testNodeService);
89+
Map.of("hostname", "this_node_cannot_be_manager", "node_roles", OpensearchNodeRole.SEARCH), tempDir), testNodeService);
9090

9191
final DatanodeConfigurationPart configurationPart = configurationBean.buildConfigurationPart(new OpensearchConfigurationParams(Collections.emptyList(), Map.of(), tempDir));
9292

@@ -102,7 +102,7 @@ void testManagerNodesWithSelfNoManager(@TempDir Path tempDir) throws ValidationE
102102
@Test
103103
void testManagerNodesWithNoRolesSet(@TempDir Path tempDir) throws ValidationException, RepositoryException {
104104
final OpensearchClusterConfigurationBean configurationBean = new OpensearchClusterConfigurationBean(DatanodeTestUtils.datanodeConfiguration(
105-
Map.of("hostname", "this_node_can_be_manager")), testNodeService);
105+
Map.of("hostname", "this_node_can_be_manager"), tempDir), testNodeService);
106106

107107
final DatanodeConfigurationPart configurationPart = configurationBean.buildConfigurationPart(new OpensearchConfigurationParams(Collections.emptyList(), Map.of(), tempDir));
108108

data-node/src/test/java/org/graylog/datanode/opensearch/configuration/beans/impl/SearchableSnapshotsConfigurationBeanTest.java

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.github.joschi.jadconfig.repositories.InMemoryRepository;
2323
import org.assertj.core.api.Assertions;
2424
import org.graylog.datanode.Configuration;
25+
import org.graylog.datanode.DatanodeTestUtils;
2526
import org.graylog.datanode.configuration.DatanodeDirectories;
2627
import org.graylog.datanode.configuration.GCSRepositoryConfiguration;
2728
import org.graylog.datanode.configuration.HdfsRepositoryConfiguration;
@@ -53,9 +54,9 @@ void testS3Repo(@TempDir Path tempDir) throws ValidationException, RepositoryExc
5354
));
5455

5556
final SearchableSnapshotsConfigurationBean bean = new SearchableSnapshotsConfigurationBean(
56-
datanodeConfiguration(Map.of(
57+
DatanodeTestUtils.datanodeConfiguration(Map.of(
5758
"node_search_cache_size", "10gb"
58-
)),
59+
), tempDir),
5960
datanodeDirectories(tempDir),
6061
config,
6162
new GCSRepositoryConfiguration(),
@@ -92,9 +93,9 @@ void testGoogleCloudStorage(@TempDir Path tempDir) throws ValidationException, R
9293
));
9394

9495
final SearchableSnapshotsConfigurationBean bean = new SearchableSnapshotsConfigurationBean(
95-
datanodeConfiguration(Map.of(
96+
DatanodeTestUtils.datanodeConfiguration(Map.of(
9697
"node_search_cache_size", "10gb"
97-
)),
98+
), tempDir),
9899
datanodeDirectories(tempDir),
99100
config,
100101
gcsRepositoryConfiguration,
@@ -122,9 +123,9 @@ void testHadoopDistributedFileStorage(@TempDir Path tempDir) throws ValidationEx
122123
));
123124

124125
final SearchableSnapshotsConfigurationBean bean = new SearchableSnapshotsConfigurationBean(
125-
datanodeConfiguration(Map.of(
126+
DatanodeTestUtils.datanodeConfiguration(Map.of(
126127
"node_search_cache_size", "10gb"
127-
)),
128+
), tempDir),
128129
datanodeDirectories(tempDir),
129130
new S3RepositoryConfiguration(),
130131
new GCSRepositoryConfiguration(),
@@ -153,10 +154,10 @@ void testLocalFilesystemRepo(@TempDir Path tempDir) throws ValidationException,
153154

154155
// only path_repo in general datanode configuration
155156
final SearchableSnapshotsConfigurationBean bean = new SearchableSnapshotsConfigurationBean(
156-
datanodeConfiguration(Map.of(
157+
DatanodeTestUtils.datanodeConfiguration(Map.of(
157158
"path_repo", snapshotsPath,
158159
"node_search_cache_size", "10gb"
159-
)),
160+
), tempDir),
160161
datanodeDirectories(tempDir),
161162
config,
162163
new GCSRepositoryConfiguration(),
@@ -183,9 +184,9 @@ void testNoSnapshotConfiguration(@TempDir Path tempDir) throws ValidationExcepti
183184

184185
// only path_repo in general datanode configuration
185186
final SearchableSnapshotsConfigurationBean bean = new SearchableSnapshotsConfigurationBean(
186-
datanodeConfiguration(Map.of(
187+
DatanodeTestUtils.datanodeConfiguration(Map.of(
187188
"node_search_cache_size", "10gb"
188-
)),
189+
), tempDir),
189190
datanodeDirectories(tempDir),
190191
config,
191192
new GCSRepositoryConfiguration(),
@@ -214,9 +215,9 @@ void testCacheSizeValidation(@TempDir Path tempDir) throws ValidationException,
214215
));
215216

216217
final SearchableSnapshotsConfigurationBean bean = new SearchableSnapshotsConfigurationBean(
217-
datanodeConfiguration(Map.of(
218+
DatanodeTestUtils.datanodeConfiguration(Map.of(
218219
"node_search_cache_size", "10gb"
219-
)),
220+
), tempDir),
220221
datanodeDirectories(tempDir),
221222
config,
222223
new GCSRepositoryConfiguration(),
@@ -237,11 +238,11 @@ void testRepoConfigWithoutSearchRole(@TempDir Path tempDir) throws ValidationExc
237238

238239
// only path_repo in general datanode configuration
239240
final SearchableSnapshotsConfigurationBean bean = new SearchableSnapshotsConfigurationBean(
240-
datanodeConfiguration(Map.of(
241+
DatanodeTestUtils.datanodeConfiguration(Map.of(
241242
"node_roles", "cluster_manager,data,ingest,remote_cluster_client",
242243
"path_repo", snapshotsPath,
243244
"node_search_cache_size", "10gb"
244-
)),
245+
), tempDir),
245246
datanodeDirectories(tempDir),
246247
config,
247248
new GCSRepositoryConfiguration(),
@@ -275,13 +276,4 @@ private HdfsRepositoryConfiguration hdfsConfiguration(Map<String, String> proper
275276
new JadConfig(new InMemoryRepository(properties), configuration).process();
276277
return configuration;
277278
}
278-
279-
private Configuration datanodeConfiguration(Map<String, String> properties) throws RepositoryException, ValidationException {
280-
final Configuration configuration = new Configuration();
281-
final InMemoryRepository mandatoryProps = new InMemoryRepository(Map.of(
282-
"password_secret", "thisisverysecretpassword"
283-
));
284-
new JadConfig(List.of(mandatoryProps, new InMemoryRepository(properties)), configuration).process();
285-
return configuration;
286-
}
287279
}

graylog2-server/src/main/java/org/graylog2/Configuration.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public class Configuration extends CaConfiguration implements CommonNodeConfigur
6666
public static final String SAFE_CLASSES = "safe_classes";
6767

6868
public static final String CONTENT_PACKS_DIR = "content_packs_dir";
69+
private static final String NODE_ID_FILE = "node_id_file";
6970
/**
7071
* Deprecated! Use isLeader() instead.
7172
*/
@@ -98,8 +99,8 @@ public class Configuration extends CaConfiguration implements CommonNodeConfigur
9899
@Parameter(value = "outputbuffer_processor_threads_core_pool_size", required = true, validators = PositiveIntegerValidator.class)
99100
private int outputBufferProcessorThreadsCorePoolSize = 3;
100101

101-
@Parameter(value = "node_id_file", validators = NodeIdFileValidator.class)
102-
private String nodeIdFile = "/etc/graylog/server/node-id";
102+
@Parameter(value = NODE_ID_FILE, validators = NodeIdFileValidator.class)
103+
private String nodeIdFile;
103104

104105
@Parameter(value = "root_username")
105106
private String rootUsername = "admin";
@@ -397,8 +398,9 @@ public boolean getSkipPreflightChecks() {
397398
return skipPreflightChecks;
398399
}
399400

401+
@NamedBindingOverride(value = NODE_ID_FILE)
400402
public String getNodeIdFile() {
401-
return nodeIdFile;
403+
return Optional.ofNullable(nodeIdFile).orElse(getDataDir().resolve("node_id").toString());
402404
}
403405

404406
public String getRootUsername() {

0 commit comments

Comments
 (0)