Enrico what we do is, we do it at the application level.
The client does

 // Sanity check before trying to read; Get the latest LAC.
        if (rquest_entryId > lh.getLastAddConfirmed()) {
            // Get the latest Lac.
            try {
                lh.readExplicitLastConfirmed();
            } catch (BKException e) {
                // We don't need to fail the read just because getting
explicit LAC failed.
                LOG.warn("Read lac on extentId: {} failed: {} ", extentId,
e);
            }
        }
// Read now
        Enumeration<LedgerEntry> entries = lh.readEntries(rquest_entryId,
rquest_entryId);


On Tue, Mar 28, 2017 at 12:38 PM, Enrico Olivelli <eolive...@gmail.com>
wrote:

> Il mar 28 mar 2017, 20:57 Sijie Guo <guosi...@gmail.com> ha scritto:
>
> > On Tue, Mar 28, 2017 at 11:21 AM, Enrico Olivelli <eolive...@gmail.com>
> > wrote:
> >
> > > Il mar 28 mar 2017, 17:45 Venkateswara Rao Jujjuri <jujj...@gmail.com>
> > 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 <
> eolive...@gmail.com>
> > > > 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
>



-- 
Jvrao
---
First they ignore you, then they laugh at you, then they fight you, then
you win. - Mahatma Gandhi

Reply via email to