Clone cached action definitions
* Once in a while we get DetachedInstanceError for action definitions and it happens when they are fetched from cache. We must always clone persistent objects before caching them. Change-Id: I1d0cffea6775eb258dcefc0dbb8a6ee18effe597 Closes-Bug: #1803528
This commit is contained in:
parent
0d85973f52
commit
90ddf442ee
@ -69,17 +69,19 @@ def find_action_definition_by_name(action_name):
|
|||||||
:return: Action definition (possibly a cached value).
|
:return: Action definition (possibly a cached value).
|
||||||
"""
|
"""
|
||||||
with _ACTION_DEF_CACHE_LOCK:
|
with _ACTION_DEF_CACHE_LOCK:
|
||||||
action_definition = _ACTION_DEF_CACHE.get(action_name)
|
action_def = _ACTION_DEF_CACHE.get(action_name)
|
||||||
|
|
||||||
if action_definition:
|
if action_def:
|
||||||
return action_definition
|
return action_def
|
||||||
|
|
||||||
action_definition = db_api.load_action_definition(action_name)
|
action_def = db_api.load_action_definition(action_name)
|
||||||
|
|
||||||
with _ACTION_DEF_CACHE_LOCK:
|
with _ACTION_DEF_CACHE_LOCK:
|
||||||
_ACTION_DEF_CACHE[action_name] = action_definition
|
_ACTION_DEF_CACHE[action_name] = (
|
||||||
|
action_def.get_clone() if action_def else None
|
||||||
|
)
|
||||||
|
|
||||||
return action_definition
|
return action_def
|
||||||
|
|
||||||
|
|
||||||
def find_task_executions_by_name(wf_ex_id, task_name):
|
def find_task_executions_by_name(wf_ex_id, task_name):
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Sometimes Mistral was raising DetachedInstanceError for action defintions
|
||||||
|
coming from cache. It's now fixed by cloning objects before caching them.
|
Loading…
Reference in New Issue
Block a user