|
@@ -57,7 +57,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
public void setup() {
|
|
|
memoryTracker = mock(MlMemoryTracker.class);
|
|
|
isMemoryTrackerRecentlyRefreshed = true;
|
|
|
- when(memoryTracker.isRecentlyRefreshed()).thenReturn(isMemoryTrackerRecentlyRefreshed);
|
|
|
+ when(memoryTracker.isRecentlyRefreshed()).thenReturn(isMemoryTrackerRecentlyRefreshed, false);
|
|
|
when(memoryTracker.getAnomalyDetectorJobMemoryRequirement(anyString())).thenReturn(JOB_MEMORY_REQUIREMENT.getBytes());
|
|
|
when(memoryTracker.getDataFrameAnalyticsJobMemoryRequirement(anyString())).thenReturn(JOB_MEMORY_REQUIREMENT.getBytes());
|
|
|
when(memoryTracker.getJobMemoryRequirement(anyString(), anyString())).thenReturn(JOB_MEMORY_REQUIREMENT.getBytes());
|
|
@@ -118,7 +118,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
Job job = jobBuilder.build();
|
|
|
JobNodeSelector jobNodeSelector = new JobNodeSelector(cs.build(), job.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job));
|
|
|
- PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertEquals("", result.getExplanation());
|
|
|
assertEquals("_node_id3", result.getExecutorNode());
|
|
|
}
|
|
@@ -140,7 +140,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
JobNodeSelector jobNodeSelector = new JobNodeSelector(cs.build(), job.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job));
|
|
|
PersistentTasksCustomMetadata.Assignment result =
|
|
|
- jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNull(result.getExecutorNode());
|
|
|
assertThat(result.getExplanation(), containsString("because this node is full. Number of opened jobs ["
|
|
|
+ maxRunningJobsPerNode + "], xpack.ml.max_open_jobs [" + maxRunningJobsPerNode + "]"));
|
|
@@ -164,7 +164,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
MlTasks.DATA_FRAME_ANALYTICS_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportStartDataFrameAnalyticsAction.TaskExecutor.nodeFilter(node, createTaskParams(dataFrameAnalyticsId)));
|
|
|
PersistentTasksCustomMetadata.Assignment result =
|
|
|
- jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNull(result.getExecutorNode());
|
|
|
assertThat(result.getExplanation(), containsString("because this node is full. Number of opened jobs ["
|
|
|
+ maxRunningJobsPerNode + "], xpack.ml.max_open_jobs [" + maxRunningJobsPerNode + "]"));
|
|
@@ -193,7 +193,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
JobNodeSelector jobNodeSelector = new JobNodeSelector(cs.build(), job.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job));
|
|
|
PersistentTasksCustomMetadata.Assignment result =
|
|
|
- jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNull(result.getExecutorNode());
|
|
|
assertThat(result.getExplanation(), containsString("because this node has insufficient available memory. "
|
|
|
+ "Available memory for ML [" + currentlyRunningJobMemory + "], memory required by existing jobs ["
|
|
@@ -217,7 +217,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
MlTasks.DATA_FRAME_ANALYTICS_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportStartDataFrameAnalyticsAction.TaskExecutor.nodeFilter(node, createTaskParams(dataFrameAnalyticsId)));
|
|
|
PersistentTasksCustomMetadata.Assignment result =
|
|
|
- jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNotNull(result.getExecutorNode());
|
|
|
}
|
|
|
|
|
@@ -239,7 +239,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
JobNodeSelector jobNodeSelector = new JobNodeSelector(cs.build(), job.getId(), MlTasks.JOB_TASK_NAME, memoryTracker,
|
|
|
0, node -> TransportOpenJobAction.nodeFilter(node, job));
|
|
|
PersistentTasksCustomMetadata.Assignment result =
|
|
|
- jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNull(result.getExecutorNode());
|
|
|
assertThat(result.getExplanation(), containsString("because this node has insufficient available memory. "
|
|
|
+ "Available memory for ML [" + (firstJobTotalMemory - 1)
|
|
@@ -270,7 +270,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
MlTasks.DATA_FRAME_ANALYTICS_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportStartDataFrameAnalyticsAction.TaskExecutor.nodeFilter(node, createTaskParams(dataFrameAnalyticsId)));
|
|
|
PersistentTasksCustomMetadata.Assignment result =
|
|
|
- jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNull(result.getExecutorNode());
|
|
|
assertThat(result.getExplanation(), containsString("because this node has insufficient available memory. "
|
|
|
+ "Available memory for ML [" + currentlyRunningJobMemory + "], memory required by existing jobs ["
|
|
@@ -296,7 +296,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
MlTasks.DATA_FRAME_ANALYTICS_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportStartDataFrameAnalyticsAction.TaskExecutor.nodeFilter(node, createTaskParams(dataFrameAnalyticsId)));
|
|
|
PersistentTasksCustomMetadata.Assignment result =
|
|
|
- jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ jobNodeSelector.selectNode(maxRunningJobsPerNode, 2, maxMachineMemoryPercent, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNull(result.getExecutorNode());
|
|
|
assertThat(result.getExplanation(), containsString("because this node has insufficient available memory. "
|
|
|
+ "Available memory for ML [" + (firstJobTotalMemory - 1)
|
|
@@ -325,7 +325,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
|
|
|
JobNodeSelector jobNodeSelector = new JobNodeSelector(cs.build(), job.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job));
|
|
|
- PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(20, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(20, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertTrue(result.getExplanation().contains("because this node isn't a ml node"));
|
|
|
assertNull(result.getExecutorNode());
|
|
|
}
|
|
@@ -362,7 +362,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
ClusterState cs = csBuilder.build();
|
|
|
JobNodeSelector jobNodeSelector = new JobNodeSelector(cs, job6.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job6));
|
|
|
- PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertEquals("_node_id3", result.getExecutorNode());
|
|
|
|
|
|
tasksBuilder = PersistentTasksCustomMetadata.builder(tasks);
|
|
@@ -376,7 +376,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
Job job7 = BaseMlIntegTestCase.createFareQuoteJob("job_id7", JOB_MEMORY_REQUIREMENT).build(new Date());
|
|
|
jobNodeSelector = new JobNodeSelector(cs, job7.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job7));
|
|
|
- result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNull("no node selected, because OPENING state", result.getExecutorNode());
|
|
|
assertTrue(result.getExplanation().contains("because node exceeds [2] the maximum number of jobs [2] in opening state"));
|
|
|
|
|
@@ -390,7 +390,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
cs = csBuilder.build();
|
|
|
jobNodeSelector = new JobNodeSelector(cs, job7.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job7));
|
|
|
- result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNull("no node selected, because stale task", result.getExecutorNode());
|
|
|
assertTrue(result.getExplanation().contains("because node exceeds [2] the maximum number of jobs [2] in opening state"));
|
|
|
|
|
@@ -403,7 +403,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
cs = csBuilder.build();
|
|
|
jobNodeSelector = new JobNodeSelector(cs, job7.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job7));
|
|
|
- result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNull("no node selected, because null state", result.getExecutorNode());
|
|
|
assertTrue(result.getExplanation().contains("because node exceeds [2] the maximum number of jobs [2] in opening state"));
|
|
|
}
|
|
@@ -445,7 +445,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
// Allocation won't be possible if the stale failed job is treated as opening
|
|
|
JobNodeSelector jobNodeSelector = new JobNodeSelector(cs, job7.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job7));
|
|
|
- PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertEquals("_node_id1", result.getExecutorNode());
|
|
|
|
|
|
tasksBuilder = PersistentTasksCustomMetadata.builder(tasks);
|
|
@@ -458,7 +458,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
Job job8 = BaseMlIntegTestCase.createFareQuoteJob("job_id8", JOB_MEMORY_REQUIREMENT).build(new Date());
|
|
|
jobNodeSelector = new JobNodeSelector(cs, job8.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job8));
|
|
|
- result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNull("no node selected, because OPENING state", result.getExecutorNode());
|
|
|
assertTrue(result.getExplanation().contains("because node exceeds [2] the maximum number of jobs [2] in opening state"));
|
|
|
}
|
|
@@ -492,7 +492,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
cs.metadata(metadata);
|
|
|
JobNodeSelector jobNodeSelector = new JobNodeSelector(cs.build(), job.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job));
|
|
|
- PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertThat(result.getExplanation(), containsString("because this node does not support jobs of type [incompatible_type]"));
|
|
|
assertNull(result.getExecutorNode());
|
|
|
}
|
|
@@ -524,7 +524,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
cs.metadata(metadata);
|
|
|
JobNodeSelector jobNodeSelector = new JobNodeSelector(cs.build(), job.getId(),
|
|
|
MlTasks.JOB_TASK_NAME, memoryTracker, 0, node -> TransportOpenJobAction.nodeFilter(node, job));
|
|
|
- PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertThat(result.getExplanation(), containsString(
|
|
|
"because the job's model snapshot requires a node of version [6.3.0] or higher"));
|
|
|
assertNull(result.getExecutorNode());
|
|
@@ -554,7 +554,7 @@ public class JobNodeSelectorTests extends ESTestCase {
|
|
|
Job job = TransportOpenJobActionTests.jobWithRules("job_with_rules");
|
|
|
JobNodeSelector jobNodeSelector = new JobNodeSelector(cs.build(), job.getId(), MlTasks.JOB_TASK_NAME, memoryTracker, 0,
|
|
|
node -> TransportOpenJobAction.nodeFilter(node, job));
|
|
|
- PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed);
|
|
|
+ PersistentTasksCustomMetadata.Assignment result = jobNodeSelector.selectNode(10, 2, 30, isMemoryTrackerRecentlyRefreshed, false);
|
|
|
assertNotNull(result.getExecutorNode());
|
|
|
}
|
|
|
|