Ejemplo n.º 1
0
    def process(self, session, execution, workflow, status, output):
        from flux.models import Run
        run = Run.load(session, id=execution.run_id, lockmode='update')

        failure = False
        values = None
        operation = session.query(Operation).get(self.operation)

        if status == 'completed':
            if output['status'] == 'valid':
                status, outcome, values = self._parse_outcome(operation, output)
                if status == 'completed':
                    execution.complete(session, outcome)
                else:
                    failure = True
                    execution.fail(session, outcome)
            elif output['status'] == 'invalid':
                execution.invalidate(session, output['errors'])
                return run.invalidate(session)

        elif status == 'failed':
            failure = True
            execution.fail(session)
        elif status == 'timedout':
            failure = True
            execution.timeout(session)

        interpolator = self._construct_interpolator(run, execution)
        if values:
            interpolator['step']['out'] = values

        environment = Environment(workflow, run, interpolator, output=values,
                                  ancestor=execution, failure=failure)

        postoperation = self.postoperation
        if postoperation:
            postoperation.evaluate(session, environment)

        if environment.failure:
            if execution.status == 'failed':
                return run.fail(session)
            if execution.status == 'timedout':
                return run.timeout(session)

        if not run.active_executions.count():
            executions = run.executions
            execution_status = WorkflowExecution.status

            if executions.filter(execution_status=='failed').count():
                return run.fail(session)
            if executions.filter(execution_status=='timedout').count():
                return run.timeout(session)
            if not executions.filter(execution_status!='completed').count():
                return run.complete(session)
Ejemplo n.º 2
0
 def _setup_active_run(self, workflow_id, steps, parameters=None):
     session = self.config.schema.session
     run = Run.create(session, workflow_id, started=current_timestamp())
     session.commit()
     self._runs.append(run.id)
     execution = None
     for step in steps:
         execution = run.create_execution(session, step,
                 parameters=parameters, ancestor=execution)
         execution.start()
         sleep(1)
     session.commit()
     return run
Ejemplo n.º 3
0
 def _setup_active_run(self, workflow_id, steps, parameters=None):
     session = self.config.schema.session
     run = Run.create(session, workflow_id, started=current_timestamp())
     session.commit()
     self._runs.append(run.id)
     execution = None
     for step in steps:
         execution = run.create_execution(session,
                                          step,
                                          parameters=parameters,
                                          ancestor=execution)
         execution.start()
         sleep(1)
     session.commit()
     return run