Skip to content

Commit 9b92926

Browse files
authored
[ML] Modernize ML node detection (#79623)
Where possible we should now detect ML nodes by looking for the ML node role rather than an attribute. Sadly this is not possible in the YAML tests, as the syntax doesn't support asserting that a list contains a particular item without asserting on the entire list contents. So in the YAML case we need to look for the ml.machine_memory node attribute, as this is reliably set on ML nodes but not other types of nodes. After #79622 is merged this closes #79518
1 parent 24c659e commit 9b92926

File tree

7 files changed

+47
-46
lines changed

7 files changed

+47
-46
lines changed

x-pack/plugin/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ tasks.named("yamlRestTestV7CompatTransform").configure{ task ->
9898
task.skipTest("vectors/50_vector_stats/Usage stats on vector fields", "not supported for compatibility")
9999
task.skipTest("roles/30_prohibited_role_query/Test use prohibited query inside role query", "put role request with a term lookup (deprecated) and type. Requires validation in REST layer")
100100
task.skipTest("ml/jobs_crud/Test create job with delimited format", "removing undocumented functionality")
101-
task.skipTest("ml/jobs_get_stats/Test get job stats after uploading data prompting the creation of some stats", "https://github.com/elastic/elasticsearch/issues/79518")
102101
task.skipTest("ml/datafeeds_crud/Test update datafeed to point to missing job", "behaviour change #44752 - not allowing to update datafeed job_id")
103102
task.skipTest("ml/datafeeds_crud/Test update datafeed to point to different job", "behaviour change #44752 - not allowing to update datafeed job_id")
104103
task.skipTest("ml/datafeeds_crud/Test update datafeed to point to job already attached to another datafeed", "behaviour change #44752 - not allowing to update datafeed job_id")

x-pack/plugin/ml/src/main/java/org/elasticsearch/xpack/ml/MachineLearning.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -618,12 +618,8 @@ public MachineLearning(Settings settings) {
618618
protected XPackLicenseState getLicenseState() { return XPackPlugin.getSharedLicenseState(); }
619619

620620
public static boolean isMlNode(DiscoveryNode node) {
621-
Map<String, String> nodeAttributes = node.getAttributes();
622-
try {
623-
return Long.parseLong(nodeAttributes.get(MACHINE_MEMORY_NODE_ATTR)) > 0;
624-
} catch (NumberFormatException e) {
625-
return false;
626-
}
621+
logger.info("DMR node roles are " + node.getRoles());
622+
return node.getRoles().contains(DiscoveryNodeRole.ML_ROLE);
627623
}
628624

629625
public List<Setting<?>> getSettings() {

x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/MachineLearningInfoTransportActionTests.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -543,10 +543,8 @@ private ClusterState givenNodeCount(int nodeCount) {
543543
DiscoveryNodes.Builder nodesBuilder = DiscoveryNodes.builder();
544544
for (int i = 0; i < nodeCount; i++) {
545545
Map<String, String> attrs = Map.of(MachineLearning.MACHINE_MEMORY_NODE_ATTR, "1000000000");
546-
Set<DiscoveryNodeRole> roles = new HashSet<>();
547-
roles.add(DiscoveryNodeRole.DATA_ROLE);
548-
roles.add(DiscoveryNodeRole.MASTER_ROLE);
549-
roles.add(DiscoveryNodeRole.INGEST_ROLE);
546+
Set<DiscoveryNodeRole> roles = Set.of(DiscoveryNodeRole.DATA_ROLE, DiscoveryNodeRole.MASTER_ROLE,
547+
DiscoveryNodeRole.INGEST_ROLE, DiscoveryNodeRole.ML_ROLE);
550548
nodesBuilder.add(new DiscoveryNode("ml-feature-set-given-ml-node-" + i,
551549
new TransportAddress(TransportAddress.META_ADDRESS, 9100 + i),
552550
attrs,

x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/action/TransportStartDataFrameAnalyticsActionTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.elasticsearch.cluster.ClusterState;
1313
import org.elasticsearch.cluster.metadata.Metadata;
1414
import org.elasticsearch.cluster.node.DiscoveryNode;
15+
import org.elasticsearch.cluster.node.DiscoveryNodeRole;
1516
import org.elasticsearch.cluster.node.DiscoveryNodes;
1617
import org.elasticsearch.cluster.service.ClusterService;
1718
import org.elasticsearch.common.settings.ClusterSettings;
@@ -32,8 +33,8 @@
3233
import org.elasticsearch.xpack.ml.process.MlMemoryTracker;
3334

3435
import java.net.InetAddress;
35-
import java.util.Collections;
3636
import java.util.Map;
37+
import java.util.Set;
3738

3839
import static org.hamcrest.Matchers.allOf;
3940
import static org.hamcrest.Matchers.containsString;
@@ -177,7 +178,8 @@ private static DiscoveryNode createNode(int i, boolean isMlNode, Version nodeVer
177178
"_node_id" + i,
178179
new TransportAddress(InetAddress.getLoopbackAddress(), 9300 + i),
179180
isMlNode ? Map.of("ml.machine_memory", String.valueOf(ByteSizeValue.ofGb(1).getBytes())) : Map.of(),
180-
Collections.emptySet(),
181+
isMlNode ? Set.of(DiscoveryNodeRole.MASTER_ROLE, DiscoveryNodeRole.DATA_ROLE, DiscoveryNodeRole.ML_ROLE)
182+
: Set.of(DiscoveryNodeRole.MASTER_ROLE, DiscoveryNodeRole.DATA_ROLE),
181183
nodeVersion);
182184
}
183185
}

x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/autoscaling/MlAutoscalingDeciderServiceTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
import java.util.Arrays;
4747
import java.util.Collections;
4848
import java.util.Date;
49-
import java.util.HashSet;
5049
import java.util.List;
5150
import java.util.Optional;
5251
import java.util.Set;
@@ -705,7 +704,7 @@ private static List<DiscoveryNode> withMlNodes(String... nodeName) {
705704
.put(MachineLearning.MACHINE_MEMORY_NODE_ATTR, String.valueOf(DEFAULT_NODE_SIZE))
706705
.put(MachineLearning.MAX_JVM_SIZE_NODE_ATTR, String.valueOf(DEFAULT_JVM_SIZE))
707706
.map(),
708-
new HashSet<>(List.of(DiscoveryNodeRole.MASTER_ROLE)),
707+
Set.of(DiscoveryNodeRole.ML_ROLE),
709708
Version.CURRENT))
710709
.collect(Collectors.toList());
711710
}

x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/job/JobNodeSelectorTests.java

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.elasticsearch.cluster.ClusterState;
1212
import org.elasticsearch.cluster.metadata.Metadata;
1313
import org.elasticsearch.cluster.node.DiscoveryNode;
14+
import org.elasticsearch.cluster.node.DiscoveryNodeRole;
1415
import org.elasticsearch.cluster.node.DiscoveryNodes;
1516
import org.elasticsearch.common.Randomness;
1617
import org.elasticsearch.common.collect.MapBuilder;
@@ -42,6 +43,7 @@
4243
import java.util.HashMap;
4344
import java.util.List;
4445
import java.util.Map;
46+
import java.util.Set;
4547
import java.util.SortedMap;
4648
import java.util.TreeMap;
4749

@@ -59,6 +61,10 @@ public class JobNodeSelectorTests extends ESTestCase {
5961
// To simplify the logic in this class all jobs have the same memory requirement
6062
private static final long MAX_JOB_BYTES = ByteSizeValue.ofGb(1).getBytes();
6163
private static final ByteSizeValue JOB_MEMORY_REQUIREMENT = ByteSizeValue.ofMb(10);
64+
private static final Set<DiscoveryNodeRole> ROLES_WITH_ML =
65+
Set.of(DiscoveryNodeRole.MASTER_ROLE, DiscoveryNodeRole.ML_ROLE, DiscoveryNodeRole.DATA_ROLE);
66+
private static final Set<DiscoveryNodeRole> ROLES_WITHOUT_ML =
67+
Set.of(DiscoveryNodeRole.MASTER_ROLE, DiscoveryNodeRole.DATA_ROLE);
6268

6369
private MlMemoryTracker memoryTracker;
6470
private boolean isMemoryTrackerRecentlyRefreshed;
@@ -77,22 +83,22 @@ public void testNodeNameAndVersion() {
7783
TransportAddress ta = new TransportAddress(InetAddress.getLoopbackAddress(), 9300);
7884
Map<String, String> attributes = new HashMap<>();
7985
attributes.put("unrelated", "attribute");
80-
DiscoveryNode node = new DiscoveryNode("_node_name1", "_node_id1", ta, attributes, Collections.emptySet(), Version.CURRENT);
86+
DiscoveryNode node = new DiscoveryNode("_node_name1", "_node_id1", ta, attributes, ROLES_WITHOUT_ML, Version.CURRENT);
8187
assertEquals("{_node_name1}{version=" + node.getVersion() + "}", JobNodeSelector.nodeNameAndVersion(node));
8288
}
8389

8490
public void testNodeNameAndMlAttributes() {
8591
TransportAddress ta = new TransportAddress(InetAddress.getLoopbackAddress(), 9300);
8692
SortedMap<String, String> attributes = new TreeMap<>();
8793
attributes.put("unrelated", "attribute");
88-
DiscoveryNode node = new DiscoveryNode("_node_name1", "_node_id1", ta, attributes, Collections.emptySet(), Version.CURRENT);
94+
DiscoveryNode node = new DiscoveryNode("_node_name1", "_node_id1", ta, attributes, ROLES_WITHOUT_ML, Version.CURRENT);
8995
assertEquals("{_node_name1}", JobNodeSelector.nodeNameAndMlAttributes(node));
9096

9197
attributes.put("ml.machine_memory", "5");
92-
node = new DiscoveryNode("_node_name1", "_node_id1", ta, attributes, Collections.emptySet(), Version.CURRENT);
98+
node = new DiscoveryNode("_node_name1", "_node_id1", ta, attributes, ROLES_WITH_ML, Version.CURRENT);
9399
assertEquals("{_node_name1}{ml.machine_memory=5}", JobNodeSelector.nodeNameAndMlAttributes(node));
94100

95-
node = new DiscoveryNode(null, "_node_id1", ta, attributes, Collections.emptySet(), Version.CURRENT);
101+
node = new DiscoveryNode(null, "_node_id1", ta, attributes, ROLES_WITH_ML, Version.CURRENT);
96102
assertEquals("{_node_id1}{ml.machine_memory=5}", JobNodeSelector.nodeNameAndMlAttributes(node));
97103
}
98104

@@ -321,9 +327,9 @@ public void testSelectLeastLoadedMlNodeForDataFrameAnalyticsJob_firstJobTooBigMe
321327
public void testSelectLeastLoadedMlNode_noMlNodes() {
322328
DiscoveryNodes nodes = DiscoveryNodes.builder()
323329
.add(new DiscoveryNode("_node_name1", "_node_id1", new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
324-
Collections.emptyMap(), Collections.emptySet(), Version.CURRENT))
330+
Collections.emptyMap(), ROLES_WITHOUT_ML, Version.CURRENT))
325331
.add(new DiscoveryNode("_node_name2", "_node_id2", new TransportAddress(InetAddress.getLoopbackAddress(), 9301),
326-
Collections.emptyMap(), Collections.emptySet(), Version.CURRENT))
332+
Collections.emptyMap(), ROLES_WITHOUT_ML, Version.CURRENT))
327333
.build();
328334

329335
PersistentTasksCustomMetadata.Builder tasksBuilder = PersistentTasksCustomMetadata.builder();
@@ -358,11 +364,11 @@ public void testSelectLeastLoadedMlNode_maxConcurrentOpeningJobs() {
358364
Map<String, String> nodeAttr = Map.of(MachineLearning.MACHINE_MEMORY_NODE_ATTR, "1000000000");
359365
DiscoveryNodes nodes = DiscoveryNodes.builder()
360366
.add(new DiscoveryNode("_node_name1", "_node_id1", new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
361-
nodeAttr, Collections.emptySet(), Version.CURRENT))
367+
nodeAttr, ROLES_WITH_ML, Version.CURRENT))
362368
.add(new DiscoveryNode("_node_name2", "_node_id2", new TransportAddress(InetAddress.getLoopbackAddress(), 9301),
363-
nodeAttr, Collections.emptySet(), Version.CURRENT))
369+
nodeAttr, ROLES_WITH_ML, Version.CURRENT))
364370
.add(new DiscoveryNode("_node_name3", "_node_id3", new TransportAddress(InetAddress.getLoopbackAddress(), 9302),
365-
nodeAttr, Collections.emptySet(), Version.CURRENT))
371+
nodeAttr, ROLES_WITH_ML, Version.CURRENT))
366372
.build();
367373

368374
PersistentTasksCustomMetadata.Builder tasksBuilder = PersistentTasksCustomMetadata.builder();
@@ -465,11 +471,11 @@ public void testSelectLeastLoadedMlNode_concurrentOpeningJobsAndStaleFailedJob()
465471
Map<String, String> nodeAttr = Map.of(MachineLearning.MACHINE_MEMORY_NODE_ATTR, "1000000000");
466472
DiscoveryNodes nodes = DiscoveryNodes.builder()
467473
.add(new DiscoveryNode("_node_name1", "_node_id1", new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
468-
nodeAttr, Collections.emptySet(), Version.CURRENT))
474+
nodeAttr, ROLES_WITH_ML, Version.CURRENT))
469475
.add(new DiscoveryNode("_node_name2", "_node_id2", new TransportAddress(InetAddress.getLoopbackAddress(), 9301),
470-
nodeAttr, Collections.emptySet(), Version.CURRENT))
476+
nodeAttr, ROLES_WITH_ML, Version.CURRENT))
471477
.add(new DiscoveryNode("_node_name3", "_node_id3", new TransportAddress(InetAddress.getLoopbackAddress(), 9302),
472-
nodeAttr, Collections.emptySet(), Version.CURRENT))
478+
nodeAttr, ROLES_WITH_ML, Version.CURRENT))
473479
.build();
474480

475481
PersistentTasksCustomMetadata.Builder tasksBuilder = PersistentTasksCustomMetadata.builder();
@@ -532,9 +538,9 @@ public void testSelectLeastLoadedMlNode_noCompatibleJobTypeNodes() {
532538
Map<String, String> nodeAttr = Map.of(MachineLearning.MACHINE_MEMORY_NODE_ATTR, "1000000000");
533539
DiscoveryNodes nodes = DiscoveryNodes.builder()
534540
.add(new DiscoveryNode("_node_name1", "_node_id1", new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
535-
nodeAttr, Collections.emptySet(), Version.CURRENT))
541+
nodeAttr, ROLES_WITH_ML, Version.CURRENT))
536542
.add(new DiscoveryNode("_node_name2", "_node_id2", new TransportAddress(InetAddress.getLoopbackAddress(), 9301),
537-
nodeAttr, Collections.emptySet(), Version.CURRENT))
543+
nodeAttr, ROLES_WITH_ML, Version.CURRENT))
538544
.build();
539545

540546
PersistentTasksCustomMetadata.Builder tasksBuilder = PersistentTasksCustomMetadata.builder();
@@ -577,7 +583,7 @@ public void testSelectLeastLoadedMlNode_reasonsAreInDeterministicOrder() {
577583
"_node_id1",
578584
new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
579585
nodeAttr,
580-
Collections.emptySet(),
586+
ROLES_WITH_ML,
581587
Version.CURRENT
582588
)
583589
)
@@ -587,7 +593,7 @@ public void testSelectLeastLoadedMlNode_reasonsAreInDeterministicOrder() {
587593
"_node_id2",
588594
new TransportAddress(InetAddress.getLoopbackAddress(), 9301),
589595
nodeAttr,
590-
Collections.emptySet(),
596+
ROLES_WITH_ML,
591597
Version.CURRENT
592598
)
593599
)
@@ -639,9 +645,9 @@ public void testSelectLeastLoadedMlNode_noNodesMatchingModelSnapshotMinVersion()
639645
Map<String, String> nodeAttr = Map.of(MachineLearning.MACHINE_MEMORY_NODE_ATTR, "1000000000");
640646
DiscoveryNodes nodes = DiscoveryNodes.builder()
641647
.add(new DiscoveryNode("_node_name1", "_node_id1", new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
642-
nodeAttr, Collections.emptySet(), Version.fromString("6.2.0")))
648+
nodeAttr, ROLES_WITH_ML, Version.fromString("6.2.0")))
643649
.add(new DiscoveryNode("_node_name2", "_node_id2", new TransportAddress(InetAddress.getLoopbackAddress(), 9301),
644-
nodeAttr, Collections.emptySet(), Version.fromString("6.1.0")))
650+
nodeAttr, ROLES_WITH_ML, Version.fromString("6.1.0")))
645651
.build();
646652

647653
PersistentTasksCustomMetadata.Builder tasksBuilder = PersistentTasksCustomMetadata.builder();
@@ -677,9 +683,9 @@ public void testSelectLeastLoadedMlNode_jobWithRules() {
677683
Map<String, String> nodeAttr = Map.of(MachineLearning.MACHINE_MEMORY_NODE_ATTR, "1000000000");
678684
DiscoveryNodes nodes = DiscoveryNodes.builder()
679685
.add(new DiscoveryNode("_node_name1", "_node_id1", new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
680-
nodeAttr, Collections.emptySet(), Version.fromString("6.2.0")))
686+
nodeAttr, ROLES_WITH_ML, Version.fromString("6.2.0")))
681687
.add(new DiscoveryNode("_node_name2", "_node_id2", new TransportAddress(InetAddress.getLoopbackAddress(), 9301),
682-
nodeAttr, Collections.emptySet(), Version.fromString("6.4.0")))
688+
nodeAttr, ROLES_WITH_ML, Version.fromString("6.4.0")))
683689
.build();
684690

685691
PersistentTasksCustomMetadata.Builder tasksBuilder = PersistentTasksCustomMetadata.builder();
@@ -711,9 +717,9 @@ public void testSelectMlNodeOnlyOutOfCandidates() {
711717
Map<String, String> nodeAttr = Map.of(MachineLearning.MACHINE_MEMORY_NODE_ATTR, "1000000000");
712718
DiscoveryNodes nodes = DiscoveryNodes.builder()
713719
.add(new DiscoveryNode("_node_name1", "_node_id1", new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
714-
nodeAttr, Collections.emptySet(), Version.CURRENT))
720+
nodeAttr, ROLES_WITH_ML, Version.CURRENT))
715721
.add(new DiscoveryNode("_node_name2", "_node_id2", new TransportAddress(InetAddress.getLoopbackAddress(), 9301),
716-
nodeAttr, Collections.emptySet(), Version.CURRENT))
722+
nodeAttr, ROLES_WITH_ML, Version.CURRENT))
717723
.build();
718724

719725
PersistentTasksCustomMetadata.Builder tasksBuilder = PersistentTasksCustomMetadata.builder();
@@ -745,9 +751,9 @@ public void testSelectMlNodeOnlyOutOfCandidates() {
745751
public void testConsiderLazyAssignmentWithNoLazyNodes() {
746752
DiscoveryNodes nodes = DiscoveryNodes.builder()
747753
.add(new DiscoveryNode("_node_name1", "_node_id1", new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
748-
Collections.emptyMap(), Collections.emptySet(), Version.CURRENT))
754+
Collections.emptyMap(), ROLES_WITHOUT_ML, Version.CURRENT))
749755
.add(new DiscoveryNode("_node_name2", "_node_id2", new TransportAddress(InetAddress.getLoopbackAddress(), 9301),
750-
Collections.emptyMap(), Collections.emptySet(), Version.CURRENT))
756+
Collections.emptyMap(), ROLES_WITHOUT_ML, Version.CURRENT))
751757
.build();
752758

753759
ClusterState.Builder cs = ClusterState.builder(new ClusterName("_name"));
@@ -769,9 +775,9 @@ public void testConsiderLazyAssignmentWithNoLazyNodes() {
769775
public void testConsiderLazyAssignmentWithLazyNodes() {
770776
DiscoveryNodes nodes = DiscoveryNodes.builder()
771777
.add(new DiscoveryNode("_node_name1", "_node_id1", new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
772-
Collections.emptyMap(), Collections.emptySet(), Version.CURRENT))
778+
Collections.emptyMap(), ROLES_WITHOUT_ML, Version.CURRENT))
773779
.add(new DiscoveryNode("_node_name2", "_node_id2", new TransportAddress(InetAddress.getLoopbackAddress(), 9301),
774-
Collections.emptyMap(), Collections.emptySet(), Version.CURRENT))
780+
Collections.emptyMap(), ROLES_WITHOUT_ML, Version.CURRENT))
775781
.build();
776782

777783
ClusterState.Builder cs = ClusterState.builder(new ClusterName("_name"));
@@ -823,7 +829,7 @@ public void testMaximumPossibleNodeMemoryTooSmall() {
823829
public void testPerceivedCapacityAndMaxFreeMemory() {
824830
DiscoveryNodes nodes = DiscoveryNodes.builder()
825831
.add(new DiscoveryNode("not_ml_node_name", "_node_id", new TransportAddress(InetAddress.getLoopbackAddress(), 9300),
826-
Collections.emptyMap(), Collections.emptySet(), Version.CURRENT))
832+
Collections.emptyMap(), ROLES_WITHOUT_ML, Version.CURRENT))
827833
.add(new DiscoveryNode(
828834
"filled_ml_node_name",
829835
"filled_ml_node_id",
@@ -832,7 +838,7 @@ public void testPerceivedCapacityAndMaxFreeMemory() {
832838
.put(MachineLearning.MAX_JVM_SIZE_NODE_ATTR, "10")
833839
.put(MachineLearning.MACHINE_MEMORY_NODE_ATTR, Long.toString(ByteSizeValue.ofGb(30).getBytes()))
834840
.map(),
835-
Collections.emptySet(),
841+
ROLES_WITH_ML,
836842
Version.CURRENT))
837843
.add(new DiscoveryNode("not_filled_ml_node",
838844
"not_filled_ml_node_id",
@@ -841,7 +847,7 @@ public void testPerceivedCapacityAndMaxFreeMemory() {
841847
.put(MachineLearning.MAX_JVM_SIZE_NODE_ATTR, "10")
842848
.put(MachineLearning.MACHINE_MEMORY_NODE_ATTR, Long.toString(ByteSizeValue.ofGb(30).getBytes()))
843849
.map(),
844-
Collections.emptySet(),
850+
ROLES_WITH_ML,
845851
Version.CURRENT))
846852
.add(new DiscoveryNode("not_filled_smaller_ml_node",
847853
"not_filled_smaller_ml_node_id",
@@ -850,7 +856,7 @@ public void testPerceivedCapacityAndMaxFreeMemory() {
850856
.put(MachineLearning.MAX_JVM_SIZE_NODE_ATTR, "10")
851857
.put(MachineLearning.MACHINE_MEMORY_NODE_ATTR, Long.toString(ByteSizeValue.ofGb(10).getBytes()))
852858
.map(),
853-
Collections.emptySet(),
859+
ROLES_WITH_ML,
854860
Version.CURRENT))
855861
.build();
856862

@@ -894,7 +900,7 @@ private ClusterState.Builder fillNodesWithRunningJobs(Map<String, String> nodeAt
894900
for (int i = 0; i < numNodes; i++) {
895901
String nodeId = "_node_id" + i;
896902
TransportAddress address = new TransportAddress(InetAddress.getLoopbackAddress(), 9300 + i);
897-
nodes.add(new DiscoveryNode("_node_name" + i, nodeId, address, nodeAttr, Collections.emptySet(), Version.CURRENT));
903+
nodes.add(new DiscoveryNode("_node_name" + i, nodeId, address, nodeAttr, ROLES_WITH_ML, Version.CURRENT));
898904
for (int j = 0; j < numRunningJobsPerNode; j++) {
899905
int id = j + (numRunningJobsPerNode * i);
900906
// Both anomaly detector jobs and data frame analytics jobs should count towards the limit

0 commit comments

Comments
 (0)