Class LegacyHierarchicalLedgerManager

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.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 Detail

      • LOG

        static final org.slf4j.Logger LOG
    • Constructor Detail

      • LegacyHierarchicalLedgerManager

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

      • getLedgerPath

        public java.lang.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​(java.lang.String pathName)
                         throws java.io.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:
        java.io.IOException - when the ledger path is invalid
      • asyncProcessLedgers

        public void asyncProcessLedgers​(BookkeeperInternalCallbacks.Processor<java.lang.Long> processor,
                                        org.apache.zookeeper.AsyncCallback.VoidCallback finalCb,
                                        java.lang.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 java.lang.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