Browse Source

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".
David Roberts 4 years ago
parent
commit
bf78062ac5

+ 1 - 1
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;

+ 9 - 0
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)));
     }