Exemple #1
0
    def test_create_cron_trigger_with_pattern_and_first_time(
            self, validate_mock):
        cfg.CONF.set_default('auth_enable', False, group='pecan')

        wf = workflows.create_workflows(WORKFLOW_LIST)[0]

        # Make the first_time 1 sec later than current time, in order to make
        # it executed by next cron-trigger task.
        first_time = datetime.datetime.utcnow() + datetime.timedelta(0, 1)

        # Creates a cron-trigger with pattern and first time, ensure the
        # cron-trigger can be executed more than once, and cron-trigger will
        # not be deleted.
        trigger_name = 'trigger-%s' % utils.generate_unicode_uuid()

        cron_trigger = triggers.create_cron_trigger(trigger_name, wf.name, {},
                                                    {}, '*/1 * * * *',
                                                    first_time, None, None)

        self.assertEqual(first_time, cron_trigger.next_execution_time)

        periodic.MistralPeriodicTasks(cfg.CONF).process_cron_triggers_v2(None)

        next_time = triggers.get_next_execution_time(
            cron_trigger.pattern, cron_trigger.next_execution_time)

        cron_trigger_db = db_api.get_cron_trigger(trigger_name)

        self.assertIsNotNone(cron_trigger_db)
        self.assertEqual(next_time, cron_trigger_db.next_execution_time)
Exemple #2
0
def delete_cron_trigger(name, trust_id=None):
    if not trust_id:
        trigger = db_api.get_cron_trigger(name)
        trust_id = trigger.trust_id

    security.delete_trust(trust_id)
    return db_api.delete_cron_trigger(name)
Exemple #3
0
    def get(self, name):
        """Returns the named cron_trigger."""

        LOG.info('Fetch cron trigger [name=%s]' % name)

        db_model = db_api.get_cron_trigger(name)

        return CronTrigger.from_dict(db_model.to_dict())
    def get(self, name):
        """Returns the named cron_trigger."""

        LOG.info('Fetch cron trigger [name=%s]' % name)

        db_model = db_api.get_cron_trigger(name)

        return CronTrigger.from_dict(db_model.to_dict())
Exemple #5
0
    def get(self, name):
        """Returns the named cron_trigger."""

        acl.enforce('cron_triggers:get', context.ctx())
        LOG.info('Fetch cron trigger [name=%s]' % name)

        db_model = db_api.get_cron_trigger(name)

        return CronTrigger.from_dict(db_model.to_dict())
Exemple #6
0
    def get(self, name):
        """Returns the named cron_trigger."""
        acl.enforce('cron_triggers:get', context.ctx())

        LOG.info('Fetch cron trigger [name=%s]' % name)

        db_model = db_api.get_cron_trigger(name)

        return resources.CronTrigger.from_dict(db_model.to_dict())
Exemple #7
0
def delete_cron_trigger(name, trust_id=None):
    if not trust_id:
        trigger = db_api.get_cron_trigger(name)
        trust_id = trigger.trust_id

    modified_count = db_api.delete_cron_trigger(name)
    if modified_count:
        # Delete trust only together with deleting trigger.
        security.delete_trust(trust_id)

    return modified_count
def delete_cron_trigger(identifier, trust_id=None, delete_trust=True):
    if not trust_id:
        trigger = db_api.get_cron_trigger(identifier)
        trust_id = trigger.trust_id

    modified_count = db_api.delete_cron_trigger(identifier)

    if modified_count and delete_trust:
        # Delete trust only together with deleting trigger.
        security.delete_trust(trust_id)

    return modified_count
Exemple #9
0
    def get(self, name):
        """Returns the named cron_trigger.

        :param name: Name of cron trigger to retrieve
        """
        acl.enforce('cron_triggers:get', context.ctx())

        LOG.info('Fetch cron trigger [name=%s]', name)

        db_model = db_api.get_cron_trigger(name)

        return resources.CronTrigger.from_db_model(db_model)
Exemple #10
0
def delete_cron_trigger(identifier, trust_id=None, delete_trust=True):
    if not trust_id:
        trigger = db_api.get_cron_trigger(identifier)
        trust_id = trigger.trust_id

    modified_count = db_api.delete_cron_trigger(identifier)

    if modified_count and delete_trust:
        # Delete trust only together with deleting trigger.
        security.delete_trust(trust_id)

    return modified_count
    def test_create_cron_trigger_with_pattern_and_first_time(self,
                                                             validate_mock):
        cfg.CONF.set_default('auth_enable', False, group='pecan')

        wf = workflows.create_workflows(WORKFLOW_LIST)[0]

        # Make the first_time 1 sec later than current time, in order to make
        # it executed by next cron-trigger task.
        first_time = datetime.datetime.now() + datetime.timedelta(0, 1)

        # Creates a cron-trigger with pattern and first time, ensure the
        # cron-trigger can be executed more than once, and cron-trigger will
        # not be deleted.
        trigger_name = 'trigger-%s' % utils.generate_unicode_uuid()

        cron_trigger = triggers.create_cron_trigger(
            trigger_name,
            wf.name,
            {},
            {},
            '*/1 * * * *',
            first_time,
            None,
            None
        )

        first_second = time.mktime(first_time.timetuple())
        first_utc_time = datetime.datetime.utcfromtimestamp(first_second)

        self.assertEqual(
            first_utc_time,
            cron_trigger.next_execution_time
        )

        periodic.MistralPeriodicTasks(cfg.CONF).process_cron_triggers_v2(None)

        next_time = triggers.get_next_execution_time(
            cron_trigger.pattern,
            cron_trigger.next_execution_time
        )

        cron_trigger_db = db_api.get_cron_trigger(trigger_name)

        self.assertIsNotNone(cron_trigger_db)
        self.assertEqual(
            next_time,
            cron_trigger_db.next_execution_time
        )
    def test_create_cron_trigger_with_pattern_and_first_time(self,
                                                             validate_mock):
        cfg.CONF.set_default('auth_enable', False, group='pecan')

        wf = workflows.create_workflows(WORKFLOW_LIST)[0]

        # Make the first_time 1 sec later than current time, in order to make
        # it executed by next cron-trigger task.
        first_time = datetime.datetime.utcnow() + datetime.timedelta(0, 1)

        # Creates a cron-trigger with pattern and first time, ensure the
        # cron-trigger can be executed more than once, and cron-trigger will
        # not be deleted.
        trigger_name = 'trigger-%s' % utils.generate_unicode_uuid()

        cron_trigger = triggers.create_cron_trigger(
            trigger_name,
            wf.name,
            {},
            {},
            '*/1 * * * *',
            first_time,
            None,
            None
        )

        interval = (cron_trigger.next_execution_time - first_time)

        self.assertLessEqual(interval.total_seconds(), 3.0)

        periodic.process_cron_triggers_v2(None, None)

        # After process_triggers context is set to None, need to reset it.
        auth_ctx.set_ctx(self.ctx)

        next_time = triggers.get_next_execution_time(
            cron_trigger.pattern,
            cron_trigger.next_execution_time
        )

        cron_trigger_db = db_api.get_cron_trigger(trigger_name)

        self.assertIsNotNone(cron_trigger_db)

        interval = (cron_trigger_db.next_execution_time - next_time)

        self.assertLessEqual(interval.total_seconds(), 3.0)
Exemple #13
0
    def test_last_minute_scheduled_workload(self):
        cfg.CONF.set_default('auth_enable', True, group='pecan')
        cfg.CONF.set_default('dtw_scheduler_last_minute', True, group='engine')

        wf = workflows.create_workflows(WORKFLOW_LIST)[0]

        name = 'dtw-%s' % utils.generate_unicode_uuid()

        d = dtw.create_delay_tolerant_workload(
            name,
            wf.name,
            {},
            {},
            (datetime.datetime.now() + datetime.timedelta(hours=2))
            .strftime('%Y-%m-%dT%H:%M:%S'),
            3600,
            None
        )

        self.assertEqual('my_trust_id', d.trust_id)

        cfg.CONF.set_default('auth_enable', False, group='pecan')

        unscheduled_workload = dtw.get_unscheduled_delay_tolerant_workload()
        self.assertEqual(1, len(unscheduled_workload))
        self.assertEqual(d.name, unscheduled_workload[0].name)
        self.assertEqual(d.deadline, unscheduled_workload[0].deadline)

        periodic.MistralPeriodicTasks(
            cfg.CONF).process_delay_tolerant_workload(None)

        unscheduled_workload_after = dtw \
            .get_unscheduled_delay_tolerant_workload()
        self.assertEqual(1, len(unscheduled_workload_after))

        # so we should check if we have a cron trigger associated with this
        # workload now
        cron_trigger_db = db_api.get_cron_trigger(d.name)

        self.assertIsNotNone(cron_trigger_db)
        self.assertEqual(
            name ,
            cron_trigger_db.name
        )
Exemple #14
0
    def test_create_cron_trigger_with_pattern_and_first_time(self,
                                                             validate_mock):
        wf = workflows.create_workflows(WORKFLOW_LIST)[0]

        # Make the first_time 1 sec later than current time, in order to make
        # it executed by next cron-trigger task.
        first_time = datetime.datetime.now() + datetime.timedelta(0, 1)

        # Creates a cron-trigger with pattern and first time, ensure the
        # cron-trigger can be executed more than once, and cron-trigger will
        # not be deleted.
        cron_trigger = triggers.create_cron_trigger(
            'test',
            wf.name,
            {},
            {},
            '*/1 * * * *',
            first_time,
            None,
            None
        )

        self.assertEqual(
            first_time,
            cron_trigger.next_execution_time
        )

        periodic.MistralPeriodicTasks(cfg.CONF).process_cron_triggers_v2(None)

        next_time = triggers.get_next_execution_time(
            cron_trigger.pattern,
            cron_trigger.next_execution_time
        )

        cron_trigger_db = db_api.get_cron_trigger('test')

        self.assertIsNotNone(cron_trigger_db)
        self.assertEqual(
            next_time,
            cron_trigger_db.next_execution_time
        )