Skip to content

Commit 0d0e2c5

Browse files
authored
Deduplicate opensearch roles in datanode (#23100)
* Deduplicate opensearch roles in datanode #22569 * added test, fixed impl * added changelog
1 parent 530c0e8 commit 0d0e2c5

File tree

3 files changed

+52
-3
lines changed

3 files changed

+52
-3
lines changed

changelog/unreleased/pr-23100.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type = "f"
2+
message = "Deduplicate opensearch node roles in datanode"
3+
4+
pulls = ["23100"]
5+
issues = ["22569"]

data-node/src/main/java/org/graylog/datanode/opensearch/configuration/OpensearchConfiguration.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,7 @@ public OpensearchConfiguration(OpensearchDistribution opensearchDistribution, Da
6060

6161
@Nonnull
6262
private String buildRolesList() {
63-
return configurationParts.stream()
64-
.flatMap(cfg -> cfg.nodeRoles().stream())
65-
.collect(Collectors.joining(","));
63+
return String.join(",", opensearchRoles());
6664
}
6765

6866
public Environment getEnv() {
@@ -128,6 +126,7 @@ public Optional<KeystoreInformation> transportCertificate() {
128126
public List<String> opensearchRoles() {
129127
return configurationParts.stream()
130128
.flatMap(cfg -> cfg.nodeRoles().stream())
129+
.distinct()
131130
.collect(Collectors.toList());
132131
}
133132

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright (C) 2020 Graylog, Inc.
3+
*
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the Server Side Public License, version 1,
6+
* as published by MongoDB, Inc.
7+
*
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* Server Side Public License for more details.
12+
*
13+
* You should have received a copy of the Server Side Public License
14+
* along with this program. If not, see
15+
* <http://www.mongodb.com/licensing/server-side-public-license>.
16+
*/
17+
package org.graylog.datanode.opensearch.configuration;
18+
19+
import org.assertj.core.api.Assertions;
20+
import org.graylog.datanode.OpensearchDistribution;
21+
import org.graylog.datanode.configuration.DatanodeDirectories;
22+
import org.graylog.datanode.process.configuration.beans.DatanodeConfigurationPart;
23+
import org.junit.jupiter.api.Test;
24+
import org.junit.jupiter.api.io.TempDir;
25+
26+
import java.nio.file.Path;
27+
import java.util.List;
28+
29+
class OpensearchConfigurationTest {
30+
31+
@Test
32+
void testDeduplicatedOpensearchRoles(@TempDir Path tempDir) {
33+
final DatanodeDirectories datanodeDirectories = new DatanodeDirectories(tempDir, tempDir, tempDir, tempDir);
34+
35+
final DatanodeConfigurationPart cp1 = DatanodeConfigurationPart.builder().addNodeRole("search").build();
36+
final DatanodeConfigurationPart cp2 = DatanodeConfigurationPart.builder().addNodeRole("search").build();
37+
final DatanodeConfigurationPart cp3 = DatanodeConfigurationPart.builder().nodeRoles(List.of("cluster_manager", "data", "ingest", "remote_cluster_client")).build();
38+
39+
final OpensearchConfiguration configuration = new OpensearchConfiguration(new OpensearchDistribution(tempDir, "2.15.0"), datanodeDirectories, "localhost", 9200, List.of(cp1, cp2, cp3));
40+
41+
Assertions.assertThat(configuration.opensearchRoles())
42+
.hasSize(5)
43+
.doesNotHaveDuplicates();
44+
}
45+
}

0 commit comments

Comments
 (0)