Package org.apache.bookkeeper.meta
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.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classCancelWatchLedgerMetadataTask class.protected classReadLedgerMetadataTask class.Nested classes/interfaces inherited from interface org.apache.bookkeeper.meta.LedgerManager
LedgerManager.LedgerRange, LedgerManager.LedgerRangeIteratorNested classes/interfaces inherited from interface org.apache.zookeeper.Watcher
org.apache.zookeeper.Watcher.Event, org.apache.zookeeper.Watcher.WatcherType -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final AbstractConfigurationprotected final Stringprotected final ConcurrentMap<Long,Set<BookkeeperInternalCallbacks.LedgerMetadataListener>> protected ScheduledExecutorServiceprotected final org.apache.zookeeper.ZooKeeper(package private) static final int -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractZkLedgerManager(AbstractConfiguration conf, org.apache.zookeeper.ZooKeeper zk) ZooKeeper-based Ledger Manager Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidasyncProcessLedgersInSingleNode(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.voidclose()createLedgerMetadata(long ledgerId, LedgerMetadata inputMetadata) Create a new ledger with provided ledger id and metadata.protected abstract longgetLedgerId(String ledgerPath) Get ledger id from its znode ledger path.protected abstract Stringregex expression for name of top level parent znode for ledgers (in HierarchicalLedgerManager) or znode of a ledger (in FlatLedgerManager).abstract StringgetLedgerPath(long ledgerId) Get the znode path that is used to store ledger metadata.static booleanisLeadgerIdGeneratorZnode(String znode) booleanisLedgerParentNode(String znode) whether the child of ledgersRootPath is a top level parent znode for ledgers (in HierarchicalLedgerManager) or znode of a ledger (in FlatLedgerManager).static booleanisSpecialZnode(String znode) Whether the znode a special znode.protected NavigableSet<Long>ledgerListToSet(List<String> ledgerNodes, String path) Convert the ZK retrieved ledger nodes to a HashSet for easier comparisons.voidprocess(org.apache.zookeeper.WatchedEvent event) readLedgerMetadata(long ledgerId) Read ledger metadata of a specified ledger.protected CompletableFuture<Versioned<LedgerMetadata>>readLedgerMetadata(long ledgerId, org.apache.zookeeper.Watcher watcher) voidregisterLedgerMetadataListener(long ledgerId, BookkeeperInternalCallbacks.LedgerMetadataListener listener) Register the ledger metadata listener on ledgerId.removeLedgerMetadata(long ledgerId, Version version) Remove a specified ledger metadata by ledgerId and version.voidunregisterLedgerMetadataListener(long ledgerId, BookkeeperInternalCallbacks.LedgerMetadataListener listener) Unregister the ledger metadata listener on ledgerId.writeLedgerMetadata(long ledgerId, LedgerMetadata metadata, Version currentVersion) Write ledger metadata.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.bookkeeper.meta.LedgerManager
asyncProcessLedgers, getLedgerRanges
-
Field Details
-
ZK_CONNECT_BACKOFF_MS
static final int ZK_CONNECT_BACKOFF_MS- See Also:
-
conf
-
zk
protected final org.apache.zookeeper.ZooKeeper zk -
ledgerRootPath
-
listeners
protected final ConcurrentMap<Long,Set<BookkeeperInternalCallbacks.LedgerMetadataListener>> listeners -
scheduler
-
-
Constructor Details
-
AbstractZkLedgerManager
ZooKeeper-based Ledger Manager Constructor.- Parameters:
conf- Configuration objectzk- ZooKeeper Client Handle
-
-
Method Details
-
getLedgerPath
Get the znode path that is used to store ledger metadata.- Parameters:
ledgerId- Ledger ID- Returns:
- ledger node path
-
getLedgerId
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:
processin interfaceorg.apache.zookeeper.Watcher
-
createLedgerMetadata
public CompletableFuture<Versioned<LedgerMetadata>> createLedgerMetadata(long ledgerId, LedgerMetadata inputMetadata) Description copied from interface:LedgerManagerCreate a new ledger with provided ledger id and metadata.- Specified by:
createLedgerMetadatain interfaceLedgerManager- Parameters:
ledgerId- Ledger id provided to be createdinputMetadata- Metadata provided when creating the new ledger- Returns:
- Future which, when completed returns the metadata of the newly created ledger.
Completed with an exception:
BKException.BKLedgerExistExceptionif given ledger id existBKException.ZKException/BKException.BKMetadataSerializationExceptionfor other issues
-
removeLedgerMetadata
Description copied from interface:LedgerManagerRemove a specified ledger metadata by ledgerId and version.- Specified by:
removeLedgerMetadatain interfaceLedgerManager- Parameters:
ledgerId- Ledger Idversion- Ledger metadata version- Returns:
- Future which, when completed, denotes that the ledger metadata has been removed.
Completed with an exception:
BKException.BKMetadataVersionExceptionif version doesn't matchBKException.BKNoSuchLedgerExistsOnMetadataServerExceptionif ledger not existBKException.ZKExceptionfor other issues
-
registerLedgerMetadataListener
public void registerLedgerMetadataListener(long ledgerId, BookkeeperInternalCallbacks.LedgerMetadataListener listener) Description copied from interface:LedgerManagerRegister the ledger metadata listener on ledgerId.- Specified by:
registerLedgerMetadataListenerin interfaceLedgerManager- Parameters:
ledgerId- ledger id.listener- listener.
-
unregisterLedgerMetadataListener
public void unregisterLedgerMetadataListener(long ledgerId, BookkeeperInternalCallbacks.LedgerMetadataListener listener) Description copied from interface:LedgerManagerUnregister the ledger metadata listener on ledgerId.- Specified by:
unregisterLedgerMetadataListenerin interfaceLedgerManager- Parameters:
ledgerId- ledger id.listener- ledger metadata listener.
-
readLedgerMetadata
Description copied from interface:LedgerManagerRead ledger metadata of a specified ledger.- Specified by:
readLedgerMetadatain interfaceLedgerManager- Parameters:
ledgerId- Ledger Id- Returns:
- Future which, when completed, contains the requested versioned metadata.
Completed with an exception::
BKException.BKNoSuchLedgerExistsOnMetadataServerExceptionif ledger not existBKException.ZKExceptionfor other issues
-
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:LedgerManagerWrite ledger metadata.- Specified by:
writeLedgerMetadatain interfaceLedgerManager- Parameters:
ledgerId- Ledger Idmetadata- Ledger Metadata to writecurrentVersion- The version of the metadata we expect to be overwriting.- Returns:
- Future which, when completed, contains the newly written metadata.
Completed with an exception:
BKException.BKMetadataVersionExceptionif version in metadata doesn't matchBKException.ZKExceptionfor other issue
-
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 ledgersprocessor- Processor provided to process ledgerfinalCb- Callback object when all ledgers are processedctx- Context object passed to finalCbsuccessRc- RC passed to finalCb when all ledgers are processed successfullyfailureRc- RC passed to finalCb when either ledger is processed failed
-
isSpecialZnode
Whether the znode a special znode.- Parameters:
znode- Znode Name- Returns:
- true if the znode is a special znode otherwise false
-
isLeadgerIdGeneratorZnode
-
getLedgerParentNodeRegex
regex expression for name of top level parent znode for ledgers (in HierarchicalLedgerManager) or znode of a ledger (in FlatLedgerManager).- Returns:
-
isLedgerParentNode
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
Convert the ZK retrieved ledger nodes to a HashSet for easier comparisons.- Parameters:
ledgerNodes- zk ledger nodespath- the prefix path of the ledger nodes- Returns:
- ledger id hash set
-
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable
-