Package org.apache.bookkeeper.meta
Interface LedgerUnderreplicationManager
-
- All Superinterfaces:
java.lang.AutoCloseable
- All Known Implementing Classes:
NullMetadataBookieDriver.NullLedgerUnderreplicationManager,ZkLedgerUnderreplicationManager
public interface LedgerUnderreplicationManager extends java.lang.AutoCloseableInterface for marking ledgers which need to be rereplicated.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Deprecated Methods Modifier and Type Method Description voidacquireUnderreplicatedLedger(long ledgerId)voidclose()Release all resources held by the ledger underreplication manager.voiddisableLedgerReplication()Stop ledger replication.voidenableLedgerReplication()Resuming ledger replication.longgetCheckAllLedgersCTime()Getter for the CheckAllLedgers last executed ctime.longgetLedgerToRereplicate()Acquire a underreplicated ledger for rereplication.UnderreplicatedLedgergetLedgerUnreplicationInfo(long ledgerId)Get the UnderreplicatedLedger info if this ledger is marked underreplicated otherwise it returns null.intgetLostBookieRecoveryDelay()Getter for the lostBookieRecoveryDelay.longgetPlacementPolicyCheckCTime()Getter for the PlacementPolicyCheck last executed ctime.longgetReplicasCheckCTime()Getter for the ReplicasCheck last executed ctime.java.lang.StringgetReplicationWorkerIdRereplicatingLedger(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.booleanisLedgerReplicationEnabled()Check whether the ledger replication is enabled or not.java.util.Iterator<UnderreplicatedLedger>listLedgersToRereplicate(java.util.function.Predicate<java.util.List<java.lang.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, java.lang.String missingReplica)Mark a ledger as underreplicated.java.util.concurrent.CompletableFuture<java.lang.Void>markLedgerUnderreplicatedAsync(long ledgerId, java.util.Collection<java.lang.String> missingReplicas)Mark a ledger as underreplicated with missing bookies.voidnotifyLedgerReplicationEnabled(BookkeeperInternalCallbacks.GenericCallback<java.lang.Void> cb)Receive notification asynchronously when the ledger replication process is enabled.voidnotifyLostBookieRecoveryDelayChanged(BookkeeperInternalCallbacks.GenericCallback<java.lang.Void> cb)Receive notification asynchronously when the lostBookieRecoveryDelay value is Changed.default voidnotifyUnderReplicationLedgerChanged(BookkeeperInternalCallbacks.GenericCallback<java.lang.Void> cb)Deprecated.longpollLedgerToRereplicate()Poll 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 Detail
-
markLedgerUnderreplicated
default void markLedgerUnderreplicated(long ledgerId, java.lang.String missingReplica) throws ReplicationExceptionMark a ledger as underreplicated. The replication should then check which fragments are underreplicated and rereplicate them- Throws:
ReplicationException
-
isLedgerBeingReplicated
boolean isLedgerBeingReplicated(long ledgerId) throws ReplicationExceptionCheck whether the ledger is being replicated by any bookie.- Throws:
ReplicationException
-
markLedgerUnderreplicatedAsync
java.util.concurrent.CompletableFuture<java.lang.Void> markLedgerUnderreplicatedAsync(long ledgerId, java.util.Collection<java.lang.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
void markLedgerReplicated(long ledgerId) throws ReplicationException.UnavailableExceptionMark 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
java.util.Iterator<UnderreplicatedLedger> listLedgersToRereplicate(java.util.function.Predicate<java.util.List<java.lang.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.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
long getLedgerToRereplicate() throws ReplicationException.UnavailableExceptionAcquire 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
long pollLedgerToRereplicate() throws ReplicationException.UnavailableExceptionPoll for a underreplicated ledger to rereplicate.- Returns:
- the ledgerId, or -1 if none are available
- Throws:
ReplicationException.UnavailableException- See Also:
getLedgerToRereplicate()
-
acquireUnderreplicatedLedger
void acquireUnderreplicatedLedger(long ledgerId) throws ReplicationException- Throws:
ReplicationException
-
releaseUnderreplicatedLedger
void releaseUnderreplicatedLedger(long ledgerId) throws ReplicationException.UnavailableExceptionRelease a previously acquired ledger. This allows others to acquire the ledger.
-
close
void close() throws ReplicationException.UnavailableExceptionRelease all resources held by the ledger underreplication manager.- Specified by:
closein interfacejava.lang.AutoCloseable- Throws:
ReplicationException.UnavailableException
-
disableLedgerReplication
void disableLedgerReplication() throws ReplicationException.UnavailableExceptionStop 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
void enableLedgerReplication() throws ReplicationException.UnavailableExceptionResuming ledger replication. This will allow ledger replication#AuditorandgetLedgerToRereplicate()tasks to continue.
-
isLedgerReplicationEnabled
boolean isLedgerReplicationEnabled() throws ReplicationException.UnavailableExceptionCheck 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<java.lang.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.UnavailableExceptionCreates 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.UnavailableExceptionSetter for the lostBookieRecoveryDelay znode.- Parameters:
lostBookieRecoveryDelay-- Throws:
ReplicationException.UnavailableException
-
getLostBookieRecoveryDelay
int getLostBookieRecoveryDelay() throws ReplicationException.UnavailableExceptionGetter for the lostBookieRecoveryDelay.- Returns:
- the int value of lostBookieRecoveryDelay
- Throws:
ReplicationException.UnavailableException
-
setCheckAllLedgersCTime
void setCheckAllLedgersCTime(long checkAllLedgersCTime) throws ReplicationException.UnavailableExceptionSetter for the CheckAllLedgers last executed ctime.- Parameters:
checkAllLedgersCTime-- Throws:
ReplicationException.UnavailableException
-
getCheckAllLedgersCTime
long getCheckAllLedgersCTime() throws ReplicationException.UnavailableExceptionGetter for the CheckAllLedgers last executed ctime.- Returns:
- the long value of checkAllLedgersCTime
- Throws:
ReplicationException.UnavailableException
-
setPlacementPolicyCheckCTime
void setPlacementPolicyCheckCTime(long placementPolicyCheckCTime) throws ReplicationException.UnavailableExceptionSetter for the PlacementPolicyCheck last executed ctime.- Parameters:
placementPolicyCheckCTime-- Throws:
ReplicationException.UnavailableException
-
getPlacementPolicyCheckCTime
long getPlacementPolicyCheckCTime() throws ReplicationException.UnavailableExceptionGetter for the PlacementPolicyCheck last executed ctime.- Returns:
- the long value of placementPolicyCheckCTime
- Throws:
ReplicationException.UnavailableException
-
setReplicasCheckCTime
void setReplicasCheckCTime(long replicasCheckCTime) throws ReplicationException.UnavailableExceptionSetter for the ReplicasCheck last executed ctime.- Parameters:
replicasCheckCTime-- Throws:
ReplicationException.UnavailableException
-
getReplicasCheckCTime
long getReplicasCheckCTime() throws ReplicationException.UnavailableExceptionGetter for the ReplicasCheck last executed ctime.- Returns:
- the long value of replicasCheckCTime
- Throws:
ReplicationException.UnavailableException
-
notifyUnderReplicationLedgerChanged
@Deprecated default void notifyUnderReplicationLedgerChanged(BookkeeperInternalCallbacks.GenericCallback<java.lang.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<java.lang.Void> cb) throws ReplicationException.UnavailableException
Receive notification asynchronously when the lostBookieRecoveryDelay value is Changed.- Parameters:
cb-- Throws:
ReplicationException.UnavailableException
-
getReplicationWorkerIdRereplicatingLedger
java.lang.String getReplicationWorkerIdRereplicatingLedger(long ledgerId) throws ReplicationException.UnavailableExceptionIf 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
-
-