[
https://issues.apache.org/jira/browse/CURATOR-719?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Enrico Olivelli resolved CURATOR-719.
-------------------------------------
Fix Version/s: 5.8.0
Resolution: Fixed
> Race condition enabled by combination of creatingParentsIfNeeded and orSetData
> ------------------------------------------------------------------------------
>
> Key: CURATOR-719
> URL: https://issues.apache.org/jira/browse/CURATOR-719
> Project: Apache Curator
> Issue Type: Bug
> Components: Framework
> Reporter: Houston Putman
> Assignee: Houston Putman
> Priority: Major
> Fix For: 5.8.0
>
>
> When using {{{}create().orSetData().creatingParentsIfNeeded().forPath(path,
> data){}}}, a race condition exists that will ignore the {{orSetData()}}
> option if parents aren't created.
> So if there are two parallel processes creating the same node with the
> settings above, both will hit a "NoNodeException", which will take them down
> the path of creating the parents. Once both are done with that, which seems
> to handle the parallelism fine, they will both try to create the target zNode
> ({*}path{*} above). However, in this code path, the {{orSetData()}} option is
> not used, so one will succeed, and create the zNode, and the other will fail
> because the zNode has already been created by the other process.
> What should happen, is that the {{orSetData()}} option is used in this
> {{catch (NoNodeException)}} block, and the second process will set the data
> and not throw an error.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)