Merge "Fixing deleting cron-trigger trusts"

This commit is contained in:
Jenkins 2017-07-14 16:24:45 +00:00 committed by Gerrit Code Review
commit 6d6b8e5b61
5 changed files with 27 additions and 13 deletions

View File

@ -38,14 +38,15 @@ class MistralPeriodicTasks(periodic_task.PeriodicTasks):
for trigger in triggers.get_next_cron_triggers(): for trigger in triggers.get_next_cron_triggers():
LOG.debug("Processing cron trigger: %s" % trigger) LOG.debug("Processing cron trigger: %s" % trigger)
# Setup admin context before schedule triggers.
ctx = security.create_context(trigger.trust_id, trigger.project_id)
auth_ctx.set_ctx(ctx)
LOG.debug("Cron trigger security context: %s" % ctx)
try: try:
# Setup admin context before schedule triggers.
ctx = security.create_context(
trigger.trust_id, trigger.project_id
)
auth_ctx.set_ctx(ctx)
LOG.debug("Cron trigger security context: %s" % ctx)
# Try to advance the cron trigger next_execution_time and # Try to advance the cron trigger next_execution_time and
# remaining_executions if relevant. # remaining_executions if relevant.
modified = advance_cron_trigger(trigger) modified = advance_cron_trigger(trigger)

View File

@ -85,7 +85,15 @@ def delete_trust(trust_id):
if not trust_id: if not trust_id:
return return
keystone_client = keystone.client_for_trusts(trust_id) ctx = auth_ctx.ctx()
# If this trust is already in the context then it means that
# context already has trust scoped token from exactly this trust_id.
# So we don't need request the token from the trust one more time.
if ctx.is_trust_scoped and ctx.trust_id == trust_id:
keystone_client = keystone.client()
else:
keystone_client = keystone.client_for_trusts(trust_id)
try: try:
keystone_client.trusts.delete(trust_id) keystone_client.trusts.delete(trust_id)

View File

@ -138,8 +138,12 @@ def delete_cron_trigger(name, trust_id=None):
trigger = db_api.get_cron_trigger(name) trigger = db_api.get_cron_trigger(name)
trust_id = trigger.trust_id trust_id = trigger.trust_id
security.delete_trust(trust_id) modified_count = db_api.delete_cron_trigger(name)
return 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 create_event_trigger(name, exchange, topic, event, workflow_id, def create_event_trigger(name, exchange, topic, event, workflow_id,

View File

@ -60,7 +60,7 @@ TRIGGER_DB.update(trigger_values)
MOCK_WF = mock.MagicMock(return_value=WF) MOCK_WF = mock.MagicMock(return_value=WF)
MOCK_TRIGGER = mock.MagicMock(return_value=TRIGGER_DB) MOCK_TRIGGER = mock.MagicMock(return_value=TRIGGER_DB)
MOCK_TRIGGERS = mock.MagicMock(return_value=[TRIGGER_DB]) MOCK_TRIGGERS = mock.MagicMock(return_value=[TRIGGER_DB])
MOCK_DELETE = mock.MagicMock(return_value=None) MOCK_DELETE = mock.MagicMock(return_value=1)
MOCK_EMPTY = mock.MagicMock(return_value=[]) MOCK_EMPTY = mock.MagicMock(return_value=[])
MOCK_NOT_FOUND = mock.MagicMock(side_effect=exc.DBEntityNotFoundError()) MOCK_NOT_FOUND = mock.MagicMock(side_effect=exc.DBEntityNotFoundError())
MOCK_DUPLICATE = mock.MagicMock(side_effect=exc.DBDuplicateEntryError()) MOCK_DUPLICATE = mock.MagicMock(side_effect=exc.DBDuplicateEntryError())

View File

@ -227,14 +227,15 @@ class TriggerServiceV2Test(base.DbTestCase):
@mock.patch.object(security, 'create_trust', @mock.patch.object(security, 'create_trust',
type('trust', (object,), {'id': 'my_trust_id'})) type('trust', (object,), {'id': 'my_trust_id'}))
@mock.patch.object(security, 'create_context', mock.Mock()) @mock.patch.object(security, 'create_context')
@mock.patch.object(rpc.EngineClient, 'start_workflow', mock.Mock()) @mock.patch.object(rpc.EngineClient, 'start_workflow', mock.Mock())
@mock.patch( @mock.patch(
'mistral.services.periodic.advance_cron_trigger', 'mistral.services.periodic.advance_cron_trigger',
mock.MagicMock(side_effect=new_advance_cron_trigger) mock.MagicMock(side_effect=new_advance_cron_trigger)
) )
@mock.patch.object(security, 'delete_trust') @mock.patch.object(security, 'delete_trust')
def test_create_delete_trust_in_trigger(self, delete_trust): def test_create_delete_trust_in_trigger(self, create_ctx, delete_trust):
create_ctx.return_value = self.ctx
cfg.CONF.set_default('auth_enable', True, group='pecan') cfg.CONF.set_default('auth_enable', True, group='pecan')
trigger_thread = periodic.setup() trigger_thread = periodic.setup()
self.addCleanup(trigger_thread.stop) self.addCleanup(trigger_thread.stop)