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

Reply via email to