Esempio n. 1
0
    def process_cron_triggers_v2(self, ctx):
        for t in triggers.get_next_cron_triggers():
            LOG.debug("Processing cron trigger: %s" % t)

            # Setup admin context before schedule triggers.
            ctx = security.create_context(t.trust_id, t.project_id)

            auth_ctx.set_ctx(ctx)

            LOG.debug("Cron trigger security context: %s" % ctx)

            try:
                rpc.get_engine_client().start_workflow(
                    t.workflow.name,
                    t.workflow_input,
                    description="Workflow execution created by cron trigger.",
                    **t.workflow_params
                )
            finally:
                if t.remaining_executions is not None and t.remaining_executions > 0:
                    t.remaining_executions -= 1
                if t.remaining_executions == 0:
                    db_api_v2.delete_cron_trigger(t.name)
                else:  # if remaining execution = None or > 0
                    next_time = triggers.get_next_execution_time(t.pattern, t.next_execution_time)

                    db_api_v2.update_cron_trigger(
                        t.name, {"next_execution_time": next_time, "remaining_executions": t.remaining_executions}
                    )

                    auth_ctx.set_ctx(None)
Esempio n. 2
0
    def process_cron_triggers_v2(self, ctx):
        for t in triggers.get_next_cron_triggers():
            LOG.debug("Processing cron trigger: %s" % t)
            # Setup admin context before schedule triggers.
            ctx = security.create_context(t.trust_id, t.project_id)
            auth_ctx.set_ctx(ctx)

            LOG.debug("Cron trigger security context: %s" % ctx)

            try:
                rpc.get_engine_client().start_workflow(
                    t.workflow.name,
                    t.workflow_input,
                    description="workflow execution by cron trigger.",
                    **t.workflow_params
                )
            finally:
                if t.remaining_executions > 0:
                    t.remaining_executions -= 1
                if t.remaining_executions == 0:
                    db_api_v2.delete_cron_trigger(t.name)
                else:  # if remaining execution = None or > 0
                    next_time = triggers.get_next_execution_time(
                        t.pattern,
                        t.next_execution_time
                    )

                    db_api_v2.update_cron_trigger(
                        t.name,
                        {'next_execution_time': next_time,
                         'remaining_executions': t.remaining_executions}
                    )

                    auth_ctx.set_ctx(None)
Esempio n. 3
0
def advance_cron_trigger(t):
    modified_count = 0

    try:
        # If the cron trigger is defined with limited execution count.
        if t.remaining_executions is not None and t.remaining_executions > 0:
            t.remaining_executions -= 1

        # If this is the last execution.
        if t.remaining_executions == 0:
            modified_count = triggers.delete_cron_trigger(t.name,
                                                          trust_id=t.trust_id,
                                                          delete_trust=False)
        else:  # if remaining execution = None or > 0.
            # In case the we are lagging or if the api stopped for some time
            # we use the max of the current time or the next scheduled time.
            next_time = triggers.get_next_execution_time(
                t.pattern,
                max(datetime.datetime.utcnow(), t.next_execution_time))

            # Update the cron trigger with next execution details
            # only if it wasn't already updated by a different process.
            updated, modified_count = db_api_v2.update_cron_trigger(
                t.name, {
                    'next_execution_time': next_time,
                    'remaining_executions': t.remaining_executions
                },
                query_filter={'next_execution_time': t.next_execution_time})
    except exc.DBEntityNotFoundError as e:
        # Cron trigger was probably already deleted by a different process.
        LOG.debug("Cron trigger named '%s' does not exist anymore: %s", t.name,
                  str(e))

    # Return True if this engine was able to modify the cron trigger in DB.
    return modified_count > 0
Esempio n. 4
0
def advance_cron_trigger(ct):
    modified_count = 0

    try:
        # If the cron trigger is defined with limited execution count.
        if (ct.remaining_executions is not None
                and ct.remaining_executions > 0):
            ct.remaining_executions -= 1

        # If this is the last execution.
        if ct.remaining_executions == 0:
            modified_count = db_api_v2.delete_cron_trigger(ct.name)
        else:  # if remaining execution = None or > 0.
            next_time = triggers.get_next_execution_time(
                ct.pattern, ct.next_execution_time)

            # Update the cron trigger with next execution details
            # only if it wasn't already updated by a different process.
            updated, modified_count = db_api_v2.update_cron_trigger(
                ct.name, {
                    'next_execution_time': next_time,
                    'remaining_executions': ct.remaining_executions
                },
                query_filter={'next_execution_time': ct.next_execution_time})
    except exc.NotFoundException as e:
        # Cron trigger was probably already deleted by a different process.
        LOG.debug("Cron trigger named '%s' does not exist anymore: %s",
                  ct.name, str(e))

    # Return True if this engine was able to modify the cron trigger in DB.
    return modified_count > 0
Esempio n. 5
0
def advance_cron_trigger(t):
    modified_count = 0

    try:
        # If the cron trigger is defined with limited execution count.
        if t.remaining_executions is not None and t.remaining_executions > 0:
            t.remaining_executions -= 1

        # If this is the last execution.
        if t.remaining_executions == 0:
            modified_count = triggers.delete_cron_trigger(
                t.name,
                trust_id=t.trust_id,
                delete_trust=False
            )
        else:  # if remaining execution = None or > 0.
            # In case the we are lagging or if the api stopped for some time
            # we use the max of the current time or the next scheduled time.
            next_time = triggers.get_next_execution_time(
                t.pattern,
                max(datetime.datetime.utcnow(), t.next_execution_time)
            )

            # Update the cron trigger with next execution details
            # only if it wasn't already updated by a different process.
            updated, modified_count = db_api_v2.update_cron_trigger(
                t.name,
                {
                    'next_execution_time': next_time,
                    'remaining_executions': t.remaining_executions
                },
                query_filter={
                    'next_execution_time': t.next_execution_time
                }
            )
    except exc.DBEntityNotFoundError as e:
        # Cron trigger was probably already deleted by a different process.
        LOG.debug(
            "Cron trigger named '%s' does not exist anymore: %s",
            t.name, str(e)
        )

    # Return True if this engine was able to modify the cron trigger in DB.
    return modified_count > 0
Esempio n. 6
0
def advance_cron_trigger(ct):
        modified_count = 0

        try:
            # If the cron trigger is defined with limited execution count.
            if (ct.remaining_executions is not None
               and ct.remaining_executions > 0):
                ct.remaining_executions -= 1

            # If this is the last execution.
            if ct.remaining_executions == 0:
                modified_count = db_api_v2.delete_cron_trigger(ct.name)
            else:  # if remaining execution = None or > 0.
                next_time = triggers.get_next_execution_time(
                    ct.pattern,
                    ct.next_execution_time
                )

                # Update the cron trigger with next execution details
                # only if it wasn't already updated by a different process.
                updated, modified_count = db_api_v2.update_cron_trigger(
                    ct.name,
                    {
                        'next_execution_time': next_time,
                        'remaining_executions': ct.remaining_executions
                    },
                    query_filter={
                        'next_execution_time': ct.next_execution_time
                    }
                )
        except exc.NotFoundException as e:
            # Cron trigger was probably already deleted by a different process.
            LOG.debug(
                "Cron trigger named '%s' does not exist anymore: %s",
                ct.name, str(e)
            )

        # Return True if this engine was able to modify the cron trigger in DB.
        return modified_count > 0