This is an automated email from the ASF dual-hosted git repository.
shashikant pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ratis.git
The following commit(s) were added to refs/heads/master by this push:
new dd0fad4 RATIS-1326. NotifyInstallSnapshot during SetConfiguration has
leader info missing. (#449)
dd0fad4 is described below
commit dd0fad479ca9b9a67cd0856999729179fa1fd49d
Author: bshashikant <[email protected]>
AuthorDate: Wed Mar 17 18:12:54 2021 +0530
RATIS-1326. NotifyInstallSnapshot during SetConfiguration has leader info
missing. (#449)
---
.../org/apache/ratis/server/impl/RaftServerImpl.java | 16 +++++++++-------
.../apache/ratis/InstallSnapshotNotificationTests.java | 5 ++++-
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
index f932fbb..01046f9 100644
---
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
+++
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
@@ -526,13 +526,15 @@ class RaftServerImpl implements RaftServer.Division,
break;
case FOLLOWER:
- role.getFollowerState().ifPresent(fs -> {
- final ServerRpcProto leaderInfo = ServerProtoUtils.toServerRpcProto(
- getRaftConf().getPeer(state.getLeaderId()),
fs.getLastRpcTime().elapsedTimeMs());
- roleInfo.setFollowerInfo(FollowerInfoProto.newBuilder()
- .setLeaderInfo(leaderInfo)
- .setOutstandingOp(fs.getOutstandingOp()));
- });
+ final Optional<FollowerState> fs = role.getFollowerState();
+ final ServerRpcProto leaderInfo = ServerProtoUtils.toServerRpcProto(
+ getRaftConf().getPeer(state.getLeaderId()),
+
fs.map(FollowerState::getLastRpcTime).map(Timestamp::elapsedTimeMs).orElse(0L));
+ // FollowerState can be null while adding a new peer as it is not
+ // a voting member yet
+ roleInfo.setFollowerInfo(FollowerInfoProto.newBuilder()
+ .setLeaderInfo(leaderInfo)
+ .setOutstandingOp(fs.map(FollowerState::getOutstandingOp).orElse(0)));
break;
case LEADER:
diff --git
a/ratis-server/src/test/java/org/apache/ratis/InstallSnapshotNotificationTests.java
b/ratis-server/src/test/java/org/apache/ratis/InstallSnapshotNotificationTests.java
index a4c25da..c690ea1 100644
---
a/ratis-server/src/test/java/org/apache/ratis/InstallSnapshotNotificationTests.java
+++
b/ratis-server/src/test/java/org/apache/ratis/InstallSnapshotNotificationTests.java
@@ -86,7 +86,10 @@ public abstract class
InstallSnapshotNotificationTests<CLUSTER extends MiniRaftC
public CompletableFuture<TermIndex> notifyInstallSnapshotFromLeader(
RaftProtos.RoleInfoProto roleInfoProto,
TermIndex termIndex) {
-
+ if (!roleInfoProto.getFollowerInfo().hasLeaderInfo()) {
+ return JavaUtils.completeExceptionally(new IOException("Failed " +
+ "notifyInstallSnapshotFromLeader due to missing leader info"));
+ }
numSnapshotRequests.incrementAndGet();
final SingleFileSnapshotInfo leaderSnapshotInfo =
(SingleFileSnapshotInfo) leaderSnapshotInfoRef.get();