From: 何运波10202176 Date: Mon, 15 Jan 2018 01:32:32 +0000 (+0800) Subject: Fix the inner order of switchBehavior in RaftAcotr X-Git-Tag: release/oxygen~22 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=387c19a06cbcde2e258a2f8b6338898a8bc3ba74 Fix the inner order of switchBehavior in RaftAcotr updateAndPersist should be called before switchBehavior. Otherwise, when the EntityOwnershipShard trigger a new write transaction in onLeaderChanged base on last term, It will lead to fail in this transaction because of the term value is inconsistent between AppendEntries and AppendEntriesReply Change-Id: I9118f7ec283f23e02dc285ccf6a3fbbce47dc508 Signed-off-by: HeYunBo --- 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 old mode 100644 new mode 100755 index 744ed9696b..967a8fb9b3 --- 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 @@ -421,9 +421,9 @@ public abstract class RaftActor extends AbstractUntypedPersistentActor { if (!getRaftActorContext().getRaftPolicy().automaticElectionsEnabled()) { RaftState newState = message.getNewState(); if (newState == RaftState.Leader || newState == RaftState.Follower) { + getRaftActorContext().getTermInformation().updateAndPersist(message.getNewTerm(), ""); switchBehavior(behaviorStateTracker.capture(getCurrentBehavior()), AbstractRaftActorBehavior.createBehavior(context, message.getNewState())); - getRaftActorContext().getTermInformation().updateAndPersist(message.getNewTerm(), ""); } else { LOG.warn("Switching to behavior : {} - not supported", newState); }