+
+ /**
+ * 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);
+
+ /**
+ * 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.
+ *
+ * @param index the index of the first log entry to get
+ * @param maxEntries the maximum number of entries to get
+ * @param maxDataSize the maximum accumulated size of the log entries to get
+ * @return the List of entries meeting the criteria.
+ */
+ @Nonnull List<ReplicatedLogEntry> getFrom(long index, int maxEntries, long maxDataSize);
+
+ /**
+ *
+ * @return the number of entries in the journal
+ */
+ long size();
+
+ /**
+ * Checks if the entry at the specified index is present or not
+ *
+ * @param index the index of the log entry
+ * @return true if the entry is present in the in-memory journal
+ */
+ boolean isPresent(long index);
+
+ /**
+ * Checks if the entry is present in a snapshot
+ *
+ * @param index the index of the log entry
+ * @return 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
+ */
+ boolean isInSnapshot(long index);
+
+ /**
+ * Get the index of the snapshot
+ *
+ * @return the index from which the snapshot was created. -1 otherwise.
+ */
+ long getSnapshotIndex();
+
+ /**
+ * Get the term of the snapshot
+ *
+ * @return the term of the index from which the snapshot was created. -1
+ * otherwise
+ */
+ long getSnapshotTerm();
+
+ /**
+ * sets the snapshot index in the replicated log
+ * @param snapshotIndex
+ */
+ void setSnapshotIndex(long snapshotIndex);
+
+ /**
+ * sets snapshot term
+ * @param snapshotTerm
+ */
+ void setSnapshotTerm(long snapshotTerm);
+
+ /**
+ * Clears the journal entries with startIndex(inclusive) and endIndex (exclusive)
+ * @param startIndex
+ * @param endIndex
+ */
+ void clear(int startIndex, int endIndex);
+
+ /**
+ * Handles all the bookkeeping in order to perform a rollback in the
+ * event of SaveSnapshotFailure
+ * @param snapshotCapturedIndex
+ * @param snapshotCapturedTerm
+ */
+ void snapshotPreCommit(long snapshotCapturedIndex, long snapshotCapturedTerm);
+
+ /**
+ * Sets the Replicated log to state after snapshot success.
+ */
+ void snapshotCommit();
+
+ /**
+ * Restores the replicated log to a state in the event of a save snapshot failure
+ */
+ void snapshotRollback();
+
+ /**
+ * Size of the data in the log (in bytes)
+ */
+ int dataSize();
+
+ /**
+ * We decide if snapshot need to be captured based on the count/memory consumed.
+ * @param replicatedLogEntry
+ */
+ void captureSnapshotIfReady(ReplicatedLogEntry replicatedLogEntry);
+