def resourceOffers(self, driver, offers): print "Got %d resource offers" % len(offers) for offer in offers: tasks = [] print "Got resource offer %s" % offer.id.value if self.tasksLaunched < TOTAL_TASKS: tid = self.tasksLaunched self.tasksLaunched += 1 print "Accepting offer on %s to start task %d" % ( offer.hostname, tid) task = mesos_pb2.TaskDescription() task.task_id.value = str(tid) task.slave_id.value = offer.slave_id.value task.name = "task %d" % tid cpus = task.resources.add() cpus.name = "cpus" cpus.type = mesos_pb2.Resource.SCALAR cpus.scalar.value = TASK_CPUS mem = task.resources.add() mem.name = "mem" mem.type = mesos_pb2.Resource.SCALAR mem.scalar.value = TASK_MEM tasks.append(task) driver.launchTasks(offer.id, tasks)
def create_task(self, offer, t): task = mesos_pb2.TaskDescription() task.task_id.value = str(t.id) task.slave_id.value = offer.slave_id.value task.name = "task %s/%d" % (t.id, self.options.tasks) env = dict(os.environ) env['DRUN_RANK'] = str(t.id) env['DRUN_SIZE'] = str(self.options.tasks) if self.options.expand: for i, x in enumerate(self.command): self.command[i] = x % { 'RANK': t.id, 'SIZE': self.options.tasks } task.data = pickle.dumps([ os.getcwd(), self.command, env, self.options.shell, self.std_port, self.err_port ]) cpu = task.resources.add() cpu.name = "cpus" cpu.type = 0 # mesos_pb2.Value.SCALAR cpu.scalar.value = self.cpus mem = task.resources.add() mem.name = "mem" mem.type = 0 # mesos_pb2.Value.SCALAR mem.scalar.value = self.mem return task
def createTask(self, o, job, t): task = mesos_pb2.TaskDescription() tid = "%s:%s:%s" % (job.id, t.id, t.tried) task.name = "task %s" % tid task.task_id.value = tid task.slave_id.value = o.slave_id.value task.data = cPickle.dumps((t, 1), -1) if len(task.data) > 10 * 1024: logger.warning("task too large: %s %d", t, len(task.data)) cpu = task.resources.add() cpu.name = 'cpus' cpu.type = 0 #mesos_pb2.Value.SCALAR cpu.scalar.value = self.cpus mem = task.resources.add() mem.name = 'mem' mem.type = 0 #mesos_pb2.Value.SCALAR mem.scalar.value = self.mem return task
def resourceOffer(self, driver, oid, offers): print "Got offer %s" % oid.value tasks = [] if self.tasksLaunched == TOTAL_TASKS: print "Rejecting permanently because we have already started" driver.replyToOffer(oid, tasks, {"timeout": "-1"}) return for offer in offers: print "Considering slot on %s" % offer.hostname cpus = 0 mem = 0 for r in offer.resources: if r.name == "cpus": cpus = r.scalar.value elif r.name == "mem": mem = r.scalar.value if cpus < CPUS or mem < MEM: print "Rejecting slot due to too few resources" elif self.tasksLaunched < TOTAL_TASKS: tid = self.tasksLaunched print "Accepting slot to start mpd %d" % tid task = mesos_pb2.TaskDescription() task.task_id.value = str(tid) task.slave_id.value = offer.slave_id.value task.name = "task %d" % tid cpus = task.resources.add() cpus.name = "cpus" cpus.type = mesos_pb2.Resource.SCALAR cpus.scalar.value = CPUS mem = task.resources.add() mem.name = "mem" mem.type = mesos_pb2.Resource.SCALAR mem.scalar.value = MEM tasks.append(task) self.tasksLaunched += 1 else: print "Rejecting slot because we've launched enough tasks" print "Replying to offer!" driver.replyToOffer(oid, tasks, {"timeout": "-1"}) if self.tasksLaunched == TOTAL_TASKS: threading.Thread(target=mpiexec, args=[driver]).start()
def create_task(self, offer, t, command, k): task = mesos_pb2.TaskDescription() task.task_id.value = str(t.id) task.slave_id.value = offer.slave_id.value task.name = "task %s" % t.id env = dict(os.environ) task.data = pickle.dumps([ os.getcwd(), command, env, self.options.shell, self.std_port, self.err_port ]) cpu = task.resources.add() cpu.name = "cpus" cpu.type = 0 #mesos_pb2.Value.SCALAR cpu.scalar.value = self.cpus * k mem = task.resources.add() mem.name = "mem" mem.type = 0 #mesos_pb2.Value.SCALAR mem.scalar.value = self.mem * k return task