def tick(self): for framework_name in self.filters.keys(): new_duration = self.filters[framework_name] - 1 self.filters[framework_name] = new_duration if new_duration <= 0: event_data = { "framework_name": framework_name } publish_event(self, "clear_filter", event_data) print 'Clearing filter for framework %s' % framework_name del self.filters[framework_name] for framework_name in self.frameworks.keys(): for task_name in self.frameworks[framework_name].keys(): if self.frameworks[framework_name][task_name].duration is None: # Task never terminates. continue new_duration = self.frameworks[framework_name][task_name].duration - 1 self.frameworks[framework_name][task_name].duration = new_duration if new_duration <= 0: print('Task %s completed' % task_name) del self.frameworks[framework_name][task_name] update = Update(self.name, framework_name, task_name, "FINISHED") self.allocator.status_update(update)
def tick(self): for framework_name in self.filters.keys(): new_duration = self.filters[framework_name] - 1 self.filters[framework_name] = new_duration if new_duration <= 0: event_data = {"framework_name": framework_name} publish_event(self, "clear_filter", event_data) print 'Clearing filter for framework %s' % framework_name del self.filters[framework_name] for framework_name in self.frameworks.keys(): for task_name in self.frameworks[framework_name].keys(): if self.frameworks[framework_name][task_name].duration is None: # Task never terminates. continue new_duration = self.frameworks[framework_name][ task_name].duration - 1 self.frameworks[framework_name][ task_name].duration = new_duration if new_duration <= 0: print('Task %s completed' % task_name) del self.frameworks[framework_name][task_name] update = Update(self.name, framework_name, task_name, "FINISHED") self.allocator.status_update(update)
def recover(self, agent_name, resources, user_name): event_data = { "agent_name": agent_name, "resources": resources, "user_name": user_name, } publish_event(self, "recover_resources", event_data) self.agents[agent_name].drf.recover(user_name, resources)
def launch(self, task): publish_event(self, "launch_task", task) if task.framework_name not in self.frameworks: self.frameworks[task.framework_name] = {} if task.task_name in self.frameworks[task.framework_name]: print("WARNING: Overriding task %s on agent %s" % (task.task_name, self.name)) self.frameworks[task.framework_name][task.task_name] = task
def decline(self, framework_name, offer, refuse_steps=5): event_data = { "framework_name": framework_name, "agent_name": offer.agent.name, "resources": offer.resources, "filter_duration": refuse_steps, } publish_event(self, "decline_offer", event_data) offer.agent.add_filter(framework_name, refuse_steps) self.recover(offer.agent.name, offer.resources, framework_name)
def launch(self, task, offer): for i in range(len(task.resources.vector)): if task.resources.vector[i] > offer.resources.vector[i]: print("Framework tried to launch larger task than offer resources") return recover = offer.resources.subtract(task.resources) self.recover(offer.agent.name, recover, task.framework_name) # Schedule task on agent self.agents[offer.agent.name].launch(task) # Save reference to task to keep track of resources to free up. if task.framework_name not in self.tasks: self.tasks[task.framework_name] = {} publish_event(self, "launch_task", task) self.tasks[task.framework_name][task.task_name] = task
def launch(self, task, offer): for i in range(len(task.resources.vector)): if task.resources.vector[i] > offer.resources.vector[i]: print( "Framework tried to launch larger task than offer resources" ) return recover = offer.resources.subtract(task.resources) self.recover(offer.agent.name, recover, task.framework_name) # Schedule task on agent self.agents[offer.agent.name].launch(task) # Save reference to task to keep track of resources to free up. if task.framework_name not in self.tasks: self.tasks[task.framework_name] = {} publish_event(self, "launch_task", task) self.tasks[task.framework_name][task.task_name] = task
def allocate(self): for agent_name, agent in self.agents.iteritems(): order = agent.drf.order() if len(order) == 0: print("No frameworks to serve") return resources = agent.drf.available() # Ensure we haven't exhausted resources on the agent. out_of_capacity = False for resource in resources.vector: if resource <= 0: print("Agent %s is out of capacity" % agent_name) out_of_capacity = True if out_of_capacity: continue # Offer all available resources to first framework. for framework_name, _ in order: print 'Allocator considering framework %s' % framework_name if agent.get_filter(framework_name): print 'Framework %s is filtered: continue' % framework_name continue agent.drf.allocate(framework_name, resources) # Form offer to scheduler offer = Offer(agent, resources) event_data = { "agent_name": agent.name, "framework_name": framework_name, "resources": resources, } publish_event(self, "resource_offer", event_data) self.frameworks[framework_name].offer([offer]) break
def add_framework(self, framework): publish_event(self, "add_framework", framework.name) self.frameworks[framework.name] = framework for agent_name, agent in self.agents.iteritems(): agent.add_framework(framework.name)
def remove_agent(self, name): event_data = {"agent_name": name} publish_event(self, "remove_agent", event_data) pass
def add_filter(self, framework_name, duration): event_data = { "framework_name": framework_name, "duration": duration } publish_event(self, "add_filter", event_data) print 'Adding filter with duration %s for framework %s' % (duration, framework_name) self.filters[framework_name] = duration
def add_framework(self, name): publish_event(self, "add_framework", name) self.drf.add_user(name)
def remove_agent(self, name): event_data = { "agent_name": name } publish_event(self, "remove_agent", event_data) pass
def add_filter(self, framework_name, duration): event_data = {"framework_name": framework_name, "duration": duration} publish_event(self, "add_filter", event_data) print 'Adding filter with duration %s for framework %s' % ( duration, framework_name) self.filters[framework_name] = duration
def add_agent(self, name, resources): event_data = {"agent_name": name, "resources": resources} publish_event(self, "add_agent", event_data) self.agents[name] = Agent(name, resources, self)
def add_agent(self, name, resources): event_data = { "agent_name": name, "resources": resources } publish_event(self, "add_agent", event_data) self.agents[name] = Agent(name, resources, self)