[
https://issues.apache.org/jira/browse/OAK-775?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13641416#comment-13641416
]
Jukka Zitting commented on OAK-775:
-----------------------------------
bq. What is not clear to me is how we stop the internal events from reappearing
as external events.
Here's a rough draft of what I had in mind for {{NodeStoreBranch.merge()}}:
{code:java}
NodeState root = store.getRoot()
branch.rebase(root);
observer.beforeCommit(root);
try {
NodeState head = branch.getHead();
branch.merge();
observer.localCommit(head);
} finally {
observer.afterCommit(store.getRoot());
}
{code}
The observer could look something like this:
{code:java}
class Observer implements Runnable {
private NodeState lastRoot = store.getRoot();
private boolean inLocalCommit = false;
public synchronized void beforeCommit(NodeState root) {
inLocalCommit = true;
externalUpdate(lastRoot, root);
lastRoot = root;
}
public synchronized void localCommit(NodeState root) {
localUpdate(lastRoot, root, getUserData());
lastRoot = root;
}
public synchronized void afterCommit(NodeState root) {
externalUpdate(lastRoot, root);
lastRoot = root;
inLocalCommit = false;
}
// called periodically, for example using scheduleWithFixedDelay()
public synchronized void run() {
if (!inLocalCommit) {
NodeState root = store.getRoot();
externalUpdate(lastRoot, root);
lastRoot = root;
}
}
}
{code}
That should allow us to deliver both local and external events as a single,
interleaved sequence.
> Implement backward compatible observation
> -----------------------------------------
>
> Key: OAK-775
> URL: https://issues.apache.org/jira/browse/OAK-775
> Project: Jackrabbit Oak
> Issue Type: Sub-task
> Components: core, jcr
> Reporter: Michael Dürig
> Assignee: Michael Dürig
> Attachments: OAK-775-isExternal.patch, OAK-775.patch
>
>
> As [discussed | http://markmail.org/message/6bqycmx6vbq7m25c] we might want
> look into implementing an alternative approach to observation, which trades
> some scalability for improved backward compatibility.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira