Wrap sync_db operations in transactions
Fix for fail on failed to find system actions Change-Id: Ief7cf96eedd201990ca3c169fb0c1509ee55665e Closes-Bug: 1508379
This commit is contained in:
parent
90934209cb
commit
3b3695efca
@ -42,7 +42,11 @@ def register_standard_actions():
|
|||||||
|
|
||||||
for action_path in action_paths:
|
for action_path in action_paths:
|
||||||
action_definition = open(action_path).read()
|
action_definition = open(action_path).read()
|
||||||
actions.update_actions(action_definition, scope='public')
|
actions.update_actions(
|
||||||
|
action_definition,
|
||||||
|
scope='public',
|
||||||
|
run_in_tx=False
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_registered_actions(**kwargs):
|
def get_registered_actions(**kwargs):
|
||||||
@ -74,8 +78,8 @@ def _clear_system_action_db():
|
|||||||
|
|
||||||
|
|
||||||
def sync_db():
|
def sync_db():
|
||||||
|
with db_api.transaction():
|
||||||
_clear_system_action_db()
|
_clear_system_action_db()
|
||||||
|
|
||||||
register_action_classes()
|
register_action_classes()
|
||||||
register_standard_actions()
|
register_standard_actions()
|
||||||
|
|
||||||
@ -106,8 +110,6 @@ def register_action_classes():
|
|||||||
namespace='mistral.actions',
|
namespace='mistral.actions',
|
||||||
invoke_on_load=False
|
invoke_on_load=False
|
||||||
)
|
)
|
||||||
|
|
||||||
with db_api.transaction():
|
|
||||||
for name in mgr.names():
|
for name in mgr.names():
|
||||||
action_class_str = mgr[name].entry_point_target.replace(':', '.')
|
action_class_str = mgr[name].entry_point_target.replace(':', '.')
|
||||||
action_class = mgr[name].plugin
|
action_class = mgr[name].plugin
|
||||||
|
@ -31,12 +31,31 @@ def create_actions(definition, scope='private'):
|
|||||||
return db_actions
|
return db_actions
|
||||||
|
|
||||||
|
|
||||||
def update_actions(definition, scope='private'):
|
def update_actions(definition, scope='private', run_in_tx=True):
|
||||||
action_list_spec = spec_parser.get_action_list_spec_from_yaml(definition)
|
action_list_spec = spec_parser.get_action_list_spec_from_yaml(definition)
|
||||||
|
|
||||||
db_actions = []
|
db_actions = []
|
||||||
|
|
||||||
|
if run_in_tx:
|
||||||
with db_api.transaction():
|
with db_api.transaction():
|
||||||
|
db_actions = _append_all_actions(
|
||||||
|
action_list_spec,
|
||||||
|
db_actions,
|
||||||
|
definition,
|
||||||
|
scope
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
db_actions = _append_all_actions(
|
||||||
|
action_list_spec,
|
||||||
|
db_actions,
|
||||||
|
definition,
|
||||||
|
scope
|
||||||
|
)
|
||||||
|
|
||||||
|
return db_actions
|
||||||
|
|
||||||
|
|
||||||
|
def _append_all_actions(action_list_spec, db_actions, definition, scope):
|
||||||
for action_spec in action_list_spec.get_actions():
|
for action_spec in action_list_spec.get_actions():
|
||||||
db_actions.append(
|
db_actions.append(
|
||||||
create_or_update_action(
|
create_or_update_action(
|
||||||
|
@ -21,13 +21,18 @@ from mistral.workbook import parser as spec_parser
|
|||||||
STD_WF_PATH = 'resources/workflows'
|
STD_WF_PATH = 'resources/workflows'
|
||||||
|
|
||||||
|
|
||||||
def register_standard_workflows():
|
def register_standard_workflows(run_in_tx=True):
|
||||||
workflow_paths = utils.get_file_list(STD_WF_PATH)
|
workflow_paths = utils.get_file_list(STD_WF_PATH)
|
||||||
|
|
||||||
for wf_path in workflow_paths:
|
for wf_path in workflow_paths:
|
||||||
workflow_definition = open(wf_path).read()
|
workflow_definition = open(wf_path).read()
|
||||||
|
|
||||||
create_workflows(workflow_definition, scope='public', is_system=True)
|
create_workflows(
|
||||||
|
workflow_definition,
|
||||||
|
scope='public',
|
||||||
|
is_system=True,
|
||||||
|
run_in_tx=run_in_tx
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _clear_system_workflow_db():
|
def _clear_system_workflow_db():
|
||||||
@ -35,23 +40,43 @@ def _clear_system_workflow_db():
|
|||||||
|
|
||||||
|
|
||||||
def sync_db():
|
def sync_db():
|
||||||
|
with db_api.transaction():
|
||||||
_clear_system_workflow_db()
|
_clear_system_workflow_db()
|
||||||
register_standard_workflows()
|
register_standard_workflows(run_in_tx=False)
|
||||||
|
|
||||||
|
|
||||||
def create_workflows(definition, scope='private', is_system=False):
|
def create_workflows(definition, scope='private', is_system=False,
|
||||||
|
run_in_tx=True):
|
||||||
wf_list_spec = spec_parser.get_workflow_list_spec_from_yaml(definition)
|
wf_list_spec = spec_parser.get_workflow_list_spec_from_yaml(definition)
|
||||||
|
|
||||||
db_wfs = []
|
db_wfs = []
|
||||||
|
|
||||||
|
if run_in_tx:
|
||||||
with db_api.transaction():
|
with db_api.transaction():
|
||||||
|
_append_all_workflows(
|
||||||
|
definition,
|
||||||
|
is_system,
|
||||||
|
scope,
|
||||||
|
wf_list_spec,
|
||||||
|
db_wfs
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
_append_all_workflows(
|
||||||
|
definition,
|
||||||
|
is_system,
|
||||||
|
scope,
|
||||||
|
wf_list_spec,
|
||||||
|
db_wfs
|
||||||
|
)
|
||||||
|
|
||||||
|
return db_wfs
|
||||||
|
|
||||||
|
|
||||||
|
def _append_all_workflows(definition, is_system, scope, wf_list_spec, db_wfs):
|
||||||
for wf_spec in wf_list_spec.get_workflows():
|
for wf_spec in wf_list_spec.get_workflows():
|
||||||
db_wfs.append(
|
db_wfs.append(
|
||||||
_create_workflow(wf_spec, definition, scope, is_system)
|
_create_workflow(wf_spec, definition, scope, is_system)
|
||||||
)
|
)
|
||||||
|
|
||||||
return db_wfs
|
|
||||||
|
|
||||||
|
|
||||||
def update_workflows(definition, scope='private'):
|
def update_workflows(definition, scope='private'):
|
||||||
wf_list_spec = spec_parser.get_workflow_list_spec_from_yaml(definition)
|
wf_list_spec = spec_parser.get_workflow_list_spec_from_yaml(definition)
|
||||||
|
Loading…
Reference in New Issue
Block a user