Il mar 28 mar 2017, 20:57 Sijie Guo <[email protected]> ha scritto: > On Tue, Mar 28, 2017 at 11:21 AM, Enrico Olivelli <[email protected]> > wrote: > > > Il mar 28 mar 2017, 17:45 Venkateswara Rao Jujjuri <[email protected]> > ha > > scritto: > > > > > We have Explicit LAC updates now, and I recall you have made it more > > > granular (milli seconds) > > > given that, I am just wondering the need of your out of band > > communication > > > and taking an alternate route > > > in the client code. > > > > > > > JV, > > I am working to a new project that is essentialy a distributed large > object > > store, like you are doing at SF. > > I am currently using the explicit LAC with I was waiting for long time. > > After some benchs me and my colleagues start thinking if there was > another > > way to achieve the same goal and maybe using less resources. > > In my project a client writes an object and only once the write has been > > acknowledged the object is considered published on the store. So it must > be > > readable immediately by other clients. > > > > Is reader running in the same process with the writer? what semantics are > you going to achieve? read-my-write? >
Separate processes. Yes read my write > > > > As the coordination in this case is already done from other services > > external to BookKeeper the LAC is not very useful IMHO and so maybe we > can > > just simply skip the check. > > > > I wonder if this can have some issues > > > > I am going to release the project as open-source as soon as the alpha > > version will be usable, so that I can share the code and diaccuss better > > with the community > > > > > > > Thanks, > > > JV > > > > > > On Tue, Mar 28, 2017 at 7:36 AM, Enrico Olivelli <[email protected]> > > > wrote: > > > > > > > Hi all, > > > > I have just created this issue about a new small "feature" > > > > https://issues.apache.org/jira/browse/BOOKKEEPER-1019. > > > > > > > > The patch is very simple and I wonder if I am missing something. > > > > > > > > I'm copying the description of the issue in this email in order to > > start > > > > some discussion > > > > > > > > Currently we check in asyncReadEntries that the range of entries is > > > within > > > > the range 0....LastAddConfirmed. > > > > > > > > This is because the LAC guarantees that the client can read only > > entries > > > > that have been acked from the writer. > > > > The LAC protocol is very useful when there is not direct > communication > > > > between "writers" and "readers". > > > > > > > > I have an use case in which the "writer" blocks until the write is > > acked > > > > (like addEntry) and then it takes the returned id (ledgerId + > entryid) > > > and > > > > passes it to a "reader" which in turn tries to read the entry. > > > > > > > > This communication is done out-of-band in respect to BookKeeper and > we > > > can > > > > assume that the entries has been stored in a durable way (the write > as > > > been > > > > acked by a quorum of bookies). > > > > As the 'reader' as received a confirmation the the writer as > > > successifully > > > > written the entry it can read it without waiting for the piggyback of > > the > > > > LAC of the standard bookkeeper protocol. > > > > This is the normal way of working with transactional databases or > with > > > > filesystems. > > > > > > > > This is kind of "causal consistency". > > > > > > > > The idea is to add a configuration option to relax the check in > > > > asyncreadEntries > > > > > > > > this is 4.4 version: > > > > > > > > if (lastEntry > lastAddConfirmed) { > > > > LOG.error("ReadException on ledgerId:{} firstEntry:{} > > > > lastEntry:{}", > > > > new Object[] { ledgerId, firstEntry, lastEntry > }); > > > > cb.readComplete(BKException.Code.ReadException, this, > > null, > > > > ctx); > > > > return; > > > > } > > > > > > > > this is my proposal: > > > > > > > > if (lastEntry > lastAddConfirmed && > > > > !allowReadingAfterLastAddConfirmed) { > > > > LOG.error("ReadException on ledgerId:{} firstEntry:{} > > > > lastEntry:{}", > > > > new Object[] { ledgerId, firstEntry, lastEntry > }); > > > > cb.readComplete(BKException.Code.ReadException, this, > > null, > > > > ctx); > > > > return; > > > > } > > > > > > > > > > > > Does this make sense to any of you ? > > > > > > > > Enrico > > > > > > > > > > > > > > > > -- > > > Jvrao > > > --- > > > First they ignore you, then they laugh at you, then they fight you, > then > > > you win. - Mahatma Gandhi > > > > > -- > > > > > > -- Enrico Olivelli > > > -- -- Enrico Olivelli
