Class FollowerLogInformation
java.lang.Object
org.opendaylight.controller.cluster.raft.FollowerLogInformation
The state of the followers log as known by the Leader.
- Author:
- Moiz Raja, Thomas Pantelis
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionFollowerLogInformation
(PeerInfo peerInfo, RaftActorContext context) Constructs an instance with no matching index. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Clears the LeaderInstallSnapshotState when an install snapshot is complete.boolean
decrNextIndex
(long followerLastIndex) Decrements the value of the follower's next index, taking into account its reported last log index.getId()
Returns the identifier of the follower.@Nullable LeaderInstallSnapshotState
Returns the LeaderInstallSnapshotState for the in progress install snapshot.long
Returns the index of highest log entry known to be replicated on the follower.long
Returns the index of the next log entry to send to the follower.short
Returns the log entry payload data version of the follower.short
Returns the the raft version of the follower.boolean
hasStaleCommitIndex
(long commitIndex) long
Increments the value of the follower's match index.boolean
Checks if the follower is active by comparing the time of the last activity with the election time out.boolean
Return whether or not log entry slicing is currently in progress.void
Marks the follower as active.void
Marks the follower as inactive.long
Returns the time since the last activity occurred for the follower.@Nullable String
needsLeaderAddress
(String leaderId) boolean
okToReplicate
(long commitIndex) This method checks if the next replicate message can be sent to the follower.void
setLeaderInstallSnapshotState
(@NonNull LeaderInstallSnapshotState state) Sets the LeaderInstallSnapshotState when an install snapshot is initiated.boolean
setMatchIndex
(long matchIndex) Sets the index of the follower's highest log entry.void
setNeedsLeaderAddress
(boolean value) boolean
setNextIndex
(long nextIndex) Sets the index of the follower's next log entry.void
setPayloadVersion
(short payloadVersion) Sets the payload data version of the follower.void
setRaftVersion
(short raftVersion) Sets the raft version of the follower.void
setSentCommitIndex
(long commitIndex) void
setSlicedLogEntryIndex
(long index) Sets the index of the log entry whose payload size exceeds the maximum size for a single message and thus needs to be sliced into smaller chunks.toString()
-
Field Details
-
NO_INDEX
public static final long NO_INDEX- See Also:
-
-
Constructor Details
-
FollowerLogInformation
Constructs an instance with no matching index.- Parameters:
peerInfo
- the associated PeerInfo of the follower.context
- the RaftActorContext.
-
-
Method Details
-
decrNextIndex
public boolean decrNextIndex(long followerLastIndex) Decrements the value of the follower's next index, taking into account its reported last log index.- Parameters:
followerLastIndex
- follower's last reported index.- Returns:
- true if the next index was decremented, i.e. it was previously >= 0, false otherwise.
-
setNextIndex
public boolean setNextIndex(long nextIndex) Sets the index of the follower's next log entry.- Parameters:
nextIndex
- the new index.- Returns:
- true if the new index differed from the current index and the current index was updated, false otherwise.
-
incrMatchIndex
public long incrMatchIndex()Increments the value of the follower's match index.- Returns:
- the new value of matchIndex.
-
setMatchIndex
public boolean setMatchIndex(long matchIndex) Sets the index of the follower's highest log entry.- Parameters:
matchIndex
- the new index.- Returns:
- true if the new index differed from the current index and the current index was updated, false otherwise.
-
getId
Returns the identifier of the follower.- Returns:
- the identifier of the follower.
-
getNextIndex
public long getNextIndex()Returns the index of the next log entry to send to the follower.- Returns:
- index of the follower's next log entry.
-
getMatchIndex
public long getMatchIndex()Returns the index of highest log entry known to be replicated on the follower.- Returns:
- the index of highest log entry.
-
isFollowerActive
public boolean isFollowerActive()Checks if the follower is active by comparing the time of the last activity with the election time out. The follower is active if some activity has occurred for the follower within the election time out interval.- Returns:
- true if follower is active, false otherwise.
-
markFollowerActive
public void markFollowerActive()Marks the follower as active. This should be called when some activity has occurred for the follower. -
markFollowerInActive
public void markFollowerInActive()Marks the follower as inactive. This should only be called from unit tests. -
nanosSinceLastActivity
public long nanosSinceLastActivity()Returns the time since the last activity occurred for the follower.- Returns:
- time in nanoseconds since the last activity from the follower.
-
okToReplicate
public boolean okToReplicate(long commitIndex) 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- Parameters:
commitIndex
- current commitIndex- Returns:
- true if it is OK to replicate, false otherwise
-
getPayloadVersion
public short getPayloadVersion()Returns the log entry payload data version of the follower.- Returns:
- the payload data version.
-
setPayloadVersion
public void setPayloadVersion(short payloadVersion) Sets the payload data version of the follower.- Parameters:
payloadVersion
- the payload data version.
-
getRaftVersion
public short getRaftVersion()Returns the the raft version of the follower.- Returns:
- the raft version of the follower.
-
setRaftVersion
public void setRaftVersion(short raftVersion) Sets the raft version of the follower.- Parameters:
raftVersion
- the raft version.
-
getInstallSnapshotState
Returns the LeaderInstallSnapshotState for the in progress install snapshot.- Returns:
- the LeaderInstallSnapshotState if a snapshot install is in progress, null otherwise.
-
setLeaderInstallSnapshotState
Sets the LeaderInstallSnapshotState when an install snapshot is initiated.- Parameters:
state
- the LeaderInstallSnapshotState
-
clearLeaderInstallSnapshotState
public void clearLeaderInstallSnapshotState()Clears the LeaderInstallSnapshotState when an install snapshot is complete. -
setSlicedLogEntryIndex
public void setSlicedLogEntryIndex(long index) Sets the index of the log entry whose payload size exceeds the maximum size for a single message and thus needs to be sliced into smaller chunks.- Parameters:
index
- the log entry index or NO_INDEX to clear it
-
isLogEntrySlicingInProgress
public boolean isLogEntrySlicingInProgress()Return whether or not log entry slicing is currently in progress.- Returns:
- true if slicing is currently in progress, false otherwise
-
setNeedsLeaderAddress
public void setNeedsLeaderAddress(boolean value) -
needsLeaderAddress
-
hasStaleCommitIndex
public boolean hasStaleCommitIndex(long commitIndex) -
setSentCommitIndex
public void setSentCommitIndex(long commitIndex) -
toString
-