Class LegacyHierarchicalLedgerManager

All Implemented Interfaces:
Closeable, AutoCloseable, LedgerManager, org.apache.zookeeper.Watcher

class LegacyHierarchicalLedgerManager extends AbstractHierarchicalLedgerManager
Hierarchical Ledger Manager which manages ledger meta in zookeeper using 2-level hierarchical znodes.

LegacyHierarchicalLedgerManager splits the generated id into 3 parts (2-4-4):

<level1 (2 digits)><level2 (4 digits)><level3 (4 digits)>
These 3 parts are used to form the actual ledger node path used to store ledger metadata:
(ledgersRootPath)/level1/level2/L(level3)
E.g Ledger 0000000001 is split into 3 parts 00, 0000, 0001, which is stored in (ledgersRootPath)/00/0000/L0001. So each znode could have at most 10000 ledgers, which avoids errors during garbage collection due to lists of children that are too long.
  • Field Details

  • Constructor Details

    • LegacyHierarchicalLedgerManager

      public LegacyHierarchicalLedgerManager(AbstractConfiguration conf, org.apache.zookeeper.ZooKeeper zk)
      Constructor.
      Parameters:
      conf - Configuration object
      zk - ZooKeeper Client Handle
  • Method Details

    • getLedgerPath

      public String getLedgerPath(long ledgerId)
      Description copied from class: AbstractZkLedgerManager
      Get the znode path that is used to store ledger metadata.
      Specified by:
      getLedgerPath in class AbstractZkLedgerManager
      Parameters:
      ledgerId - Ledger ID
      Returns:
      ledger node path
    • getLedgerId

      public long getLedgerId(String pathName) throws IOException
      Description copied from class: AbstractZkLedgerManager
      Get ledger id from its znode ledger path.
      Specified by:
      getLedgerId in class AbstractZkLedgerManager
      Parameters:
      pathName - Ledger path to store metadata
      Returns:
      ledger id
      Throws:
      IOException - when the ledger path is invalid
    • asyncProcessLedgers

      public void asyncProcessLedgers(BookkeeperInternalCallbacks.Processor<Long> processor, org.apache.zookeeper.AsyncCallback.VoidCallback finalCb, Object context, int successRc, int failureRc)
      Description copied from interface: LedgerManager
      Loop to process all ledgers.

        After all ledgers were processed, finalCb will be triggered:
      • if all ledgers are processed done with OK, success rc will be passed to finalCb.
      • if some ledgers are processed failed, failure rc will be passed to finalCb.

      Parameters:
      processor - Ledger Processor to process a specific ledger
      finalCb - Callback triggered after all ledgers are processed
      context - Context of final callback
      successRc - Success RC code passed to finalCb when callback
      failureRc - Failure RC code passed to finalCb when exceptions occurred.
    • getLedgerParentNodeRegex

      protected String getLedgerParentNodeRegex()
      Description copied from class: AbstractZkLedgerManager
      regex expression for name of top level parent znode for ledgers (in HierarchicalLedgerManager) or znode of a ledger (in FlatLedgerManager).
      Specified by:
      getLedgerParentNodeRegex in class AbstractZkLedgerManager
      Returns:
    • getLedgerRanges

      public LedgerManager.LedgerRangeIterator getLedgerRanges(long zkOpTimeoutMs)
      Description copied from interface: LedgerManager
      Loop to scan a range of metadata from metadata storage.
      Parameters:
      zkOpTimeoutMs - Iterator considers timeout while fetching ledger-range from zk.
      Returns:
      will return a iterator of the Ranges