Class AbstractReplicatedLogImpl
- java.lang.Object
-
- org.opendaylight.controller.cluster.raft.AbstractReplicatedLogImpl
-
- All Implemented Interfaces:
ReplicatedLog
public abstract class AbstractReplicatedLogImpl extends Object implements ReplicatedLog
Abstract class handling the mapping of logical LogEntry Index and the physical list index.
-
-
Field Summary
-
Fields inherited from interface org.opendaylight.controller.cluster.raft.ReplicatedLog
NO_MAX_SIZE
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractReplicatedLogImpl()
protected
AbstractReplicatedLogImpl(long snapshotIndex, long snapshotTerm, List<ReplicatedLogEntry> unAppliedEntries, String logContext)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected int
adjustedIndex(long logEntryIndex)
boolean
append(ReplicatedLogEntry replicatedLogEntry)
Appends an entry to the log.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).ReplicatedLogEntry
get(long logEntryIndex)
Return the replicated log entry at the specified index.List<ReplicatedLogEntry>
getFrom(long logEntryIndex)
Returns a list of log entries starting from the given index to the end of the log.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.long
getSnapshotIndex()
Returns the index of the snapshot.long
getSnapshotTerm()
Returns the term of the snapshot.void
increaseJournalLogCapacity(int amount)
Optimization method to increase the capacity of the journal log prior to appending entries.boolean
isInSnapshot(long logEntryIndex)
Checks if the entry is present in a snapshot.boolean
isPresent(long logEntryIndex)
Checks if the entry at the specified index is present or not.ReplicatedLogEntry
last()
Return the last replicated log entry in the log or null of not found.long
lastIndex()
Return the index of the last entry in the log or -1 if the log is empty.long
lastTerm()
Return the term of the last entry in the log or -1 if the log is empty.long
removeFrom(long logEntryIndex)
Removes entries from the in-memory log starting at the given index.void
setSnapshotIndex(long snapshotIndex)
Sets the snapshot index in the replicated log.void
setSnapshotTerm(long snapshotTerm)
Sets snapshot term.long
size()
Returns the number of entries in the journal.void
snapshotCommit(boolean updateDataSize)
Sets the Replicated log to state after snapshot success.void
snapshotPreCommit(long snapshotCapturedIndex, long snapshotCapturedTerm)
Handles all the bookkeeping in order to perform a rollback in the event of SaveSnapshotFailure.void
snapshotRollback()
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
appendAndPersist, captureSnapshotIfReady, removeFromAndPersist, shouldCaptureSnapshot, snapshotCommit
-
-
-
-
Constructor Detail
-
AbstractReplicatedLogImpl
protected AbstractReplicatedLogImpl(long snapshotIndex, long snapshotTerm, List<ReplicatedLogEntry> unAppliedEntries, String logContext)
-
AbstractReplicatedLogImpl
protected AbstractReplicatedLogImpl()
-
-
Method Detail
-
adjustedIndex
protected int adjustedIndex(long logEntryIndex)
-
get
public ReplicatedLogEntry get(long logEntryIndex)
Description copied from interface:ReplicatedLog
Return the replicated log entry at the specified index.- Specified by:
get
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
-
last
public ReplicatedLogEntry 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.
-
lastIndex
public long lastIndex()
Description copied from interface:ReplicatedLog
Return the index of the last entry in the log or -1 if the log is empty.- Specified by:
lastIndex
in interfaceReplicatedLog
- Returns:
- the index of the last entry in the log or -1 if the log is empty.
-
lastTerm
public long lastTerm()
Description copied from interface:ReplicatedLog
Return the term of the last entry in the log or -1 if the log is empty.- Specified by:
lastTerm
in interfaceReplicatedLog
- Returns:
- the term of the last entry in the log or -1 if the log is empty.
-
removeFrom
public long removeFrom(long logEntryIndex)
Description copied from interface:ReplicatedLog
Removes entries from the in-memory log starting at the given index.- Specified by:
removeFrom
in interfaceReplicatedLog
- Parameters:
logEntryIndex
- 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
public boolean append(ReplicatedLogEntry replicatedLogEntry)
Description copied from interface:ReplicatedLog
Appends an entry to the log.- Specified by:
append
in interfaceReplicatedLog
- Parameters:
replicatedLogEntry
- the entry to append- Returns:
- true if the entry was successfully appended, false otherwise. An entry can fail to append if the index is already included in the log.
-
increaseJournalLogCapacity
public 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
public List<ReplicatedLogEntry> getFrom(long logEntryIndex)
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
public List<ReplicatedLogEntry> getFrom(long logEntryIndex, int maxEntries, long maxDataSize)
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- Returns:
- the List of entries meeting the criteria.
-
size
public 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 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 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
-
getSnapshotIndex
public long getSnapshotIndex()
Description copied from interface:ReplicatedLog
Returns the index of the snapshot.- Specified by:
getSnapshotIndex
in interfaceReplicatedLog
- Returns:
- the index from which the snapshot was created. -1 otherwise.
-
getSnapshotTerm
public long getSnapshotTerm()
Description copied from interface:ReplicatedLog
Returns the term of the snapshot.- Specified by:
getSnapshotTerm
in interfaceReplicatedLog
- Returns:
- the term of the index from which the snapshot was created. -1 otherwise
-
setSnapshotIndex
public 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 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 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)
-
snapshotPreCommit
public 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 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 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
-
-