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.


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

Reply via email to