Class AbstractReplicatedLog<T extends ReplicatedLogEntry>
java.lang.Object
org.opendaylight.controller.cluster.raft.AbstractReplicatedLog<T>
- All Implemented Interfaces:
ReplicatedLog
public abstract class AbstractReplicatedLog<T extends ReplicatedLogEntry>
extends Object
implements ReplicatedLog
Abstract class handling the mapping of
logical LogEntry Index and the physical list index.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.opendaylight.controller.cluster.raft.ReplicatedLog
ReplicatedLog.StoredEntryMeta
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected final int
adjustedIndex
(long logEntryIndex) protected abstract @NonNull T
adoptEntry
(LogEntry entry) final boolean
Appends an entry to the log if its index is already included in the log.protected final boolean
appendImpl
(@NonNull T entry) final void
clear()
Deprecated, for removal: This API element is subject to removal in a future version.final void
clear
(int startIndex, int endIndex) Clears the journal entries with startIndex (inclusive) and endIndex (exclusive).int
dataSize()
Returns the size of the data in the log (in bytes).final LogEntry
entryAt
(long offset) Returns the entry and specified offset.final long
Returns the journal index corresponding to the first entry in the journal.final long
Returns the index of highest log entry known to be committed.final List
<ReplicatedLogEntry> getFrom
(long logEntryIndex) Returns a list of log entries starting from the given index to the end of the log.final List
<ReplicatedLogEntry> getFrom
(long logEntryIndex, int maxEntries, long maxDataSize) Returns a list of log entries starting from the given index up to the given maximum of entries or the given maximum accumulated size, whichever comes first.final long
Returns index of highest log entry applied to state machine.final long
Returns the index from which the snapshot was created,-1
otherwise.final long
Returns the term of the index from which the snapshot was created, -1 otherwise.final void
increaseJournalLogCapacity
(int amount) Optimization method to increase the capacity of the journal log prior to appending entries.final boolean
isInSnapshot
(long logEntryIndex) Checks if the entry is present in a snapshot.final boolean
isPresent
(long logEntryIndex) Checks if the entry at the specified index is present or not.final T
last()
Return the last replicated log entry in the log or null of not found.final long
Returns thejournalIndex
corresponding toReplicatedLog.getLastApplied()
.final T
lookup
(long logEntryIndex) Return the replicated log entry at the specified index.lookupStoredMeta
(long index) ReturnReplicatedLog.StoredEntryMeta
a replicated entry.final @NonNull SnapshotManager.CaptureSnapshot
newCaptureSnapshot
(EntryMeta lastLogEntry, long replicatedToAllIndex, boolean mandatoryTrim, boolean hasFollowers) Constructs aSnapshotManager.CaptureSnapshot
instance.protected final long
removeFrom
(long fromIndex) Removes entries from the in-memory log starting at the given index.final void
resetToLog
(ReplicatedLog prev) Reset interal state to match specifiedReplicatedLog
.final void
resetToSnapshot
(Snapshot snapshot) Reset internal state to specifiedSnapshot
.final void
setCommitIndex
(long commitIndex) Sets the index of highest log entry known to be committed.final void
setFirstJournalIndex
(long newFirstJournalIndex) Sets theReplicatedLog.firstJournalIndex()
value.final void
setLastApplied
(long lastApplied) Sets index of highest log entry applied to state machine.final void
setSnapshotIndex
(long snapshotIndex) Sets the snapshot index in the replicated log.final void
setSnapshotTerm
(long snapshotTerm) Sets snapshot term.final long
size()
Returns the number of entries in the journal.final void
snapshotCommit
(boolean updateDataSize) Sets the Replicated log to state after snapshot success.final void
snapshotPreCommit
(long snapshotCapturedIndex, long snapshotCapturedTerm) Handles all the bookkeeping in order to perform a rollback in the event of SaveSnapshotFailure.final void
Restores the replicated log to a state in the event of a save snapshot failure.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.opendaylight.controller.cluster.raft.ReplicatedLog
appendReceived, appendSubmitted, captureSnapshotIfReady, getLogEntryIndex, getLogEntryOrSnapshotTerm, getLogEntryTerm, isLogEntryPresent, lastIndex, lastMeta, lastTerm, lookupMeta, markLastApplied, shouldCaptureSnapshot, snapshotCommit, trimToReceive
-
Constructor Details
-
AbstractReplicatedLog
-
-
Method Details
-
adjustedIndex
protected final int adjustedIndex(long logEntryIndex) -
resetToLog
Description copied from interface:ReplicatedLog
Reset interal state to match specifiedReplicatedLog
.- Specified by:
resetToLog
in interfaceReplicatedLog
- Parameters:
prev
- the log to reset to
-
resetToSnapshot
Description copied from interface:ReplicatedLog
Reset internal state to specifiedSnapshot
.- Specified by:
resetToSnapshot
in interfaceReplicatedLog
- Parameters:
snapshot
- snapshot to reset to
-
entryAt
Description copied from interface:ReplicatedLog
Returns the entry and specified offset.- Specified by:
entryAt
in interfaceReplicatedLog
- Parameters:
offset
- the offset- Returns:
- the
LogEntry
-
lookup
Description copied from interface:ReplicatedLog
Return the replicated log entry at the specified index.- Specified by:
lookup
in interfaceReplicatedLog
- Parameters:
logEntryIndex
- the index of the log entry- Returns:
- the ReplicatedLogEntry if found, otherwise null if the adjusted index less than 0 or greater than the size of the in-memory journal
-
lookupStoredMeta
Description copied from interface:ReplicatedLog
ReturnReplicatedLog.StoredEntryMeta
a replicated entry.- Specified by:
lookupStoredMeta
in interfaceReplicatedLog
- Parameters:
index
- the index of the log entry- Returns:
- the
ReplicatedLog.StoredEntryMeta
if found, otherwise null if the adjusted index less than 0 or greater than the size of the in-memory journal
-
last
Description copied from interface:ReplicatedLog
Return the last replicated log entry in the log or null of not found.- Specified by:
last
in interfaceReplicatedLog
- Returns:
- the last replicated log entry in the log or null of not found.
-
getCommitIndex
public final long getCommitIndex()Description copied from interface:ReplicatedLog
Returns the index of highest log entry known to be committed.- Specified by:
getCommitIndex
in interfaceReplicatedLog
- Returns:
- index of highest log entry known to be committed.
-
setCommitIndex
public final void setCommitIndex(long commitIndex) Description copied from interface:ReplicatedLog
Sets the index of highest log entry known to be committed.- Specified by:
setCommitIndex
in interfaceReplicatedLog
- Parameters:
commitIndex
- new commit index
-
getLastApplied
public final long getLastApplied()Description copied from interface:ReplicatedLog
Returns index of highest log entry applied to state machine.- Specified by:
getLastApplied
in interfaceReplicatedLog
- Returns:
- index of highest log entry applied to state machine.
-
setLastApplied
public final void setLastApplied(long lastApplied) Description copied from interface:ReplicatedLog
Sets index of highest log entry applied to state machine.- Specified by:
setLastApplied
in interfaceReplicatedLog
- Parameters:
lastApplied
- the new applied index.
-
removeFrom
protected final long removeFrom(long fromIndex) Removes entries from the in-memory log starting at the given index.- Parameters:
fromIndex
- the index of the first log entry to remove- Returns:
- the adjusted index of the first log entry removed or -1 if the log entry is not found
-
append
Description copied from interface:ReplicatedLog
Appends an entry to the log if its index is already included in the log.- Specified by:
append
in interfaceReplicatedLog
- Parameters:
entry
- the entry to append- Returns:
true
if the entry was successfully appended,false
otherwise.
-
appendImpl
-
adoptEntry
-
increaseJournalLogCapacity
public final void increaseJournalLogCapacity(int amount) Description copied from interface:ReplicatedLog
Optimization method to increase the capacity of the journal log prior to appending entries.- Specified by:
increaseJournalLogCapacity
in interfaceReplicatedLog
- Parameters:
amount
- the amount to increase by
-
getFrom
Description copied from interface:ReplicatedLog
Returns a list of log entries starting from the given index to the end of the log.- Specified by:
getFrom
in interfaceReplicatedLog
- Parameters:
logEntryIndex
- the index of the first log entry to get.- Returns:
- the List of entries
-
getFrom
Description copied from interface:ReplicatedLog
Returns a list of log entries starting from the given index up to the given maximum of entries or the given maximum accumulated size, whichever comes first.- Specified by:
getFrom
in interfaceReplicatedLog
- Parameters:
logEntryIndex
- the index of the first log entry to getmaxEntries
- the maximum number of entries to getmaxDataSize
- the maximum accumulated size of the log entries to get, negative means no limit- Returns:
- the List of entries meeting the criteria.
-
size
public final long size()Description copied from interface:ReplicatedLog
Returns the number of entries in the journal.- Specified by:
size
in interfaceReplicatedLog
- Returns:
- the number of entries
-
dataSize
public int dataSize()Description copied from interface:ReplicatedLog
Returns the size of the data in the log (in bytes).- Specified by:
dataSize
in interfaceReplicatedLog
- Returns:
- the size of the data in the log (in bytes)
-
isPresent
public final boolean isPresent(long logEntryIndex) Description copied from interface:ReplicatedLog
Checks if the entry at the specified index is present or not.- Specified by:
isPresent
in interfaceReplicatedLog
- Parameters:
logEntryIndex
- the index of the log entry- Returns:
- true if the entry is present in the in-memory journal
-
isInSnapshot
public final boolean isInSnapshot(long logEntryIndex) Description copied from interface:ReplicatedLog
Checks if the entry is present in a snapshot.- Specified by:
isInSnapshot
in interfaceReplicatedLog
- Parameters:
logEntryIndex
- the index of the log entry- Returns:
- true if the entry is in the snapshot. false if the entry is not in the snapshot even if the entry may be present in the replicated log
-
firstJournalIndex
public final long firstJournalIndex()Description copied from interface:ReplicatedLog
Returns the journal index corresponding to the first entry in the journal.- Specified by:
firstJournalIndex
in interfaceReplicatedLog
- Returns:
- the journal index corresponding to the first entry in the journal
-
lastAppliedJournalIndex
public final long lastAppliedJournalIndex()Description copied from interface:ReplicatedLog
Returns thejournalIndex
corresponding toReplicatedLog.getLastApplied()
.- Specified by:
lastAppliedJournalIndex
in interfaceReplicatedLog
- Returns:
- the
journalIndex
corresponding toReplicatedLog.getLastApplied()
-
setFirstJournalIndex
public final void setFirstJournalIndex(long newFirstJournalIndex) Description copied from interface:ReplicatedLog
Sets theReplicatedLog.firstJournalIndex()
value.- Specified by:
setFirstJournalIndex
in interfaceReplicatedLog
- Parameters:
newFirstJournalIndex
- the new value ofReplicatedLog.firstJournalIndex()
.
-
getSnapshotIndex
public final long getSnapshotIndex()Description copied from interface:ReplicatedLog
Returns the index from which the snapshot was created,-1
otherwise.- Specified by:
getSnapshotIndex
in interfaceReplicatedLog
- Returns:
- the index from which the snapshot was created,
-1
otherwise
-
getSnapshotTerm
public final long getSnapshotTerm()Description copied from interface:ReplicatedLog
Returns the term of the index from which the snapshot was created, -1 otherwise.- Specified by:
getSnapshotTerm
in interfaceReplicatedLog
- Returns:
- the term of the index from which the snapshot was created, -1 otherwise
-
setSnapshotIndex
public final void setSnapshotIndex(long snapshotIndex) Description copied from interface:ReplicatedLog
Sets the snapshot index in the replicated log.- Specified by:
setSnapshotIndex
in interfaceReplicatedLog
- Parameters:
snapshotIndex
- the index to set
-
setSnapshotTerm
public final void setSnapshotTerm(long snapshotTerm) Description copied from interface:ReplicatedLog
Sets snapshot term.- Specified by:
setSnapshotTerm
in interfaceReplicatedLog
- Parameters:
snapshotTerm
- the term to set
-
clear
public final void clear(int startIndex, int endIndex) Description copied from interface:ReplicatedLog
Clears the journal entries with startIndex (inclusive) and endIndex (exclusive).- Specified by:
clear
in interfaceReplicatedLog
- Parameters:
startIndex
- the start index (inclusive)endIndex
- the end index (exclusive)
-
clear
Deprecated, for removal: This API element is subject to removal in a future version.Description copied from interface:ReplicatedLog
Clears all entries.- Specified by:
clear
in interfaceReplicatedLog
-
snapshotPreCommit
public final void snapshotPreCommit(long snapshotCapturedIndex, long snapshotCapturedTerm) Description copied from interface:ReplicatedLog
Handles all the bookkeeping in order to perform a rollback in the event of SaveSnapshotFailure.- Specified by:
snapshotPreCommit
in interfaceReplicatedLog
- Parameters:
snapshotCapturedIndex
- the new snapshot indexsnapshotCapturedTerm
- the new snapshot term
-
snapshotCommit
public final void snapshotCommit(boolean updateDataSize) Description copied from interface:ReplicatedLog
Sets the Replicated log to state after snapshot success. Most users will want to useReplicatedLog.snapshotCommit()
instead.- Specified by:
snapshotCommit
in interfaceReplicatedLog
- Parameters:
updateDataSize
- true ifReplicatedLog.dataSize()
should also be updated
-
snapshotRollback
public final void snapshotRollback()Description copied from interface:ReplicatedLog
Restores the replicated log to a state in the event of a save snapshot failure.- Specified by:
snapshotRollback
in interfaceReplicatedLog
-
newCaptureSnapshot
public final @NonNull SnapshotManager.CaptureSnapshot newCaptureSnapshot(EntryMeta lastLogEntry, long replicatedToAllIndex, boolean mandatoryTrim, boolean hasFollowers) Description copied from interface:ReplicatedLog
Constructs aSnapshotManager.CaptureSnapshot
instance.- Specified by:
newCaptureSnapshot
in interfaceReplicatedLog
- Parameters:
lastLogEntry
- the last log entry for the snapshot.replicatedToAllIndex
- the index of the last entry replicated to all followers.- Returns:
- a new CaptureSnapshot instance.
-