def launchTasks(self, offerId, tasks, filters=None): """ Keeps track of the task and its launched resources before launching. """ consumedResources = self.consumedResources[offerId.value] for task in tasks: # Update the resource offer with the task resources. chunk_utils.incrementResources(consumedResources, task.resources) # Add the task to the tracked tasked. self.pendingTasks.addTask(task) TaskChunkSchedulerDriver.launchTasks(self, offerId, tasks, filters)
def __init__(self, scheduler, framework, master, outerScheduler=None): if not isinstance(scheduler, TaskStealingScheduler): scheduler = TaskStealingScheduler(scheduler) # Wrap the outer scheduler with the driver overriding wrapper. if not outerScheduler: outerScheduler = chunk_utils.DriverOverridingScheduler(scheduler, self) TaskChunkSchedulerDriver.__init__(self, scheduler, framework, master, outerScheduler) self.consumedResources = defaultdict(lambda: mesos_pb2.Offer().resources) self.pendingTasks = chunk_utils.TaskTable()
def killSubTasks(self, subTaskIds): """ Kills the sub tasks with the given IDs, and clears them from the table. """ subTasks = [] parentIds = [] for subTaskId in subTaskIds: # Backwards compatibility for passing sub tasks instead of IDs. if isinstance(subTaskId, mesos_pb2.TaskInfo): subTaskId = subTaskId.task_id parent = self.pendingTasks.getParent(subTaskId) parentIds.append(parent.task_id) subTask = self.pendingTasks[subTaskId] subTasks.append(subTask) del self.pendingTasks[subTaskId] TaskChunkSchedulerDriver.killSubTasks(self, subTasks) return zip(parentIds, subTasks)