jackrabbit-oak-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tomek Rękawek (JIRA) <j...@apache.org>
Subject [jira] [Comment Edited] (OAK-7710) CompositeNodeStore does not dispatch external events to observers
Date Mon, 10 Sep 2018 10:09:00 GMT

    [ https://issues.apache.org/jira/browse/OAK-7710?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16608938#comment-16608938
] 

Tomek Rękawek edited comment on OAK-7710 at 9/10/18 10:08 AM:
--------------------------------------------------------------

[~mreutegg], [~catholicon] - WRT to Marcel's latest comment:

> I think there's a general problem with how the CompositeNodeStore.merge() method interacts
with the stores and the observers. The assumption is that the mergeLock protects a critical
section, which is not the case when the DocumentNodeStore is used as the globalStore and external
changes come in. Maybe the observer callbacks could be coordinated with the help of the CommitInfo?
IIRC that's the same object passed to the merge() call.

Can we use the CommitInfo#isExternal() to differentiate between these two cases? Eg. we can:

1. for the local changes, we can explicitly invoke the {{dispatcher.contentChanged()}} in
the {{CompositeNodeStore#merge()}} method,
2. for the external changes, we can only process events with {{CommitInfo#isExternal() ==
true}} in the {{MountedNodeStoreObserver}}.

Attached proposal:  [^OAK-7710-2.patch] 


was (Author: tomek.rekawek):
[~mreutegg], [~catholicon] - WRT to Marcel's latest comment:

> I think there's a general problem with how the CompositeNodeStore.merge() method interacts
with the stores and the observers. The assumption is that the mergeLock protects a critical
section, which is not the case when the DocumentNodeStore is used as the globalStore and external
changes come in. Maybe the observer callbacks could be coordinated with the help of the CommitInfo?
IIRC that's the same object passed to the merge() call.

Can we use the CommitInfo#isExternal() to differentiate between these two cases? Eg. we can:

1. for the local changes, we can explicitly invoke the {{dispatcher.contentChanged()}} in
the {{CompositeNodeStore#merge()}} method,
2. for the external changes, we can only process events with {{CommitInfo#isExternal() ==
true}} in the {{MountedNodeStoreObserver}}.

> CompositeNodeStore does not dispatch external events to observers
> -----------------------------------------------------------------
>
>                 Key: OAK-7710
>                 URL: https://issues.apache.org/jira/browse/OAK-7710
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: composite
>            Reporter: Vikas Saurabh
>            Assignee: Tomek Rękawek
>            Priority: Major
>             Fix For: 1.10
>
>         Attachments: OAK-7710-2.patch, OAK-7710.patch, OAK-7710.test.patch
>
>
> Currently {{CompositeNodeStore}} only ever dispatches changes from inside its {{merge}}
method. This then loses external events that could be read in background read of some underlying
{{DocumentNodeStore}}.
> [^OAK-7710.test.patch] has an ignored test representing the scenario.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message