def process_results(self, ch, method, properties, taskrecord): ''' Processing results received from workers and end points ''' self.log.info( 'Received task results for job {0}'.format( properties.correlation_id)) # Check if task is registered to this dispatcher if self._retreive_job(properties.correlation_id) is not None: # Re-Register the job with the dispatcher jobrecord = self._retreive_job(properties.correlation_id) job = Job().load(jobrecord) self.log.info('Found job in DB: {0}'.format(job.state.id)) self.log.info('Task results: {0}'.format(taskrecord)) # Turn the taskrecord into a project Task instance updated_task = Task().load(taskrecord) # Update the job with the new task results job.update_tasks(updated_task, force=True) self._start_next_task(job) elif properties.correlation_id == 'update_task': self.log.info('Task results: {0}'.format(taskrecord)) # Turn the taskrecord into a project Task instance updated_task = Task().load(taskrecord) number_of_updated_tasks = 0 jobid = self._retreive_jobid(updated_task.state.id) jobrecord = self._retreive_job(jobid) if jobrecord is not None: job = Job().load(jobrecord) self.log.info('Found in DB job: {0}'.format(job.state.id)) for task in job.state.tasks: if updated_task.state.id == task.state.id: job.update_tasks(updated_task) number_of_updated_tasks += 1 self._start_next_task(job) if number_of_updated_tasks == 0: self.log.warn('Task with id {0} not found in its parent job (possible?)'.format( updated_task.state.id)) else: self.log.warn('No parent job found for Task with id {0}'.format( updated_task.state.id)) else: self.log.warn('No job found for job ID: {0}'.format(properties.correlation_id))