X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/dd875d32f454ef0898d9cf3e102734144aa161a4..b165e77e650a6078e06d4cbc90b239ca25cff26b:/lib/jqueue.py?ds=sidebyside diff --git a/lib/jqueue.py b/lib/jqueue.py index 1ede58d..90757a5 100644 --- a/lib/jqueue.py +++ b/lib/jqueue.py @@ -344,7 +344,7 @@ class _JobQueueWorker(workerpool.BaseWorker): @param job: the job to be processed """ - logging.debug("Worker %s processing job %s", + logging.info("Worker %s processing job %s", self.worker_id, job.id) proc = mcpu.Processor(self.pool.queue.context) self.queue = queue = job.queue @@ -352,11 +352,15 @@ class _JobQueueWorker(workerpool.BaseWorker): try: count = len(job.ops) for idx, op in enumerate(job.ops): + op_summary = op.input.Summary() try: - logging.debug("Op %s/%s: Starting %s", idx + 1, count, op) + logging.info("Op %s/%s: Starting opcode %s", idx + 1, count, + op_summary) queue.acquire() try: + if op.status == constants.OP_STATUS_CANCELED: + raise CancelJob() assert op.status == constants.OP_STATUS_QUEUED job.run_op_index = idx op.status = constants.OP_STATUS_WAITLOCK @@ -408,8 +412,8 @@ class _JobQueueWorker(workerpool.BaseWorker): finally: queue.release() - logging.debug("Op %s/%s: Successfully finished %s", - idx + 1, count, op) + logging.info("Op %s/%s: Successfully finished opcode %s", + idx + 1, count, op_summary) except CancelJob: # Will be handled further up raise @@ -420,7 +424,8 @@ class _JobQueueWorker(workerpool.BaseWorker): op.status = constants.OP_STATUS_ERROR op.result = str(err) op.end_timestamp = TimeStampNow() - logging.debug("Op %s/%s: Error in %s", idx + 1, count, op) + logging.info("Op %s/%s: Error in opcode %s: %s", + idx + 1, count, op_summary, err) finally: queue.UpdateJobUnlocked(job) finally: @@ -449,8 +454,8 @@ class _JobQueueWorker(workerpool.BaseWorker): status = job.CalcStatus() finally: queue.release() - logging.debug("Worker %s finished job %s, status = %s", - self.worker_id, job_id, status) + logging.info("Worker %s finished job %s, status = %s", + self.worker_id, job_id, status) class _JobQueueWorkerPool(workerpool.WorkerPool): @@ -938,9 +943,8 @@ class JobQueue(object): utils.RemoveFile(constants.JOB_QUEUE_DRAIN_FILE) return True - @utils.LockedMethod @_RequireOpenQueue - def SubmitJob(self, ops): + def _SubmitJobUnlocked(self, ops): """Create and store a new job. This enters the job into our job queue and also puts it on the new @@ -954,7 +958,7 @@ class JobQueue(object): """ if self._IsQueueMarkedDrain(): - raise errors.JobQueueDrainError() + raise errors.JobQueueDrainError("Job queue is drained, refusing job") # Check job queue size size = len(self._ListJobFiles()) @@ -982,6 +986,37 @@ class JobQueue(object): return job.id + @utils.LockedMethod + @_RequireOpenQueue + def SubmitJob(self, ops): + """Create and store a new job. + + @see: L{_SubmitJobUnlocked} + + """ + return self._SubmitJobUnlocked(ops) + + @utils.LockedMethod + @_RequireOpenQueue + def SubmitManyJobs(self, jobs): + """Create and store multiple jobs. + + @see: L{_SubmitJobUnlocked} + + """ + results = [] + for ops in jobs: + try: + data = self._SubmitJobUnlocked(ops) + status = True + except errors.GenericError, err: + data = str(err) + status = False + results.append((status, data)) + + return results + + @_RequireOpenQueue def UpdateJobUnlocked(self, job): """Update a job's on disk storage. @@ -1117,7 +1152,7 @@ class JobQueue(object): """ try: for op in job.ops: - op.status = constants.OP_STATUS_ERROR + op.status = constants.OP_STATUS_CANCELED op.result = "Job canceled by request" finally: self.UpdateJobUnlocked(job) @@ -1127,7 +1162,7 @@ class JobQueue(object): """Archives jobs. @type jobs: list of L{_QueuedJob} - @param job: Job objects + @param jobs: Job objects @rtype: int @return: Number of archived jobs @@ -1160,7 +1195,7 @@ class JobQueue(object): def ArchiveJob(self, job_id): """Archives a job. - This is just a wrapper over L{_ArchiveJobUnlocked}. + This is just a wrapper over L{_ArchiveJobsUnlocked}. @type job_id: string @param job_id: Job ID of job to be archived. @@ -1175,7 +1210,7 @@ class JobQueue(object): logging.debug("Job %s not found", job_id) return False - return self._ArchiveJobUnlocked([job]) == 1 + return self._ArchiveJobsUnlocked([job]) == 1 @utils.LockedMethod @_RequireOpenQueue