Beispiel #1
0
 def finalize_done(self, stu, retcode, start_time, end_time, *kwd):
     self.log.info('[Worker_%d] Process finalize, status=%s' %
                   (self.id, ProcessStatus.describe(stu)))
     if stu == ProcessStatus.SUCCESS:
         self.finialized = True
         self.status = WorkerStatus.FINALIZED
     else:
         self.status = WorkerStatus.FINALIZE_FAIL
     self.workeragent.finalize_done(self.id, retcode,
                                    ProcessStatus.describe(stu))
Beispiel #2
0
 def task_done(self, stu, retcode, start_time, end_time, logfile_path):
     self.log.info(
         '[Worker_%d] Task %s finish, status=%s' %
         (self.id, str(self.running_task.tid), ProcessStatus.describe(stu)))
     if stu == ProcessStatus.SUCCESS:
         self.running_task.complete(start_time, end_time)
         if logfile_path and logfile_path.endswith('.tmp'):
             os.rename(logfile_path, logfile_path[:-4])
     else:
         self.running_task.fail(start_time, end_time,
                                ProcessStatus.describe(stu))
         if logfile_path and logfile_path.endswith('.tmp'):
             os.rename(logfile_path, logfile_path[:-3] + 'err')
     self.finish_task = self.running_task
     #if self.status == WorkerStatus.IDLE:
     self.cond.acquire()
     self.cond.notify()
     self.cond.release()
Beispiel #3
0
    def run(self):
        init_try = 0
        ret = 0
        while not self.get_stop_flag():
            while not self.initialized and not self.setup_flag:
                self.cond.acquire()
                self.cond.wait()
                self.cond.release()
            if not self.initialized:
                if init_try < Config.Config.getPolicyattr('initial_try_time'):
                    init_try += 1
                    #print "<worker_%d> setup process"%self.id
                    ret = self.setup(self.workeragent.iniExecutor)
                    #print "<worker_%d> self.process =%s"%(self.id,self.process is None)
                    if ret != 0:
                        continue
                self.workeragent.setup_done(self.id, ret,
                                            ProcessStatus.describe(ret))
                self.process.start()

            if self.initialized:
                # ask for tasks
                tmptime = 0  # times of ask tasks
                while not self.fin_flag:
                    task = self.workeragent.getTask()
                    if task is None:
                        tmptime += 1
                        if tmptime == 5:
                            tmptime = 0
                            self.idle()
                        continue
                    #print 'worker %d running task %d'%(self.id,task.tid)
                    self.do_task(task)
                    # wait for process return result
                    self.cond.acquire()
                    self.cond.wait()
                    self.cond.release()

                    self.running_task = None
                    self.workeragent.task_done(self.finish_task)
                    self.finish_task = None
            # TODO need to wait for all worker?
            #else:
            #    wlog.info('[Worker_%d] Initialization Error, wait for stop'%self.id)
            #    self.cond.acquire()
            #    self.cond.wait()
            #    self.cond.release()
            wlog.debug('[Worker_%d] Finalize task = %s' %
                       (self.id, self.workeragent.finExecutor))
            self.finalize(self.workeragent.finExecutor)
            if ret == ProcessStatus.SUCCESS:
                self.status = WorkerStatus.FINALIZING
            self.workeragent.set_status(self.id, self.status)
            #self.workeragent.finalize_done(self.id,ret)
            while self.finialized:
                time.sleep(0.1)
            #self.process.stop()
            self.process.wait()
            wlog.info("[Worker_%d] Stop..." % self.id)
            self.stop()
        wlog.info('[Worker_%d] Exit run method' % self.id)