On Fri, Sep 1, 2017 at 2:50 AM, Enrico Olivelli <eolive...@gmail.com> wrote:

> Thank you Sijie for taking a look so quickly
>
> My proposal was only narrowed to the CreateLedger API, but I see your
> approach is really more straightforward  and I like it very much.
> I have introduced the LedgerConfiguration bean in order to have some
> "template" for creating ledgers, you proposal is more complete.
>
> I will surely update the document with your proposal, maybe we can give
> time for other comments
>
> some answers inline
>
> Enrico
>
> 2017-09-01 11:20 GMT+02:00 Sijie Guo <guosi...@gmail.com>:
>
> > hmm, I actually like the alternative you rejected. Instead, I don't think
> > the approach in the proposal is the right one that we should take.
> >
> > 1) LedgerConfiguration is a confusing term used here. what doest a
> > `configuration` mean here, is the configuration stored somewhere or just
> > purely runtime configuration?
> >
>
> It was for runtime, maybe a better name would be LedgerCreationSpecs
>

If we are using builder, then we don't this any more, no?


>
>
> > 2) It is not an extendible solution. how does this apply to open/delete
> > operations?
> >
>
> yes I agree, your proposal sounds really more powerful to me
>
>
> >
> > I'd like to extend your alternative to understand why it is rejected by
> > you.
> >
> > ===== The builder approach ==========
> >
> > 1) builder interfaces for operations
> >
> > - create operations builder interfaces under
> > org/apache/bookkeeper/client/api/op/
> >
> > - add a ICreateBuilder for create operation:
> >
> > interface ICreateBuilder {
> >
> >     ICreateBuilder withEnsembleSize(...);
> >
> >     ICreateBuilder withWriteQuorumSize(...);
> >
> >     ...
> >
> >     void execute(CreateCallback callback, Object ctx);
> >
> >     // support java8 completable future
> >     CompletableFuture<LedgerHandle> execute();
> >
> > }
> >
> > - LedgerCreateOp implements CreateBuilder
> >
>
> I don't like this very much, maybe I would like to create
> wrappers/delegates all of the XXXOps are quite complex, and this will make
> them even more complex.
> Anyway I see it would be simpler from another point of view, and it can be
> fine to be
>

one consideration should be taken is the object allocation. I am fine with
delegation.
but we should be looking into using netty recycler for reusing objects. I
believe Matteo did
some changes in yahoo branch (which hasn't been ported back). We should
consider
following that style.


>
>
> >
> > 2) create an interface for bookkeeper. IBookKeeper under
> > org/apache/bookkeeper/client/api/IBookKeeper
> >
> > interface IBookKeeper {
> >
> >       /**
> >        * new a create ledger builder.
> >        */
> >       ICreateBuilder createLedger();
> >
> > }
> >
> > class BookKeeper extends IBookKeeper {
> >
> >      ICreateBuilder createLedger() {
> >
> >          // return a ledger create op builder
> >
> >      }
> >
> > }
> >
> >
> > there are a few benefits using this approach:
> >
> > - this approach can be used for other operations - create/delete/open. we
> > will have a consistent style for different ops and easy to extend in
> > future.
> >
>
> yes
>
>
> > - we can use this approach to cleanup all the interfaces. so we can
> > separate interface from implementation eventually, without breaking
> > existing API. then we can encourage people to use new API and phase out
> the
> > old API.
> >
> yes
>
>
> > - we should also have interface for LedgerHandle, try to separate write
> > interface from read interface to produce a cleaner interface.
> >
>
> I totally agree on this point ! LedgerHandle is somehow "messy", it
> contains both read and write operations, and the meaning of some variables
> (and so getters...) is "contextual"
> Having different interfaces will let use be clearer on the contracts with
> the client
>
>
> >
> >
> > Any thoughts?
> >
> > - Sijie
> >
> >
> > On Fri, Sep 1, 2017 at 1:33 AM, Enrico Olivelli <eolive...@gmail.com>
> > wrote:
> >
> > > Hi all,
> > > I have just posted a proposal to introduce a new createLedger API using
> > the
> > > 'builder' design pattern.
> > >
> > > https://cwiki.apache.org/confluence/display/BOOKKEEPER/
> > > BP-15+New+CreateLeader+API
> > >
> > > This is a pre-requisite for BP-14 Relax Durability and for LedgerType
> > > improvements
> > >
> > > It is a trivial change but it will be the base for future enhancements
> > >
> > > I will send a patch as soon as we agree on the proposal
> > >
> > > Cheers
> > > Enrico Olivelli
> > >
> >
>

Reply via email to