Class AbstractZkLedgerManager

java.lang.Object
org.apache.bookkeeper.meta.AbstractZkLedgerManager
All Implemented Interfaces:
Closeable, AutoCloseable, LedgerManager, org.apache.zookeeper.Watcher
Direct Known Subclasses:
AbstractHierarchicalLedgerManager, FlatLedgerManager

public abstract class AbstractZkLedgerManager extends Object implements LedgerManager, org.apache.zookeeper.Watcher
Abstract ledger manager based on zookeeper, which provides common methods such as query zk nodes.
  • Field Details

  • Constructor Details

    • AbstractZkLedgerManager

      protected AbstractZkLedgerManager(AbstractConfiguration conf, org.apache.zookeeper.ZooKeeper zk)
      ZooKeeper-based Ledger Manager Constructor.
      Parameters:
      conf - Configuration object
      zk - ZooKeeper Client Handle
  • Method Details

    • getLedgerPath

      public abstract String getLedgerPath(long ledgerId)
      Get the znode path that is used to store ledger metadata.
      Parameters:
      ledgerId - Ledger ID
      Returns:
      ledger node path
    • getLedgerId

      protected abstract long getLedgerId(String ledgerPath) throws IOException
      Get ledger id from its znode ledger path.
      Parameters:
      ledgerPath - Ledger path to store metadata
      Returns:
      ledger id
      Throws:
      IOException - when the ledger path is invalid
    • process

      public void process(org.apache.zookeeper.WatchedEvent event)
      Specified by:
      process in interface org.apache.zookeeper.Watcher
    • createLedgerMetadata

      public CompletableFuture<Versioned<LedgerMetadata>> createLedgerMetadata(long ledgerId, LedgerMetadata inputMetadata)
      Description copied from interface: LedgerManager
      Create a new ledger with provided ledger id and metadata.
      Specified by:
      createLedgerMetadata in interface LedgerManager
      Parameters:
      ledgerId - Ledger id provided to be created
      inputMetadata - Metadata provided when creating the new ledger
      Returns:
      Future which, when completed returns the metadata of the newly created ledger. Completed with an exception:
    • removeLedgerMetadata

      public CompletableFuture<Void> removeLedgerMetadata(long ledgerId, Version version)
      Description copied from interface: LedgerManager
      Remove a specified ledger metadata by ledgerId and version.
      Specified by:
      removeLedgerMetadata in interface LedgerManager
      Parameters:
      ledgerId - Ledger Id
      version - Ledger metadata version
      Returns:
      Future which, when completed, denotes that the ledger metadata has been removed. Completed with an exception:
    • registerLedgerMetadataListener

      public void registerLedgerMetadataListener(long ledgerId, BookkeeperInternalCallbacks.LedgerMetadataListener listener)
      Description copied from interface: LedgerManager
      Register the ledger metadata listener on ledgerId.
      Specified by:
      registerLedgerMetadataListener in interface LedgerManager
      Parameters:
      ledgerId - ledger id.
      listener - listener.
    • unregisterLedgerMetadataListener

      public void unregisterLedgerMetadataListener(long ledgerId, BookkeeperInternalCallbacks.LedgerMetadataListener listener)
      Description copied from interface: LedgerManager
      Unregister the ledger metadata listener on ledgerId.
      Specified by:
      unregisterLedgerMetadataListener in interface LedgerManager
      Parameters:
      ledgerId - ledger id.
      listener - ledger metadata listener.
    • readLedgerMetadata

      public CompletableFuture<Versioned<LedgerMetadata>> readLedgerMetadata(long ledgerId)
      Description copied from interface: LedgerManager
      Read ledger metadata of a specified ledger.
      Specified by:
      readLedgerMetadata in interface LedgerManager
      Parameters:
      ledgerId - Ledger Id
      Returns:
      Future which, when completed, contains the requested versioned metadata. Completed with an exception::
    • readLedgerMetadata

      protected CompletableFuture<Versioned<LedgerMetadata>> readLedgerMetadata(long ledgerId, org.apache.zookeeper.Watcher watcher)
    • writeLedgerMetadata

      public CompletableFuture<Versioned<LedgerMetadata>> writeLedgerMetadata(long ledgerId, LedgerMetadata metadata, Version currentVersion)
      Description copied from interface: LedgerManager
      Write ledger metadata.
      Specified by:
      writeLedgerMetadata in interface LedgerManager
      Parameters:
      ledgerId - Ledger Id
      metadata - Ledger Metadata to write
      currentVersion - The version of the metadata we expect to be overwriting.
      Returns:
      Future which, when completed, contains the newly written metadata. Completed with an exception:
    • asyncProcessLedgersInSingleNode

      protected void asyncProcessLedgersInSingleNode(String path, BookkeeperInternalCallbacks.Processor<Long> processor, org.apache.zookeeper.AsyncCallback.VoidCallback finalCb, Object ctx, int successRc, int failureRc)
      Process ledgers in a single zk node.

      for each ledger found in this zk node, processor#process(ledgerId) will be triggered to process a specific ledger. after all ledgers has been processed, the finalCb will be called with provided context object. The RC passed to finalCb is decided by :

      • All ledgers are processed successfully, successRc will be passed.
      • Either ledger is processed failed, failureRc will be passed.

      Parameters:
      path - Zk node path to store ledgers
      processor - Processor provided to process ledger
      finalCb - Callback object when all ledgers are processed
      ctx - Context object passed to finalCb
      successRc - RC passed to finalCb when all ledgers are processed successfully
      failureRc - RC passed to finalCb when either ledger is processed failed
    • isSpecialZnode

      public static boolean isSpecialZnode(String znode)
      Whether the znode a special znode.
      Parameters:
      znode - Znode Name
      Returns:
      true if the znode is a special znode otherwise false
    • isLeadgerIdGeneratorZnode

      public static boolean isLeadgerIdGeneratorZnode(String znode)
    • getLedgerParentNodeRegex

      protected abstract String getLedgerParentNodeRegex()
      regex expression for name of top level parent znode for ledgers (in HierarchicalLedgerManager) or znode of a ledger (in FlatLedgerManager).
      Returns:
    • isLedgerParentNode

      public boolean isLedgerParentNode(String znode)
      whether the child of ledgersRootPath is a top level parent znode for ledgers (in HierarchicalLedgerManager) or znode of a ledger (in FlatLedgerManager).
      Parameters:
      znode - Znode Name
      Returns:
    • ledgerListToSet

      protected NavigableSet<Long> ledgerListToSet(List<String> ledgerNodes, String path)
      Convert the ZK retrieved ledger nodes to a HashSet for easier comparisons.
      Parameters:
      ledgerNodes - zk ledger nodes
      path - the prefix path of the ledger nodes
      Returns:
      ledger id hash set
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable