Exemple #1
0
    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)
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
 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()
Exemple #5
0
    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