[ https://issues.apache.org/jira/browse/OAK-4916?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15572294#comment-15572294 ]
Stefan Egli commented on OAK-4916: ---------------------------------- Note that the issue with switching a filter [mentioned here|https://issues.apache.org/jira/browse/OAK-4796?focusedCommentId=15548765&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15548765] still applies. It would require OAK-4898 to pass the FilterProvider with each CommitInfo into the BackgroundObserver's queue for this to work correctly. > Add support for excluding commits to BackgroundObserver > ------------------------------------------------------- > > Key: OAK-4916 > URL: https://issues.apache.org/jira/browse/OAK-4916 > Project: Jackrabbit Oak > Issue Type: Technical task > Components: core > Affects Versions: 1.5.11 > Reporter: Stefan Egli > Assignee: Stefan Egli > Fix For: 1.6 > > Attachments: OAK-4916.patch, OAK-4916.v2.patch > > > As part of pre-filtering commits it would be useful to have support in the > BackgroundObserver (in general) that would allow to exclude certain commits > from being added to the (BackgroundObserver's) queue, thus keeping the queue > smaller. The actual filtering is up to subclasses. > The suggested implementation is as follows: > * a new method {{isExcluded}} is introduced which represents a subclass hook > for filtering > * excluded commits are not added to the queue > * when multiple commits are excluded subsequently, this is collapsed > * the first non-excluded commit (ContentChange) added to the queue is marked > with the last non-excluded root state as the 'previous root' > * downstream Observers are notified of the exclusion of a commit via a > special CommitInfo {{NOOP_CHANGE}}: this instructs it to exclude this change > while at the same time 'fast-forwarding' the root state to the new one. > ** this extra token is one way of solving the problem that > {{Observer.contentChanged}} represents a diff between two states but does not > transport the 'from' state explicitly - that is implicitly taken from the > previous call to {{contentChanged}}. Thus using such a gap token > ({{NOOP_CHANGE}}) seems to be the only way to instruct Observers to skip a > change. > To repeat: whoever extends BackgroundObserver with filtering must be aware of > the new {{NOOP_CHANGE}} token. Anyone not doing filtering will not get any > {{NOOP_CHANGE}} tokens though. > NOTE: See [comment further > below|https://issues.apache.org/jira/browse/OAK-4916?focusedCommentId=15572165&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15572165] > with a new suggested approach, which doesn't use NOOP_CHANGED but introduces > a new FilteringAwareObserver instead. -- This message was sent by Atlassian JIRA (v6.3.4#6332)