Il lun 2 ott 2017, 18:33 Sijie Guo <guosi...@gmail.com> ha scritto:

> On Sun, Oct 1, 2017 at 10:11 PM, Enrico Olivelli <eolive...@gmail.com>
> wrote:
>
> > Il lun 2 ott 2017, 04:06 Sijie Guo <guosi...@gmail.com> ha scritto:
> >
> > > On Sep 28, 2017 7:10 AM, "Enrico Olivelli" <eolive...@gmail.com>
> wrote:
> > >
> > > 2017-09-28 15:34 GMT+02:00 Sijie Guo <guosi...@gmail.com>:
> > >
> > > > - these interfaces are more an admin interface. you can get an
> > bookkeeper
> > > > admin object and then access ledger manager to fetch metadata, does
> > that
> > > > work for you?
> > > >
> > >
> > > Yes as a workaround I am taking exactly this approch...listLedgers ->
> > > getLedgerMetadata (using BK 4.5)
> > >
> > > As the project I am working on will use 4.6 and the new
> > > org.apache.bookkeeper.client.api as I need volatily durability ledgers
> > it
> > > is a pity to me that I will be stuck to use BookKeeperAdmin and
> > > LedgerMetadata
> > > only for listing ledgers
> > >
> > >
> > > We can propose the interface for bk admin. But I don't see a reason
> that
> > > listing ledgers being as part of bookkeeper.
> > >
> >
> > Ok
> >
> >
> > >
> > >
> > > > - metadata filter is just a wrapper over ledger iterator or async
> > process
> > > > ledger of ledger manager. most likely you will be the logic
> > implementer.
> > > I
> > > > don't see any strong reason we need to expose this filter as well. I
> > > would
> > > > suggesting deferring this kind of requirements when we really need
> it.
> > > >
> > >
> > > we could at least add listLedgers + getLedgerMetadata API in the new
> API
> > so
> > > that new clients won't need BookKeeperAdmin, which takes a direct ZK
> > client
> > >
> > >
> > > -1 for any direct zk access. It should be hidden behind a ledger
> manager.
> > >
> >
> > Sorry maybe I was not clear, I did not propose to make zk more visibile.
> > I wrote that I would like that new clients do not use legacy BookKeeper
> > Admin class which has explicit deps on zk
> >
> > >
> > > or a legacy o.a.b.client.BookKeper object
> > >
> > > I have a good use case, to access the list of ledgers which satisfy a
> > given
> > > condition on custom metadata, we introduced custom metadata in order to
> > > mark ledgers and to meta operations, classifications....
> > >
> > >
> > > If metadata store doesn't support predicate pushdown, you still iterate
> > all
> > > the ledgers and do the filter at your side. So I don't see a reason to
> > > support filter.
> > >
> >
> > In case of a ledgermanager which lives inside the bookie and in presence
> of
> > a big number of ledgers, say 100000,  we will save a lot of network by
> > returning only a sublist of ledgers to the client.
> > In the new scenario of thin client this makes sense to me
> >
>
> It will save the network bandwidth in the thin client case. but it still
> doesn't save any things when talking to zookeeper directly.
> I am not against filtering approach. I am suggesting it doesn't buy
> applications any benefits at this moment. I would prefer proposing
> such interface after we have a better metadata store.
>

At the moment we can wait, there is no hurry.
In the future we will have a new admin API, but now let's wait for thin
client and http

Thank you all
Enrico


> >
> > >
> > > And if you are filtering custom metadata, this logic sounds tight to
> > > application logic, no?
> > >
> >
> > Yes but we can give basic support for simple filtering. For instance I am
> > usibg metadata in order to:
> > - define the application which created the ledger
> > - define a group if semantically bound ledgers
> > - add explicit references to aplication ids
> >
> > We introduced custom metada as key value pairs and I see it very simple
> to
> > create a basic but effective API to use them
> >
>
> Currently it is not more effective than using the 'ledger range iterator'
> or 'async process ledger' in the ledger manager.
> since there is already an interface for iterating ledgers and there isn't a
> metadata store supports filtering effectively, I would
> suggest doing any metadata filter api after we have a better metadata
> store.
>
> It is going be just a filter wrapper on top of 'ledger range iterator' at
> current implementation. It doesn't really buy you any benefits at this
> moment.
>
>
> >
> > >
> > >
> > > It is not blocker but if you are ok I will create an issue, but before
> > > creating an issue I would like to draft a starting idea which would
> work
> > > for the community as usual
> > >
> > >
> > > I don't see a strong value having a metadata filter, given it doesn't
> buy
> > > you any benefits at current metadata store. So I am -0 to this idea.
> > >
> >
> > As I wrote above, I will see the benefits in new implementations, like
> the
> > http API and the thin client
> >
>
> In my view, you have to design http API or thin client with filtering
> semantic first in a consistent way. Then you will know the requirement for
> what can be improved in the ledger metadata interface.
> I am seeing this is done in a reverse way.
>
>
> >
> > Enrico
> >
> > >
> > >
> > > Thanks
> > > Enrico
> > >
> > >
> > >
> > >
> > >
> > > >
> > > >
> > > >
> > > > On Thu, Sep 28, 2017 at 9:05 AM Enrico Olivelli <eolive...@gmail.com
> >
> > > > wrote:
> > > >
> > > > > 2017-09-28 14:55 GMT+02:00 Sijie Guo <guosi...@gmail.com>:
> > > > >
> > > > > > On Sep 28, 2017 6:20 AM, "Enrico Olivelli" <eolive...@gmail.com>
> > > > wrote:
> > > > > >
> > > > > > Hi,
> > > > > > I am looking for an API to read ledger metadata without actually
> > > > opening
> > > > > a
> > > > > > ledger.
> > > > > >
> > > > > > Currently opening a ledger sets a watch on ZK and this is really
> > > > > expensive
> > > > > > and in any case the desired action is not to "open a ledger" but
> to
> > > > > access
> > > > > > meta information about the ledger.
> > > > > >
> > > > > > My real usecase is that I want to list ledgers and filter the
> > results
> > > > > using
> > > > > > custom metadata.
> > > > > >
> > > > > > If there is no available solution I would like to file and issue
> > and
> > > a
> > > > > > proposal to have a new method in the new API like
> > > > > >
> > > > > > org.apache.bookkeeper.client.api.LedgerMetadata {
> > > > > >     public long getId();
> > > > > >     public Map<String, byte[]> getCustomMetadata();
> > > > > >     public long getCtime();
> > > > > > }
> > > > > >
> > > > > >
> > > > > > I am fine with an interface for ledger metadata. It can help hide
> > the
> > > > > > implementation details.
> > > > > >
> > > > > >
> > > > > > org.apache.bookkeeper.client.api.BookKeeper {
> > > > > >
> > > > > >       LedgerMetadata getLedgerMetadata(long ledgerId);
> > > > > >       void listLedgers(String query, Consumer<LedgerMetadata>
> > > consumer)
> > > > > >
> > > > > > }
> > > > > >
> > > > > >
> > > > > > I am not sure if we want this. Now, you can access the ledger
> > manager
> > > > for
> > > > > > reading and listing metadata. And this is how it was used by bk
> > > shell.
> > > > I
> > > > > > would not suggest adding this to the public API until we really
> > see a
> > > > > value
> > > > > > there.
> > > > > >
> > > > >
> > > > > BookKeeper object does not expose LedgerManager, I don't know if we
> > > want
> > > > to
> > > > > expose it in the new API
> > > > >
> > > > > we could add an API like:
> > > > >
> > > > > interface org.apache.bookkeeper.client.api.LedgerMetadataFilter {
> > > > >     // marker interface
> > > > > }
> > > > >
> > > > > class org.apache.bookkeeper.client.api.CustomMetadataFilter
> > implements
> > > > > LedgerMetadataFilter {
> > > > >      // filter custom metadata field == value
> > > > >        CustomMetadataFilter(String key, byte[] value);
> > > > > }
> > > > >
> > > > > class org.apache.bookkeeper.client.api.CompositeMetadataFilter
> > > > implements
> > > > > LedgerMetadataFilter {
> > > > >      // apply a sequence of filters in AND
> > > > >      CompositeMetadataFilter(LedgerMetadataFilter ... filters);
> > > > > }
> > > > >
> > > > >
> > > > > void listLedgers(LedgerFilter filter, Consumer<LedgerMetadata>
> > > consumer)
> > > > >
> > > > > Does this sound better to you ? it is more simpler but clear and
> the
> > > > > implemenation will be really easy
> > > > >
> > > > >
> > > > >
> > > > > >
> > > > > >
> > > > > > for the "query" we can define a simple "expression language"
> > > > > >
> > > > > > metadata.owner = 'xxx' and (metadata.type = 'yyyy' or
> > metadata.type =
> > > > > > 'zzzz')
> > > > > >
> > > > > >
> > > > > > I am not a fan of having a query language for such purpose in bk.
> > At
> > > > > least,
> > > > > > I don't see a lot of use cases that need this kind of query
> > > > capabilities.
> > > > > > If you can share more use cases about this, that would be good
> for
> > > > > > discussions.
> > > > > >
> > > > > >
> > > > > > we can provide a basic implementation of that language which
> > actually
> > > > > works
> > > > > > on LedgerMetadata objects and internally we will loop over the
> > > ledgers
> > > > > and
> > > > > > apply the expression to every ledger
> > > > > > the basic implementation can leverage standard expression
> languages
> > > > like
> > > > > EL
> > > > > >
> > > > > > smarter implementations of LedgerManager will be able to narrow
> the
> > > > > search
> > > > > > and save resources
> > > > > >
> > > > > > Thoughts ?
> > > > > >
> > > > > > -- Enrico
> > > > > >
> > > > >
> > > >
> > >
> > --
> >
> >
> > -- Enrico Olivelli
> >
>
-- 


-- Enrico Olivelli

Reply via email to