Bug-2277 : Isolated Leader Implementation 99/12799/10
authorKamal Rameshan <kramesha@cisco.com>
Thu, 13 Nov 2014 00:00:34 +0000 (16:00 -0800)
committerKamal Rameshan <kramesha@cisco.com>
Wed, 19 Nov 2014 06:44:42 +0000 (22:44 -0800)
commit8cf40f4741c70a760dadb4300946c1dc88f95611
treefd552d63bfdf6598dc8d8935ba2a47de73e0fc1f
parentdf4aabedd8d9a63da661845c70042102f36a14b5
Bug-2277 : Isolated Leader Implementation

A new RaftState has been added and on a scheduler, we check if the leader is isolated, looking at the majority peer statuses.
If Yes, then it switches the behavior to IsolatedLeader.

On the receipt of each AppendEntriesReply, the IsolatedLeader checks for isolation.
And if no, then switches back to either Leader or Follower.

These changes have been tested with TestDriver  and 3 node cluster and the switching of Leader to IsolatedLeader and back,
on the stopping and reinstating of followers, was successful.

The Isolated Leader check interval can be configured via the config subsystem

Change-Id: I42b9165cc477d812c7e0e02339537c0f1fe74934
Signed-off-by: Kamal Rameshan <kramesha@cisco.com>
17 files changed:
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/example/ExampleActor.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/example/TestDriver.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/ConfigParams.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/DefaultConfigParamsImpl.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftState.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/base/messages/IsolatedLeaderCheck.java [new file with mode: 0644]
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractLeader.java [new file with mode: 0644]
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractRaftActorBehavior.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Candidate.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/IsolatedLeader.java [new file with mode: 0644]
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Leader.java
opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/IsolatedLeaderTest.java [new file with mode: 0644]
opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderTest.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContext.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedConfigDataStoreProviderModule.java
opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/config/yang/config/distributed_datastore_provider/DistributedOperationalDataStoreProviderModule.java
opendaylight/md-sal/sal-distributed-datastore/src/main/yang/distributed-datastore-provider.yang