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

Vikas Saurabh commented on OAK-6276:
------------------------------------

bq. If that turns out to be older,
I think there is no semantics of any strict ordering wrt node states. And, in 
any case, all we want to see if such a state is visible or not. Some derived 
propossal/blabber below.

Imo, exposing a semantic of revision might not be a good idea. At the end of 
the day, all we want is message-producer to be able to pass on a token to 
message-consumer. Message-consumer should be able to then call some exposed 
util method to say something like {{waitUntilTokenVisible(token)}} (or maybe a 
callback/future/something-fancy).

The token can simply be a opaque string - and nodestores could very well choose 
to pass along revision id (on seg-tar, it might be useful to actually send out 
a journal log type entry). Usage of that string, otoh, could only be done to 
peek if such a state is visible.

Internally, I guess all nodestores can do their internal 
{{!getRootAtToken().isEmpty())}} to check for visibility.
For scheduling/callback/waits, I think the stores should be able to cook up 
something (I don't even have a hand-wavy idea atm).

To expose these facilities, I guess a utility method that takes session and 
does the task would be sufficient e.g. {{static String 
getVisibilityTokenFor(session)}} or {{static isTokenVisible(session, token)}.
----
Sidenotes:
# wrt to kafka, btw, I'm assuming multiple job-producers - I'm not sure how 
would we store offsets of processed jobs without hindering job consumption by 
waiting to see valid state on the job that got picked.
# What we're trying is having a soft-checkpoint. I'm not sure of how can we 
handle a job that was sent on a very old revGC-ed/compacted to be processed 
(and do we even want to??)
# Would seg-tar throw UnsupportedException on the facilities we expose here?
# Haven't thought this through - but, how does multiplexing node store play 
along? 

> expose way to detect "eventual consistency delay"
> -------------------------------------------------
>
>                 Key: OAK-6276
>                 URL: https://issues.apache.org/jira/browse/OAK-6276
>             Project: Jackrabbit Oak
>          Issue Type: New Feature
>          Components: api
>            Reporter: Stefan Egli
>
> I have a requirement to support an external messaging channel (eg Kafka) 
> between Oak-based instances of the same cluster. As part of handling those 
> messages the target instance in some cases might have to access data from the 
> repository. 
> Now with DocumentNodeStore's eventual consistency that data might not 
> 'travel' from the source to the target instance as fast as is the case for 
> the external message.
> Therefore the need arises to be able to delay such messages (on the target 
> instance) until the repository sees (at least) the data the source instance 
> wrote when sending off the message.
> This ticket is to equip Oak with any feasible way for higher level code to 
> generally speaking detect such an "eventual consistency delay".
> One simple idea that comes to mind is to expose the current _head revision 
> vector_ (or that from a particular session, but that might not be required, 
> ie be too complicated). The source instance could get the local head revision 
> vector, piggyback that on the message, then that could be compared on the 
> target instance with its head state. If that turns out to be older, then it 
> could do a wait and retry. (Nicer would of course be if there would even be a 
> call-back - but in theory that could also be implemented ontop of an 
> Observer).
> One means to expose the head revision vector would be via a repository 
> descriptor (which on access returns the current value, similar to [how 
> discovery-lite does 
> it|https://github.com/apache/jackrabbit-oak/blob/2634dbde9aedc2549f0512285e9abee5858b256f/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentDiscoveryLiteService.java#L246]).
>  And the format could be normalized as eg {{longs}} (eg {{\[1496071927014, 
> 1496071926243]}} (instead of {{\["r15c54d532ec-0-1", "r15c54d532ec-0-2"]}} to 
> avoid leaking the revision format explicitly).



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to