|
|
@@ -11,10 +11,9 @@ import org.elasticsearch.cluster.node.DiscoveryNode;
|
|
|
import org.elasticsearch.common.Strings;
|
|
|
import org.elasticsearch.persistent.PersistentTasksCustomMetadata;
|
|
|
import org.elasticsearch.xpack.core.ml.MlTasks;
|
|
|
-import org.elasticsearch.xpack.core.ml.action.OpenJobAction;
|
|
|
-import org.elasticsearch.xpack.core.ml.job.config.JobState;
|
|
|
+import org.elasticsearch.xpack.core.ml.utils.MemoryTrackedTaskState;
|
|
|
+import org.elasticsearch.xpack.core.ml.utils.MlTaskParams;
|
|
|
import org.elasticsearch.xpack.ml.MachineLearning;
|
|
|
-import org.elasticsearch.xpack.ml.job.snapshot.upgrader.SnapshotUpgradeTaskParams;
|
|
|
import org.elasticsearch.xpack.ml.process.MlMemoryTracker;
|
|
|
import org.elasticsearch.xpack.ml.utils.NativeMemoryCalculator;
|
|
|
|
|
|
@@ -23,6 +22,7 @@ import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.OptionalLong;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
public class NodeLoadDetector {
|
|
|
@@ -80,27 +80,16 @@ public class NodeLoadDetector {
|
|
|
|
|
|
private void updateLoadGivenTasks(NodeLoad.Builder nodeLoad, PersistentTasksCustomMetadata persistentTasks) {
|
|
|
if (persistentTasks != null) {
|
|
|
- // find all the anomaly detector job tasks assigned to this node
|
|
|
- Collection<PersistentTasksCustomMetadata.PersistentTask<?>> assignedAnomalyDetectorTasks = persistentTasks.findTasks(
|
|
|
- MlTasks.JOB_TASK_NAME, task -> nodeLoad.getNodeId().equals(task.getExecutorNode()));
|
|
|
- for (PersistentTasksCustomMetadata.PersistentTask<?> assignedTask : assignedAnomalyDetectorTasks) {
|
|
|
- JobState jobState = MlTasks.getJobStateModifiedForReassignments(assignedTask);
|
|
|
- OpenJobAction.JobParams params = (OpenJobAction.JobParams) assignedTask.getParams();
|
|
|
- nodeLoad.adjustForAnomalyJob(jobState, params == null ? null : params.getJobId(), mlMemoryTracker);
|
|
|
- }
|
|
|
- Collection<PersistentTasksCustomMetadata.PersistentTask<?>> assignedShapshotUpgraderTasks = persistentTasks.findTasks(
|
|
|
- MlTasks.JOB_SNAPSHOT_UPGRADE_TASK_NAME, task -> nodeLoad.getNodeId().equals(task.getExecutorNode()));
|
|
|
- for (PersistentTasksCustomMetadata.PersistentTask<?> assignedTask : assignedShapshotUpgraderTasks) {
|
|
|
- SnapshotUpgradeTaskParams params = (SnapshotUpgradeTaskParams) assignedTask.getParams();
|
|
|
- nodeLoad.adjustForAnomalyJob(JobState.OPENED, params == null ? null : params.getJobId(), mlMemoryTracker);
|
|
|
+ Collection<PersistentTasksCustomMetadata.PersistentTask<?>> memoryTrackedTasks = findAllMemoryTrackedTasks(
|
|
|
+ persistentTasks, nodeLoad.getNodeId());
|
|
|
+ for (PersistentTasksCustomMetadata.PersistentTask<?> task : memoryTrackedTasks) {
|
|
|
+ MemoryTrackedTaskState state = MlTasks.getMemoryTrackedTaskState(task);
|
|
|
+ if (state == null || state.consumesMemory()) {
|
|
|
+ MlTaskParams taskParams = (MlTaskParams) task.getParams();
|
|
|
+ nodeLoad.addTask(task.getTaskName(), taskParams.getMlId(), state.isAllocating(), mlMemoryTracker);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- // find all the data frame analytics job tasks assigned to this node
|
|
|
- Collection<PersistentTasksCustomMetadata.PersistentTask<?>> assignedAnalyticsTasks = persistentTasks.findTasks(
|
|
|
- MlTasks.DATA_FRAME_ANALYTICS_TASK_NAME, task -> nodeLoad.getNodeId().equals(task.getExecutorNode()));
|
|
|
- for (PersistentTasksCustomMetadata.PersistentTask<?> assignedTask : assignedAnalyticsTasks) {
|
|
|
- nodeLoad.adjustForAnalyticsJob(assignedTask, mlMemoryTracker);
|
|
|
- }
|
|
|
// if any jobs are running then the native code will be loaded, but shared between all jobs,
|
|
|
// so increase the total memory usage of the assigned jobs to account for this
|
|
|
if (nodeLoad.getNumAssignedJobs() > 0) {
|
|
|
@@ -109,4 +98,18 @@ public class NodeLoadDetector {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private static Collection<PersistentTasksCustomMetadata.PersistentTask<?>> findAllMemoryTrackedTasks(
|
|
|
+ PersistentTasksCustomMetadata persistentTasks, String nodeId) {
|
|
|
+ return persistentTasks.tasks().stream()
|
|
|
+ .filter(NodeLoadDetector::isMemoryTrackedTask)
|
|
|
+ .filter(task -> nodeId.equals(task.getExecutorNode()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ private static boolean isMemoryTrackedTask(PersistentTasksCustomMetadata.PersistentTask<?> task) {
|
|
|
+ return MlTasks.JOB_TASK_NAME.equals(task.getTaskName())
|
|
|
+ || MlTasks.JOB_SNAPSHOT_UPGRADE_TASK_NAME.equals(task.getTaskName())
|
|
|
+ || MlTasks.DATA_FRAME_ANALYTICS_TASK_NAME.equals(task.getTaskName());
|
|
|
+ }
|
|
|
+
|
|
|
}
|