[ https://issues.apache.org/jira/browse/CURATOR-719?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kezhu Wang reassigned CURATOR-719: ---------------------------------- Assignee: Houston Putman > 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 > > 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)