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)
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)
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.""" 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())
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())
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
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)
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)
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 )
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 )