Skip to content

Commit aa12af8

Browse files
authored
Enable node roles to be pluggable (#43175)
This commit introduces the possibility for a plugin to introduce additional node roles.
1 parent a3f2f40 commit aa12af8

File tree

72 files changed

+783
-317
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+783
-317
lines changed

benchmarks/src/main/java/org/elasticsearch/benchmark/routing/allocation/Allocators.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.elasticsearch.cluster.ClusterModule;
2323
import org.elasticsearch.cluster.EmptyClusterInfoService;
2424
import org.elasticsearch.cluster.node.DiscoveryNode;
25+
import org.elasticsearch.cluster.node.DiscoveryNodeRole;
2526
import org.elasticsearch.cluster.routing.ShardRouting;
2627
import org.elasticsearch.cluster.routing.allocation.AllocationService;
2728
import org.elasticsearch.cluster.routing.allocation.FailedShard;
@@ -92,7 +93,7 @@ public static AllocationDeciders defaultAllocationDeciders(Settings settings, Cl
9293

9394
public static DiscoveryNode newNode(String nodeId, Map<String, String> attributes) {
9495
return new DiscoveryNode("", nodeId, new TransportAddress(TransportAddress.META_ADDRESS,
95-
portGenerator.incrementAndGet()), attributes, Sets.newHashSet(DiscoveryNode.Role.MASTER,
96-
DiscoveryNode.Role.DATA), Version.CURRENT);
96+
portGenerator.incrementAndGet()), attributes, Sets.newHashSet(DiscoveryNodeRole.MASTER_ROLE,
97+
DiscoveryNodeRole.DATA_ROLE), Version.CURRENT);
9798
}
9899
}

docs/reference/cat/nodes.asciidoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Might look like:
1414
[source,txt]
1515
--------------------------------------------------
1616
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
17-
127.0.0.1 65 99 42 3.07 mdi * mJw06l1
17+
127.0.0.1 65 99 42 3.07 dim * mJw06l1
1818
--------------------------------------------------
1919
// TESTRESPONSE[s/3.07/(\\d+\\.\\d+( \\d+\\.\\d+ (\\d+\\.\\d+)?)?)?/]
2020
// TESTRESPONSE[s/65 99 42/\\d+ \\d+ \\d+/]

docs/reference/getting-started.asciidoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ And the response:
330330
[source,txt]
331331
--------------------------------------------------
332332
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
333-
127.0.0.1 10 5 5 4.46 mdi * PB2SGZY
333+
127.0.0.1 10 5 5 4.46 dim * PB2SGZY
334334
--------------------------------------------------
335335
// TESTRESPONSE[s/10 5 5 4.46/\\d+ \\d+ \\d+ (\\d+\\.\\d+)? (\\d+\\.\\d+)? (\\d+\.\\d+)?/]
336336
// TESTRESPONSE[s/[*]/[*]/ s/PB2SGZY/.+/ non_json]

server/src/main/java/org/elasticsearch/action/admin/cluster/node/info/NodesInfoResponse.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.elasticsearch.action.FailedNodeException;
2323
import org.elasticsearch.action.support.nodes.BaseNodesResponse;
2424
import org.elasticsearch.cluster.ClusterName;
25-
import org.elasticsearch.cluster.node.DiscoveryNode;
25+
import org.elasticsearch.cluster.node.DiscoveryNodeRole;
2626
import org.elasticsearch.common.Strings;
2727
import org.elasticsearch.common.io.stream.StreamInput;
2828
import org.elasticsearch.common.io.stream.StreamOutput;
@@ -74,8 +74,8 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
7474
}
7575

7676
builder.startArray("roles");
77-
for (DiscoveryNode.Role role : nodeInfo.getNode().getRoles()) {
78-
builder.value(role.getRoleName());
77+
for (DiscoveryNodeRole role : nodeInfo.getNode().getRoles()) {
78+
builder.value(role.roleName());
7979
}
8080
builder.endArray();
8181

server/src/main/java/org/elasticsearch/action/admin/cluster/node/stats/NodeStats.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.elasticsearch.action.support.nodes.BaseNodeResponse;
2323
import org.elasticsearch.cluster.node.DiscoveryNode;
24+
import org.elasticsearch.cluster.node.DiscoveryNodeRole;
2425
import org.elasticsearch.common.Nullable;
2526
import org.elasticsearch.common.io.stream.StreamInput;
2627
import org.elasticsearch.common.io.stream.StreamOutput;
@@ -269,8 +270,8 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
269270
builder.field("ip", getNode().getAddress());
270271

271272
builder.startArray("roles");
272-
for (DiscoveryNode.Role role : getNode().getRoles()) {
273-
builder.value(role.getRoleName());
273+
for (DiscoveryNodeRole role : getNode().getRoles()) {
274+
builder.value(role.roleName());
274275
}
275276
builder.endArray();
276277

server/src/main/java/org/elasticsearch/action/admin/cluster/node/tasks/list/ListTasksResponse.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.elasticsearch.action.TaskOperationFailure;
2424
import org.elasticsearch.action.support.tasks.BaseTasksResponse;
2525
import org.elasticsearch.cluster.node.DiscoveryNode;
26+
import org.elasticsearch.cluster.node.DiscoveryNodeRole;
2627
import org.elasticsearch.cluster.node.DiscoveryNodes;
2728
import org.elasticsearch.common.ParseField;
2829
import org.elasticsearch.common.Strings;
@@ -175,8 +176,8 @@ public XContentBuilder toXContentGroupedByNode(XContentBuilder builder, Params p
175176
builder.field("ip", node.getAddress());
176177

177178
builder.startArray("roles");
178-
for (DiscoveryNode.Role role : node.getRoles()) {
179-
builder.value(role.getRoleName());
179+
for (DiscoveryNodeRole role : node.getRoles()) {
180+
builder.value(role.roleName());
180181
}
181182
builder.endArray();
182183

server/src/main/java/org/elasticsearch/action/admin/cluster/stats/ClusterStatsNodes.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@
2121

2222
import com.carrotsearch.hppc.ObjectIntHashMap;
2323
import com.carrotsearch.hppc.cursors.ObjectIntCursor;
24-
2524
import org.elasticsearch.Version;
2625
import org.elasticsearch.action.admin.cluster.node.info.NodeInfo;
2726
import org.elasticsearch.action.admin.cluster.node.stats.NodeStats;
2827
import org.elasticsearch.cluster.node.DiscoveryNode;
28+
import org.elasticsearch.cluster.node.DiscoveryNodeRole;
2929
import org.elasticsearch.common.Strings;
3030
import org.elasticsearch.common.collect.Tuple;
3131
import org.elasticsearch.common.network.NetworkModule;
@@ -49,6 +49,7 @@
4949
import java.util.List;
5050
import java.util.Map;
5151
import java.util.Set;
52+
import java.util.TreeMap;
5253
import java.util.concurrent.atomic.AtomicInteger;
5354

5455
public class ClusterStatsNodes implements ToXContentFragment {
@@ -186,27 +187,27 @@ public static class Counts implements ToXContentFragment {
186187
private final int total;
187188
private final Map<String, Integer> roles;
188189

189-
private Counts(List<NodeInfo> nodeInfos) {
190-
this.roles = new HashMap<>();
191-
for (DiscoveryNode.Role role : DiscoveryNode.Role.values()) {
192-
this.roles.put(role.getRoleName(), 0);
190+
private Counts(final List<NodeInfo> nodeInfos) {
191+
// TODO: do we need to report zeros?
192+
final Map<String, Integer> roles = new HashMap<>(DiscoveryNode.getPossibleRoleNames().size());
193+
roles.put(COORDINATING_ONLY, 0);
194+
for (final String possibleRoleName : DiscoveryNode.getPossibleRoleNames()) {
195+
roles.put(possibleRoleName, 0);
193196
}
194-
this.roles.put(COORDINATING_ONLY, 0);
195197

196198
int total = 0;
197-
for (NodeInfo nodeInfo : nodeInfos) {
199+
for (final NodeInfo nodeInfo : nodeInfos) {
198200
total++;
199201
if (nodeInfo.getNode().getRoles().isEmpty()) {
200-
Integer count = roles.get(COORDINATING_ONLY);
201-
roles.put(COORDINATING_ONLY, ++count);
202+
roles.merge(COORDINATING_ONLY, 1, Integer::sum);
202203
} else {
203-
for (DiscoveryNode.Role role : nodeInfo.getNode().getRoles()) {
204-
Integer count = roles.get(role.getRoleName());
205-
roles.put(role.getRoleName(), ++count);
204+
for (DiscoveryNodeRole role : nodeInfo.getNode().getRoles()) {
205+
roles.merge(role.roleName(), 1, Integer::sum);
206206
}
207207
}
208208
}
209209
this.total = total;
210+
this.roles = Map.copyOf(roles);
210211
}
211212

212213
public int getTotal() {
@@ -225,7 +226,7 @@ static final class Fields {
225226
public XContentBuilder toXContent(XContentBuilder builder, Params params)
226227
throws IOException {
227228
builder.field(Fields.TOTAL, total);
228-
for (Map.Entry<String, Integer> entry : roles.entrySet()) {
229+
for (Map.Entry<String, Integer> entry : new TreeMap<>(roles).entrySet()) {
229230
builder.field(entry.getKey(), entry.getValue());
230231
}
231232
return builder;

0 commit comments

Comments
 (0)