On Thu, Jun 25, 2015 at 10:49 PM, Marius Petria <[email protected]> wrote:
> AFAIU because the local events are changed to external events it means that 
> they can also be dropped completly under load, is that true?

Well they are not dropped. Observation in Oak works on basis of diff
of NodeState. So lets say you have an Observation queue of size 3 with
3 local events

1. [ns1, ns2, ci1]
2. [ns2, ns3, ci2]
3. [ns3, ns4, ci3]

Each tuple is [base root nodestate, nodeState post change, commit
info]. Now if 4 change event [ns4, ns5, ci4] comes the
BackgroundObserver has following options

1. Block on put
2. Have a indefinite length queue then just add to queue
3. Pull out the last event and replace it with merged

So current logic in Oak goes for #3.

1. [ns1, ns2, ci1]
2. [ns2, ns3, ci2]
3. [ns3, ns5, null]

Now when it merged/collapsed the content change then you cannot
associate any specific commit info to it. In such cases

1. You cannot determine which user has made that change.
2. Some changes might not get visible. For example if a foo property
is added in E3 and removed in E4. Then Merged content change would not
provide any indication that any such change happened

So such merged changes are shown as external i.e.
JackrabbitEvent#isExternal returns true for them currently. Problem is
currently its not possible to distinguish such collapsed events from
truely external events. May be we make that distinction so that
component which just rely on *some local change* to react can continue
to work. Though there is no gurantee that they see *each* local
change.

Chetan Mehrotra

Reply via email to