From 497d356874c8033e0d0f9fccfa7ed6695d6889fc Mon Sep 17 00:00:00 2001 From: Tom Pantelis Date: Tue, 23 Feb 2016 13:10:21 -0500 Subject: [PATCH] Fix sporadic failures in ClusterAdminRpcServiceTest The testAddShardReplica is failing sporadically indirectly due to https://git.opendaylight.org/gerrit/#/c/35097/. The leader's payload version was -1 so a transaction's BatchedModifications instance was serialized to the legacy protobuf message type and thus wasn't delivered. The underlying problem is that RaftActor.updateConfigParams needs to pass the previous leader's payload version when re-constructing the Follower instance on RaftPolicy change. Change-Id: Id6b8da98c145f2e265dddbc1b27384d54e400370 Signed-off-by: Tom Pantelis --- .../org/opendaylight/controller/cluster/raft/RaftActor.java | 3 ++- .../controller/cluster/raft/behaviors/Follower.java | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java index 2bd75923d9..aea1e9fad4 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActor.java @@ -612,10 +612,11 @@ public abstract class RaftActor extends AbstractUntypedPersistentActor { RaftActorBehavior behavior = currentBehavior.getDelegate(); if(behavior instanceof Follower) { String previousLeaderId = ((Follower)behavior).getLeaderId(); + short previousLeaderPayloadVersion = behavior.getLeaderPayloadVersion(); LOG.debug("{}: Re-initializing to Follower with previous leaderId {}", persistenceId(), previousLeaderId); - changeCurrentBehavior(new Follower(context, previousLeaderId)); + changeCurrentBehavior(new Follower(context, previousLeaderId, previousLeaderPayloadVersion)); } else { initializeBehavior(); } diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java index 0a9f3ebd07..afb8f29e70 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java @@ -45,12 +45,13 @@ public class Follower extends AbstractRaftActorBehavior { private static final int SYNC_THRESHOLD = 10; public Follower(RaftActorContext context) { - this(context, null); + this(context, null, (short)-1); } - public Follower(RaftActorContext context, String initialLeaderId) { + public Follower(RaftActorContext context, String initialLeaderId, short initialLeaderPayloadVersion) { super(context, RaftState.Follower); leaderId = initialLeaderId; + setLeaderPayloadVersion(initialLeaderPayloadVersion); initialSyncStatusTracker = new SyncStatusTracker(context.getActor(), getId(), SYNC_THRESHOLD); -- 2.36.6