Stefan Egli created SLING-6070:
----------------------------------

             Summary: Reduce temporary storage required in JcrResourceListener, 
call reportChanges earlier
                 Key: SLING-6070
                 URL: https://issues.apache.org/jira/browse/SLING-6070
             Project: Sling
          Issue Type: Improvement
          Components: JCR
    Affects Versions: JCR Resource 2.8.0
            Reporter: Stefan Egli
             Fix For: JCR Resource 2.8.2


As noticed in OAK-4581 
([here|https://issues.apache.org/jira/browse/OAK-4581?focusedCommentId=15525601&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15525601])
 one advantage of using OakResourceListener over JcrResourceListener (hence the 
term 'optimize for oak' of the config parameter) is that OakResourceListener 
uses a NodeObserver, which calls added/removed/changed after each child 
traversal has finished. This will in turn be used by the OakResourceListener to 
call ObservationReporter.reportChanges. In the JcrResourceListener.onEvent case 
however this is not possible, as the events are delivered for each 
node/property individually, and they first have to be 'mapped' to 
ResourceChanges. This is currently done by keeping maps of 
added/removed/changed ResourceChanges and only after all events (that are 
passed in 1 onEvent) are processed is reportChanges invoked. This has the 
downside of a potentially very large temporary memory usage (these maps can get 
big).

A suggested improvement is to follow the same pattern as is done in the 
OakResourceListener/NodeObserver pair: to forward the events (by callling 
reportChanges) as early as possible. Since Oak uses a breadth-first tree 
traversal when compiling the jcr events, this fact can be used to detect the 
earliest possible moment to forward events, which is as soon as a child 
traversal has finished. That way, only parent changes need to be kept, not the 
entire tree of changes.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to