From bf78062ac593bb7f8bbb4a9ba38efb42e285f151 Mon Sep 17 00:00:00 2001 From: David Roberts Date: Fri, 18 Dec 2020 13:00:23 +0000 Subject: [PATCH] A node with roles [ml, remote_cluster_client] is still dedicated ML (#66533) Where CCS is being used it makes sense for ML nodes to have the remote_cluster_client role. This single extra role is not significant enough to stop an ML node being considered a "dedicated ML node". --- .../tools/launchers/MachineDependentHeap.java | 2 +- .../tools/launchers/NodeRoleParserTests.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/MachineDependentHeap.java b/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/MachineDependentHeap.java index ce0febebb780..f0e329be67da 100644 --- a/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/MachineDependentHeap.java +++ b/distribution/tools/launchers/src/main/java/org/elasticsearch/tools/launchers/MachineDependentHeap.java @@ -142,7 +142,7 @@ public final class MachineDependentHeap { return MachineNodeRole.DATA; } else if (containsOnly(roles, "master")) { return MachineNodeRole.MASTER_ONLY; - } else if (containsOnly(roles, "ml")) { + } else if (roles.contains("ml") && containsOnly(roles, "ml", "remote_cluster_client")) { return MachineNodeRole.ML_ONLY; } else { return MachineNodeRole.DATA; diff --git a/distribution/tools/launchers/src/test/java/org/elasticsearch/tools/launchers/NodeRoleParserTests.java b/distribution/tools/launchers/src/test/java/org/elasticsearch/tools/launchers/NodeRoleParserTests.java index 0ae805ef9fe7..e9f9cf83e94c 100644 --- a/distribution/tools/launchers/src/test/java/org/elasticsearch/tools/launchers/NodeRoleParserTests.java +++ b/distribution/tools/launchers/src/test/java/org/elasticsearch/tools/launchers/NodeRoleParserTests.java @@ -47,6 +47,15 @@ public class NodeRoleParserTests extends LaunchersTestCase { MachineDependentHeap.MachineNodeRole nodeRole = parseConfig(sb -> sb.append("node.roles: [ml]")); assertThat(nodeRole, equalTo(ML_ONLY)); + nodeRole = parseConfig(sb -> sb.append("node.roles: [ml, remote_cluster_client]")); + assertThat(nodeRole, equalTo(ML_ONLY)); + + nodeRole = parseConfig(sb -> sb.append("node.roles: [remote_cluster_client, ml]")); + assertThat(nodeRole, equalTo(ML_ONLY)); + + nodeRole = parseConfig(sb -> sb.append("node.roles: [remote_cluster_client]")); + assertThat(nodeRole, not(equalTo(ML_ONLY))); + nodeRole = parseConfig(sb -> sb.append("node.roles: [ml, some_other_role]")); assertThat(nodeRole, not(equalTo(ML_ONLY))); }