You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Pawel Veselov (JIRA)" <ji...@apache.org> on 2019/07/12 13:36:00 UTC
[jira] [Updated] (OPENJPA-2792) Race condition in using
compatibility flags (turns on cascade on detach)
[ https://issues.apache.org/jira/browse/OPENJPA-2792?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pawel Veselov updated OPENJPA-2792:
-----------------------------------
Summary: Race condition in using compatibility flags (turns on cascade on detach) (was: Race condition in using compatibility flags)
> Race condition in using compatibility flags (turns on cascade on detach)
> ------------------------------------------------------------------------
>
> Key: OPENJPA-2792
> URL: https://issues.apache.org/jira/browse/OPENJPA-2792
> Project: OpenJPA
> Issue Type: Bug
> Components: kernel
> Affects Versions: 2.4.2
> Reporter: Pawel Veselov
> Priority: Major
>
> Compatibility object is used in a lot of placed to determine behavior of the implementation.
> However, compatibility values are set during execution, without regard for other execution threads.
> Looking at {{OpenJPAConfigurationImpl.getCompatibilityInstance()}} once can see that a singleton is used.
> However, broker implementation does this:
> {code:java}
> boolean origCascade = _compat.getCascadeWithDetach();
> _compat.setCascadeWithDetach(true);
> try {
> new DetachManager(this, true, call)
> .detachAll(new ManagedObjectCollection(states));
> }
> finally {
> _compat.setCascadeWithDetach(origCascade);
> }
> {code}
> This is:
> # turning cascade behavior for other brokers to detach on cascade
> # eventually leads to stuck "true" state, if a broker picks up the compatibility value when another broker has set it temporarily to true.
> Creating of the compatibility object is somewhat complicated, because it can come from compatibility plugin and/or from specification instance. As a brute force solution, I'll just return {{compatibility.clone()}} from {{OpenJPAConfigurationImpl.getCompatibilityInstance()}}, it should take care of this, but there is probably a deeper issue here, especially if there is code paths that expect the compatibility object to be an actual singleton.
--
This message was sent by Atlassian JIRA
(v7.6.14#76016)