def run_loop(self, *cmds): self.logger.info("worker for %s started" % (",".join(map(CMD._get_name, cmds)))) while self.running: try: rpc = self.rpc_connect() pending_jobs = [] try: for cmd in cmds: vps_id = rpc.todo(cmd) self.logger_debug.info("cmd:%s, vps_id:%s" % (CMD._get_name(cmd), vps_id)) if vps_id > 0: vps_info = rpc.vps(vps_id) if not self.vps_is_valid(vps_info): self.logger.error( "invalid vps data received, cmd=%s, %s" % (CMD._get_name(cmd), self.dump_vps_info(vps_info))) self.done_task( cmd, vps_id, False, "invalid vpsinfo") vps_info = None else: pending_jobs.append((cmd, vps_id, vps_info)) finally: rpc.close() for cmd, vps_id, vps_info in pending_jobs: if not self.running: break self.run_once(cmd, vps_id, vps_info) except (socket.error, RPC_Exception), e: self.logger_net.exception(e) except Exception, e: self.logger.exception("uncaught exception: " + str(e))
def run_loop(self, *cmds): self.logger.info("worker for %s started" % (",".join(map(CMD._get_name, cmds)))) while self.running: try: rpc = self.rpc_connect() pending_jobs = [] try: for cmd in cmds: vps_id = rpc.todo(cmd) self.logger_debug.info("cmd:%s, vps_id:%s" % (CMD._get_name(cmd), vps_id)) if vps_id > 0: vps_info = rpc.vps(vps_id) if not self.vps_is_valid(vps_info): self.logger.error( "invalid vps data received, cmd=%s, %s" % (CMD._get_name(cmd), self.dump_vps_info(vps_info))) self.done_task(cmd, vps_id, False, "invalid vpsinfo") vps_info = None else: pending_jobs.append((cmd, vps_id, vps_info)) finally: rpc.close() for cmd, vps_id, vps_info in pending_jobs: if not self.running: break self.run_once(cmd, vps_id, vps_info) except (socket.error, RPC_Exception), e: self.logger_net.exception(e) except Exception, e: self.logger.exception("uncaught exception: " + str(e))
def _try_lock_vps(self, cmd, vps_id): self._locker.acquire() if self._vps_locker.has_key(vps_id): _cmd = self._vps_locker.get(vps_id) self.logger_debug.info("CMD %s try to lock vps%s failed: locked by CMD %s" % ( CMD._get_name(cmd), vps_id, CMD._get_name(_cmd) )) res = False else: self._vps_locker[vps_id] = cmd res = True self._locker.release() return res
def _try_lock_vps(self, cmd, vps_id): self._locker.acquire() if self._vps_locker.has_key(vps_id): _cmd = self._vps_locker.get(vps_id) self.logger_debug.info( "CMD %s try to lock vps%s failed: locked by CMD %s" % (CMD._get_name(cmd), vps_id, CMD._get_name(_cmd))) res = False else: self._vps_locker[vps_id] = cmd res = True self._locker.release() return res
def doing(self, cmd, vps_id): try: rpc = self.rpc_connect() try: rpc.doing(cmd, vps_id) self.logger.info("send doing cmd=%s vps_id=%s" % (CMD._get_name(cmd), vps_id)) finally: rpc.close() except Exception, e: self.logger_net.exception(e)
def done_task(self, cmd, vps_id, is_ok, msg=''): state = 0 if not is_ok: state = 1 try: rpc = self.rpc_connect() try: self.logger.info("send done_task cmd=%s vps_id=%s" % (CMD._get_name(cmd), str(vps_id))) rpc.done(cmd, vps_id, state, msg) finally: rpc.close() except Exception, e: self.logger_net.exception(e)