+ long NO_MAX_SIZE = -1;
+
+ /**
+ * Return the replicated log entry at the specified index.
+ *
+ * @param index the index of the log entry
+ * @return the ReplicatedLogEntry if found, otherwise null if the adjusted index less than 0 or
+ * greater than the size of the in-memory journal.
+ */
+ @Nullable ReplicatedLogEntry get(long index);
+
+ /**
+ * Return the last replicated log entry in the log or null of not found.
+ */
+ @Nullable ReplicatedLogEntry last();
+
+ /**
+ * Return the index of the last entry in the log or -1 if the log is empty.
+ */
+ long lastIndex();
+
+ /**
+ * Return the term of the last entry in the log or -1 if the log is empty.
+ */
+ long lastTerm();
+
+ /**
+ * Removes entries from the in-memory log starting at the given index.
+ *
+ * @param index the index of the first log entry to remove
+ * @return the adjusted index of the first log entry removed or -1 if the log entry is not found.
+ */
+ long removeFrom(long index);
+
+ /**
+ * Removes entries from the in-memory log a nd the persisted log starting at the given index.
+ * <p>
+ * The persisted information would then be used during recovery to properly
+ * reconstruct the state of the in-memory replicated log
+ *
+ * @param index the index of the first log entry to remove
+ */
+ void removeFromAndPersist(long index);
+
+ /**
+ * Appends an entry to the log.
+ *
+ * @param replicatedLogEntry the entry to append
+ */
+ void append(ReplicatedLogEntry replicatedLogEntry);
+
+ /**
+ * Optimization method to increase the capacity of the journal log prior to appending entries.
+ *
+ * @param amount the amount to increase by
+ */
+ void increaseJournalLogCapacity(int amount);
+
+ /**
+ * Appends an entry to the in-memory log and persists it as well.
+ *
+ * @param replicatedLogEntry the entry to append
+ */
+ void appendAndPersist(final ReplicatedLogEntry replicatedLogEntry);
+
+ void appendAndPersist(ReplicatedLogEntry replicatedLogEntry, Procedure<ReplicatedLogEntry> callback);
+
+ /**
+ * Returns a list of log entries starting from the given index to the end of the log.
+ *
+ * @param index the index of the first log entry to get.
+ * @return the List of entries
+ */
+ @Nonnull List<ReplicatedLogEntry> getFrom(long index);
+