+ /**
+ * This method checks if the next replicate message can be sent to the follower. This is an optimization to avoid
+ * sending duplicate message too frequently if the last replicate message was sent and no reply has been received
+ * yet within the current heart beat interval
+ *
+ * @return true if it is ok to replicate, false otherwise
+ */
+ boolean okToReplicate();
+
+ /**
+ * Returns the log entry payload data version of the follower.
+ *
+ * @return the payload data version.
+ */
+ short getPayloadVersion();
+
+ /**
+ * Sets the payload data version of the follower.
+ *
+ * @param payloadVersion the payload data version.
+ */
+ void setPayloadVersion(short payloadVersion);
+
+ /**
+ * Returns the the raft version of the follower.
+ *
+ * @return the raft version of the follower.
+ */
+ short getRaftVersion();
+
+ /**
+ * Sets the raft version of the follower.
+ *
+ * @param raftVersion the raft version.
+ */
+ void setRaftVersion(short raftVersion);
+
+ /**
+ * Returns the LeaderInstallSnapshotState for the in progress install snapshot.
+ *
+ * @return the LeaderInstallSnapshotState if a snapshot install is in progress, null otherwise.
+ */
+ @Nullable
+ LeaderInstallSnapshotState getInstallSnapshotState();
+
+ /**
+ * Sets the LeaderInstallSnapshotState when an install snapshot is initiated.
+ *
+ * @param state the LeaderInstallSnapshotState
+ */
+ void setLeaderInstallSnapshotState(@Nonnull LeaderInstallSnapshotState state);
+
+ /**
+ * Clears the LeaderInstallSnapshotState when an install snapshot is complete.
+ */
+ void clearLeaderInstallSnapshotState();