def _retry_or_fail(self, session): attempts = len(self.executions) if attempts < self.retry_limit: self.status = 'retrying' self.occurrence = self._calculate_retry() return self.status = 'failed' if self.parent_id: parent = RecurringTask.load(session, id=self.parent_id, lockmode='update') parent.reschedule(session) log('error', '%s marked as failed', repr(self))
def execute(self, session): parent = None if self.parent_id: parent = RecurringTask.load(session, id=self.parent_id, lockmode='update') execution = TaskExecution(task_id=self.id, attempt=len(self.executions) + 1) session.add(execution) execution.started = datetime.now(UTC) try: status, execution.result = self.action.execute(self, session) except Exception, exception: status = FAILED execution.result = format_exc()