[ https://issues.apache.org/jira/browse/OAK-3081?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marcel Reutegger resolved OAK-3081. ----------------------------------- Resolution: Fixed Merged into 1.2 branch: http://svn.apache.org/r1689853 and 1.0 branch: http://svn.apache.org/r1689860 > SplitOperations may undo committed changes > ------------------------------------------ > > Key: OAK-3081 > URL: https://issues.apache.org/jira/browse/OAK-3081 > Project: Jackrabbit Oak > Issue Type: Bug > Components: core, mongomk > Affects Versions: 1.0.10, 1.1.6, 1.2 > Reporter: Marcel Reutegger > Assignee: Marcel Reutegger > Priority: Blocker > Fix For: 1.2.3, 1.3.3, 1.0.17 > > > There is a race condition when SplitOperations identifies garbage on a > document. The feature was introduced with OAK-2421. > The issue occurs if the following sequence of operations happens on a > document: > - The document is updated with e.g. _deleted.rX-0-1 = false within > Commit.applyToDocumentStore() > - Commit.createOrUpdateNode() perform the update and calls > checkSplitCandidate(). The document becomes a split candidate, because it is > over the threshold of 8kB > - At the same time a background update is running and starts to look at the > split candidates. > - The background update looks at the document and calls > SplitOperations.collectLocalChanges(). At this point _deleted.rX-0-1 = false > is not committed and doc.isCommitted(rev) returns false > - The commit proceeds, updates the commit root and sets the new head revision > - The background update now calls SplitOperations.isGarbage(rX-0-1) and the > method will return true! > - The background update then removes _deleted.rX-0-1 = false together with > the _commitRoot entry -- This message was sent by Atlassian JIRA (v6.3.4#6332)