It will be good to see others' opinons before you updating the proposal. - Sijie
On Fri, Sep 1, 2017 at 2:58 AM, Sijie Guo <guosi...@gmail.com> wrote: > > > 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 >> > > >> > >> > >