Package org.apache.bookkeeper.meta
Interface LedgerUnderreplicationManager
- All Superinterfaces:
AutoCloseable
- All Known Implementing Classes:
NullMetadataBookieDriver.NullLedgerUnderreplicationManager,ZkLedgerUnderreplicationManager
Interface for marking ledgers which need to be rereplicated.
-
Method Summary
Modifier and TypeMethodDescriptionvoidacquireUnderreplicatedLedger(long ledgerId) voidclose()Release all resources held by the ledger underreplication manager.voidStop ledger replication.voidResuming ledger replication.longGetter for the CheckAllLedgers last executed ctime.longAcquire a underreplicated ledger for rereplication.getLedgerUnreplicationInfo(long ledgerId) Get the UnderreplicatedLedger info if this ledger is marked underreplicated otherwise it returns null.intGetter for the lostBookieRecoveryDelay.longGetter for the PlacementPolicyCheck last executed ctime.longGetter for the ReplicasCheck last executed ctime.getReplicationWorkerIdRereplicatingLedger(long ledgerId) If a replicationworker has acquired lock on an underreplicated ledger, then getReplicationWorkerIdRereplicatingLedger should return ReplicationWorkerId (BookieId) of the ReplicationWorker that is holding lock.booleaninitializeLostBookieRecoveryDelay(int lostBookieRecoveryDelay) Creates the zNode for lostBookieRecoveryDelay with the specified value and returns true.booleanisLedgerBeingReplicated(long ledgerId) Check whether the ledger is being replicated by any bookie.booleanCheck whether the ledger replication is enabled or not.listLedgersToRereplicate(Predicate<List<String>> predicate) Get a list of all the underreplicated ledgers which have been marked for rereplication, filtered by the predicate on the missing replicas list.voidmarkLedgerReplicated(long ledgerId) Mark a ledger as fully replicated.default voidmarkLedgerUnderreplicated(long ledgerId, String missingReplica) Mark a ledger as underreplicated.markLedgerUnderreplicatedAsync(long ledgerId, Collection<String> missingReplicas) Mark a ledger as underreplicated with missing bookies.voidReceive notification asynchronously when the ledger replication process is enabled.voidReceive notification asynchronously when the lostBookieRecoveryDelay value is Changed.default voidDeprecated.longPoll for a underreplicated ledger to rereplicate.voidreleaseUnderreplicatedLedger(long ledgerId) Release a previously acquired ledger.voidsetCheckAllLedgersCTime(long checkAllLedgersCTime) Setter for the CheckAllLedgers last executed ctime.voidsetLostBookieRecoveryDelay(int lostBookieRecoveryDelay) Setter for the lostBookieRecoveryDelay znode.voidsetPlacementPolicyCheckCTime(long placementPolicyCheckCTime) Setter for the PlacementPolicyCheck last executed ctime.voidsetReplicasCheckCTime(long replicasCheckCTime) Setter for the ReplicasCheck last executed ctime.
-
Method Details
-
markLedgerUnderreplicated
default void markLedgerUnderreplicated(long ledgerId, String missingReplica) throws ReplicationException Mark a ledger as underreplicated. The replication should then check which fragments are underreplicated and rereplicate them- Throws:
ReplicationException
-
isLedgerBeingReplicated
Check whether the ledger is being replicated by any bookie.- Throws:
ReplicationException
-
markLedgerUnderreplicatedAsync
CompletableFuture<Void> markLedgerUnderreplicatedAsync(long ledgerId, Collection<String> missingReplicas) Mark a ledger as underreplicated with missing bookies. The replication should then check which fragments are underreplicated and rereplicate them.- Parameters:
ledgerId- ledger idmissingReplicas- missing replicas- Returns:
- a future presents the mark result.
-
markLedgerReplicated
Mark a ledger as fully replicated. If the ledger is not already marked as underreplicated, this is a noop. -
getLedgerUnreplicationInfo
UnderreplicatedLedger getLedgerUnreplicationInfo(long ledgerId) throws ReplicationException.UnavailableException Get the UnderreplicatedLedger info if this ledger is marked underreplicated otherwise it returns null.- Parameters:
ledgerId- ledger id- Returns:
- the UnderreplicatedLedger info instance if this ledger is marked underreplicated otherwise it returns null.
- Throws:
ReplicationException.UnavailableException
-
listLedgersToRereplicate
Get a list of all the underreplicated ledgers which have been marked for rereplication, filtered by the predicate on the missing replicas list.Missing replicas list of an underreplicated ledger is the list of the bookies which are part of the ensemble of this ledger and are currently unavailable/down.
- Parameters:
predicate- filter to use while listing under replicated ledgers. 'null' if filtering is not required- Returns:
- an iterator which returns underreplicated ledgers.
-
getLedgerToRereplicate
Acquire a underreplicated ledger for rereplication. The ledger should be locked, so that no other agent will receive the ledger from this call. The ledger should remain locked until either #markLedgerComplete or #releaseLedger are called. This call is blocking, so will not return until a ledger is available for rereplication. -
pollLedgerToRereplicate
Poll for a underreplicated ledger to rereplicate.- Returns:
- the ledgerId, or -1 if none are available
- Throws:
ReplicationException.UnavailableException- See Also:
-
acquireUnderreplicatedLedger
- Throws:
ReplicationException
-
releaseUnderreplicatedLedger
Release a previously acquired ledger. This allows others to acquire the ledger. -
close
Release all resources held by the ledger underreplication manager.- Specified by:
closein interfaceAutoCloseable- Throws:
ReplicationException.UnavailableException
-
disableLedgerReplication
Stop ledger replication. Currently running ledger rereplication tasks will be continued and will be stopped from next task. This will block ledger replication#AuditorandgetLedgerToRereplicate()tasks. -
enableLedgerReplication
Resuming ledger replication. This will allow ledger replication#AuditorandgetLedgerToRereplicate()tasks to continue. -
isLedgerReplicationEnabled
Check whether the ledger replication is enabled or not. This will return true if the ledger replication is enabled, otherwise return false.- Returns:
- - return true if it is enabled otherwise return false
- Throws:
ReplicationException.UnavailableException
-
notifyLedgerReplicationEnabled
void notifyLedgerReplicationEnabled(BookkeeperInternalCallbacks.GenericCallback<Void> cb) throws ReplicationException.UnavailableException Receive notification asynchronously when the ledger replication process is enabled.- Parameters:
cb- - callback implementation to receive the notification- Throws:
ReplicationException.UnavailableException
-
initializeLostBookieRecoveryDelay
boolean initializeLostBookieRecoveryDelay(int lostBookieRecoveryDelay) throws ReplicationException.UnavailableException Creates the zNode for lostBookieRecoveryDelay with the specified value and returns true. If the node is already existing, then it returns false.- Parameters:
lostBookieRecoveryDelay-- Returns:
- true if it succeeds in creating zNode for lostBookieRecoveryDelay, false if it is already existing
- Throws:
ReplicationException.UnavailableException
-
setLostBookieRecoveryDelay
void setLostBookieRecoveryDelay(int lostBookieRecoveryDelay) throws ReplicationException.UnavailableException Setter for the lostBookieRecoveryDelay znode.- Parameters:
lostBookieRecoveryDelay-- Throws:
ReplicationException.UnavailableException
-
getLostBookieRecoveryDelay
Getter for the lostBookieRecoveryDelay.- Returns:
- the int value of lostBookieRecoveryDelay
- Throws:
ReplicationException.UnavailableException
-
setCheckAllLedgersCTime
void setCheckAllLedgersCTime(long checkAllLedgersCTime) throws ReplicationException.UnavailableException Setter for the CheckAllLedgers last executed ctime.- Parameters:
checkAllLedgersCTime-- Throws:
ReplicationException.UnavailableException
-
getCheckAllLedgersCTime
Getter for the CheckAllLedgers last executed ctime.- Returns:
- the long value of checkAllLedgersCTime
- Throws:
ReplicationException.UnavailableException
-
setPlacementPolicyCheckCTime
void setPlacementPolicyCheckCTime(long placementPolicyCheckCTime) throws ReplicationException.UnavailableException Setter for the PlacementPolicyCheck last executed ctime.- Parameters:
placementPolicyCheckCTime-- Throws:
ReplicationException.UnavailableException
-
getPlacementPolicyCheckCTime
Getter for the PlacementPolicyCheck last executed ctime.- Returns:
- the long value of placementPolicyCheckCTime
- Throws:
ReplicationException.UnavailableException
-
setReplicasCheckCTime
void setReplicasCheckCTime(long replicasCheckCTime) throws ReplicationException.UnavailableException Setter for the ReplicasCheck last executed ctime.- Parameters:
replicasCheckCTime-- Throws:
ReplicationException.UnavailableException
-
getReplicasCheckCTime
Getter for the ReplicasCheck last executed ctime.- Returns:
- the long value of replicasCheckCTime
- Throws:
ReplicationException.UnavailableException
-
notifyUnderReplicationLedgerChanged
@Deprecated default void notifyUnderReplicationLedgerChanged(BookkeeperInternalCallbacks.GenericCallback<Void> cb) throws ReplicationException.UnavailableException Deprecated.Receive notification asynchronously when the num of under-replicated ledgers Changed.- Parameters:
cb-- Throws:
ReplicationException.UnavailableException
-
notifyLostBookieRecoveryDelayChanged
void notifyLostBookieRecoveryDelayChanged(BookkeeperInternalCallbacks.GenericCallback<Void> cb) throws ReplicationException.UnavailableException Receive notification asynchronously when the lostBookieRecoveryDelay value is Changed.- Parameters:
cb-- Throws:
ReplicationException.UnavailableException
-
getReplicationWorkerIdRereplicatingLedger
String getReplicationWorkerIdRereplicatingLedger(long ledgerId) throws ReplicationException.UnavailableException If a replicationworker has acquired lock on an underreplicated ledger, then getReplicationWorkerIdRereplicatingLedger should return ReplicationWorkerId (BookieId) of the ReplicationWorker that is holding lock. If lock for the underreplicated ledger is not yet acquired or if it is released then it is supposed to return null.- Parameters:
ledgerId-- Returns:
- Throws:
ReplicationException.UnavailableException
-