Class 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.
    • 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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        Parameters:
        logEntryIndex - the index of the first log entry to get
        maxEntries - the maximum number of entries to get
        maxDataSize - 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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        Parameters:
        snapshotIndex - the index to set
      • setSnapshotTerm

        public void setSnapshotTerm​(long snapshotTerm)
        Description copied from interface: ReplicatedLog
        Sets snapshot term.
        Specified by:
        setSnapshotTerm in interface ReplicatedLog
        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 interface ReplicatedLog
        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 interface ReplicatedLog
        Parameters:
        snapshotCapturedIndex - the new snapshot index
        snapshotCapturedTerm - the new snapshot term
      • snapshotCommit

        public void snapshotCommit()
        Description copied from interface: ReplicatedLog
        Sets the Replicated log to state after snapshot success.
        Specified by:
        snapshotCommit in interface ReplicatedLog
      • 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 interface ReplicatedLog