def handle(self): logger.debug("new connection from '%s'", self.client_address) response = "" err = "" while True: self.data = self.rfile.readline().strip() if not self.data: break logger.debug("received: '%s'", self.data) try: uj = UpqQueueMngr().new_job_by_string(self.data) if isinstance(uj, UpqJob): if uj.check(): self.wfile.write("ACK " + uj.msgstr + "\n") else: self.wfile.write("ERR " + uj.msgstr + "\n") else: msg = "Unknown command: %s" % self.data logger.debug(msg) self.wfile.write("ERR " + msg + '\n') break except Exception as e: logger.error("Exception on job: %s" % (traceback.format_exc(100))) self.wfile.write("ERR Exception caught while handling job\n") logger.debug("sent: '%s'", uj.msgstr) logger.debug("end of transmission")
def _retrywait(self, tries, waittime): """ redo job 'tries' (int) times, waiting 'waittime' (int) seconds before each run """ if waittime: log.getLogger().info("Waiting %d seconds before retry.", waittime) time.sleep(waittime) if self.jobdata['job']['retries'] >= tries: log.getLogger().info("Tried %d times, no more retries.", self.jobdata['job']['retries']) return False else: # recreate job retry_job = UpqQueueMngr().new_job(self.jobdata['job']['jobname'], self.jobdata['job']['jobdata']) for key in self.jobdata['job'].keys(): # copy data to allow release of old job resources setattr(retry_job, key, copy.deepcopy(self.jobdata['job'][key])) retry_job.retries += 1 log.getLogger().info("retrying job '%s' for the %d. time", retry_job.jobname, retry_job.retries) UpqQueueMngr().enqueue_job(retry_job)