Derive MockRaftActorContext from RaftActorContextImpl 18/28818/3
authorTom Pantelis <tpanteli@brocade.com>
Mon, 26 Oct 2015 19:15:16 +0000 (15:15 -0400)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 2 Nov 2015 12:54:35 +0000 (12:54 +0000)
I changed MockRaftActorContext to derive from RaftActorContextImpl since
it duplicates most of the functionality in RaftActorContextImpl and,
with the addition of PeerInfo, MockRaftActorContext can now provide the
same functionality as RaftActorContextImpl w/o having to duplicate it in
MockRaftActorContext. Also this will make it easier when the RaftActorContext
interface is changed.

Change-Id: Ief90232fc992a50b3f0fea5ece323a14916760f2
Signed-off-by: Tom Pantelis <tpanteli@brocade.com>
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorContextImpl.java
opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/FollowerLogInformationImplTest.java
opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MockRaftActorContext.java

index bbeaddb240c2ab9bb220178c04c9627c3826bd94..b86a015f6929aa9acc6eb7c0b152fede241e250a 100644 (file)
@@ -74,7 +74,7 @@ public class RaftActorContextImpl implements RaftActorContext {
         }
     }
 
         }
     }
 
-    void setPayloadVersion(short payloadVersion) {
+    public void setPayloadVersion(short payloadVersion) {
         this.payloadVersion = payloadVersion;
     }
 
         this.payloadVersion = payloadVersion;
     }
 
@@ -83,7 +83,7 @@ public class RaftActorContextImpl implements RaftActorContext {
         return payloadVersion;
     }
 
         return payloadVersion;
     }
 
-    void setConfigParams(ConfigParams configParams) {
+    public void setConfigParams(ConfigParams configParams) {
         this.configParams = configParams;
     }
 
         this.configParams = configParams;
     }
 
index b89f28f40166c113243972267e51e5b1ba595577..843b9bebbd3956a3bda56c251a03e697bbc72867 100644 (file)
@@ -64,6 +64,7 @@ public class FollowerLogInformationImplTest {
     @Test
     public void testOkToReplicate(){
         MockRaftActorContext context = new MockRaftActorContext();
     @Test
     public void testOkToReplicate(){
         MockRaftActorContext context = new MockRaftActorContext();
+        context.setCommitIndex(0);
         FollowerLogInformation followerLogInformation =
                 new FollowerLogInformationImpl(new PeerInfo("follower1", null, VotingState.VOTING), 10, context);
 
         FollowerLogInformation followerLogInformation =
                 new FollowerLogInformationImpl(new PeerInfo("follower1", null, VotingState.VOTING), 10, context);
 
@@ -83,6 +84,7 @@ public class FollowerLogInformationImplTest {
     public void testVotingNotInitializedState() {
         final PeerInfo peerInfo = new PeerInfo("follower1", null, VotingState.VOTING_NOT_INITIALIZED);
         MockRaftActorContext context = new MockRaftActorContext();
     public void testVotingNotInitializedState() {
         final PeerInfo peerInfo = new PeerInfo("follower1", null, VotingState.VOTING_NOT_INITIALIZED);
         MockRaftActorContext context = new MockRaftActorContext();
+        context.setCommitIndex(0);
         FollowerLogInformation followerLogInformation = new FollowerLogInformationImpl(peerInfo, -1, context);
 
         assertFalse(followerLogInformation.okToReplicate());
         FollowerLogInformation followerLogInformation = new FollowerLogInformationImpl(peerInfo, -1, context);
 
         assertFalse(followerLogInformation.okToReplicate());
@@ -101,6 +103,7 @@ public class FollowerLogInformationImplTest {
     public void testNonVotingState() {
         final PeerInfo peerInfo = new PeerInfo("follower1", null, VotingState.NON_VOTING);
         MockRaftActorContext context = new MockRaftActorContext();
     public void testNonVotingState() {
         final PeerInfo peerInfo = new PeerInfo("follower1", null, VotingState.NON_VOTING);
         MockRaftActorContext context = new MockRaftActorContext();
+        context.setCommitIndex(0);
         FollowerLogInformation followerLogInformation = new FollowerLogInformationImpl(peerInfo, -1, context);
 
         assertTrue(followerLogInformation.okToReplicate());
         FollowerLogInformation followerLogInformation = new FollowerLogInformationImpl(peerInfo, -1, context);
 
         assertTrue(followerLogInformation.okToReplicate());
index 228bc8741745b34d04017cd643824ff9a930e116..5104fde125c518b86e50fe63d68a93cc087051d8 100644 (file)
@@ -13,17 +13,14 @@ import akka.actor.ActorSelection;
 import akka.actor.ActorSystem;
 import akka.actor.Props;
 import akka.japi.Procedure;
 import akka.actor.ActorSystem;
 import akka.actor.Props;
 import akka.japi.Procedure;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Supplier;
+
 import com.google.protobuf.GeneratedMessage;
 import com.google.protobuf.GeneratedMessage;
+
 import java.io.Serializable;
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.HashMap;
 import java.util.Map;
-import org.opendaylight.controller.cluster.DataPersistenceProvider;
+
 import org.opendaylight.controller.cluster.NonPersistentDataProvider;
 import org.opendaylight.controller.cluster.NonPersistentDataProvider;
-import org.opendaylight.controller.cluster.raft.policy.DefaultRaftPolicy;
 import org.opendaylight.controller.cluster.raft.policy.RaftPolicy;
 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
 import org.opendaylight.controller.protobuff.messages.cluster.raft.AppendEntriesMessages;
 import org.opendaylight.controller.cluster.raft.policy.RaftPolicy;
 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
 import org.opendaylight.controller.protobuff.messages.cluster.raft.AppendEntriesMessages;
@@ -31,25 +28,14 @@ import org.opendaylight.controller.protobuff.messages.cluster.raft.test.MockPayl
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class MockRaftActorContext implements RaftActorContext {
+public class MockRaftActorContext extends RaftActorContextImpl {
+    private static final Logger LOG = LoggerFactory.getLogger(MockRaftActorContext.class);
 
 
-    private String id;
     private ActorSystem system;
     private ActorSystem system;
-    private ActorRef actor;
-    private long index = 0;
-    private long lastApplied = 0;
-    private final ElectionTerm electionTerm;
-    private ReplicatedLog replicatedLog;
-    private Map<String, String> peerAddresses = new HashMap<>();
-    private ConfigParams configParams;
-    private boolean snapshotCaptureInitiated;
-    private SnapshotManager snapshotManager;
-    private DataPersistenceProvider persistenceProvider = new NonPersistentDataProvider();
-    private short payloadVersion;
-    private RaftPolicy raftPolicy = DefaultRaftPolicy.INSTANCE;
+    private RaftPolicy raftPolicy;
 
 
-    public MockRaftActorContext(){
-        electionTerm = new ElectionTerm() {
+    private static ElectionTerm newElectionTerm() {
+        return new ElectionTerm() {
             private long currentTerm = 1;
             private String votedFor = "";
 
             private long currentTerm = 1;
             private String votedFor = "";
 
@@ -76,25 +62,29 @@ public class MockRaftActorContext implements RaftActorContext {
                 update(currentTerm, votedFor);
             }
         };
                 update(currentTerm, votedFor);
             }
         };
+    }
 
 
-        configParams = new DefaultConfigParamsImpl();
+    public MockRaftActorContext(){
+        super(null, null, "test", newElectionTerm(), -1, -1, new HashMap<String, String>(),
+                new DefaultConfigParamsImpl(), new NonPersistentDataProvider(), LOG);
     }
 
     public MockRaftActorContext(String id, ActorSystem system, ActorRef actor){
     }
 
     public MockRaftActorContext(String id, ActorSystem system, ActorRef actor){
-        this();
-        this.id = id;
+        super(actor, null, id, newElectionTerm(), -1, -1, new HashMap<String, String>(),
+                new DefaultConfigParamsImpl(), new NonPersistentDataProvider(), LOG);
+
         this.system = system;
         this.system = system;
-        this.actor = actor;
 
         initReplicatedLog();
     }
 
 
     public void initReplicatedLog(){
 
         initReplicatedLog();
     }
 
 
     public void initReplicatedLog(){
-        this.replicatedLog = new SimpleReplicatedLog();
+        SimpleReplicatedLog replicatedLog = new SimpleReplicatedLog();
         long term = getTermInformation().getCurrentTerm();
         long term = getTermInformation().getCurrentTerm();
-        this.replicatedLog.append(new MockReplicatedLogEntry(term, 0, new MockPayload("1")));
-        this.replicatedLog.append(new MockReplicatedLogEntry(term, 1, new MockPayload("2")));
+        replicatedLog.append(new MockReplicatedLogEntry(term, 0, new MockPayload("1")));
+        replicatedLog.append(new MockReplicatedLogEntry(term, 1, new MockPayload("2")));
+        setReplicatedLog(replicatedLog);
     }
 
     @Override public ActorRef actorOf(Props props) {
     }
 
     @Override public ActorRef actorOf(Props props) {
@@ -105,97 +95,10 @@ public class MockRaftActorContext implements RaftActorContext {
         return system.actorSelection(path);
     }
 
         return system.actorSelection(path);
     }
 
-    @Override public String getId() {
-        return id;
-    }
-
-    @Override public ActorRef getActor() {
-        return actor;
-    }
-
-    @Override public ElectionTerm getTermInformation() {
-        return electionTerm;
-    }
-
-    public void setIndex(long index){
-        this.index = index;
-    }
-
-    @Override public long getCommitIndex() {
-        return index;
-    }
-
-    @Override public void setCommitIndex(long commitIndex) {
-        this.index = commitIndex;
-    }
-
-    @Override public void setLastApplied(long lastApplied){
-        this.lastApplied = lastApplied;
-    }
-
-    @Override public long getLastApplied() {
-        return lastApplied;
-    }
-
-    @Override
-    // FIXME : A lot of tests try to manipulate the replicated log by setting it using this method
-    // This is OK to do if the underlyingActor is not RafActor or a derived class. If not then you should not
-    // used this way to manipulate the log because the RaftActor actually has a field replicatedLog
-    // which it creates internally and sets on the RaftActorContext
-    // The only right way to manipulate the replicated log therefore is to get it from either the RaftActor
-    // or the RaftActorContext and modify the entries in there instead of trying to replace it by using this setter
-    // Simple assertion that will fail if you do so
-    // ReplicatedLog log = new ReplicatedLogImpl();
-    // raftActor.underlyingActor().getRaftActorContext().setReplicatedLog(log);
-    // assertEquals(log, raftActor.underlyingActor().getReplicatedLog())
-    public void setReplicatedLog(ReplicatedLog replicatedLog) {
-        this.replicatedLog = replicatedLog;
-    }
-
-    @Override public ReplicatedLog getReplicatedLog() {
-        return replicatedLog;
-    }
-
     @Override public ActorSystem getActorSystem() {
         return this.system;
     }
 
     @Override public ActorSystem getActorSystem() {
         return this.system;
     }
 
-    @Override public Logger getLogger() {
-        return LoggerFactory.getLogger(getClass());
-    }
-
-    @Override
-    public Collection<String> getPeerIds() {
-        return peerAddresses.keySet();
-    }
-
-    @Override
-    public Collection<PeerInfo> getPeers() {
-        Collection<PeerInfo> peers = new ArrayList<>();
-        for(Map.Entry<String, String> p: peerAddresses.entrySet()) {
-            peers.add(new PeerInfo(p.getKey(), p.getValue(), VotingState.VOTING));
-        }
-
-        return peers;
-    }
-
-    @Override public String getPeerAddress(String peerId) {
-        return peerAddresses.get(peerId);
-    }
-
-    @Override
-    public PeerInfo getPeerInfo(String peerId) {
-        return new PeerInfo(peerId, peerAddresses.get(peerId), VotingState.VOTING);
-    }
-
-    @Override public void addToPeers(String name, String address, VotingState votingState) {
-        peerAddresses.put(name, address);
-    }
-
-    @Override public void removePeer(String name) {
-        peerAddresses.remove(name);
-    }
-
     @Override public ActorSelection getPeerActorSelection(String peerId) {
         String peerAddress = getPeerAddress(peerId);
         if(peerAddress != null){
     @Override public ActorSelection getPeerActorSelection(String peerId) {
         String peerAddress = getPeerAddress(peerId);
         if(peerAddress != null){
@@ -204,74 +107,32 @@ public class MockRaftActorContext implements RaftActorContext {
         return null;
     }
 
         return null;
     }
 
-    @Override public void setPeerAddress(String peerId, String peerAddress) {
-        Preconditions.checkState(peerAddresses.containsKey(peerId));
-        peerAddresses.put(peerId, peerAddress);
-    }
-
     public void setPeerAddresses(Map<String, String> peerAddresses) {
     public void setPeerAddresses(Map<String, String> peerAddresses) {
-        this.peerAddresses = peerAddresses;
-    }
-
-    @Override
-    public ConfigParams getConfigParams() {
-        return configParams;
-    }
-
-    @Override
-    public SnapshotManager getSnapshotManager() {
-        if(this.snapshotManager == null){
-            this.snapshotManager = new SnapshotManager(this, getLogger());
-            this.snapshotManager.setCreateSnapshotCallable(NoopProcedure.<Void>instance());
+        for(String id: getPeerIds()) {
+            removePeer(id);
         }
         }
-        return this.snapshotManager;
-    }
 
 
-    public void setConfigParams(ConfigParams configParams) {
-        this.configParams = configParams;
-    }
-
-    @Override
-    public long getTotalMemory() {
-        return Runtime.getRuntime().totalMemory();
-    }
-
-    @Override
-    public void setTotalMemoryRetriever(Supplier<Long> retriever) {
-    }
-
-    @Override
-    public boolean hasFollowers() {
-        return getPeerIds().size() > 0;
-    }
-
-    @Override
-    public DataPersistenceProvider getPersistenceProvider() {
-        return persistenceProvider;
-    }
-
-    public void setPersistenceProvider(DataPersistenceProvider persistenceProvider) {
-        this.persistenceProvider = persistenceProvider;
+        for(Map.Entry<String, String> e: peerAddresses.entrySet()) {
+            addToPeers(e.getKey(), e.getValue(), VotingState.VOTING);
+        }
     }
 
     @Override
     }
 
     @Override
-    public short getPayloadVersion() {
-        return payloadVersion;
+    public SnapshotManager getSnapshotManager() {
+        SnapshotManager snapshotManager = super.getSnapshotManager();
+        snapshotManager.setCreateSnapshotCallable(NoopProcedure.<Void>instance());
+        return snapshotManager;
     }
 
     @Override
     public RaftPolicy getRaftPolicy() {
     }
 
     @Override
     public RaftPolicy getRaftPolicy() {
-        return this.raftPolicy;
+        return raftPolicy != null ? raftPolicy : super.getRaftPolicy();
     }
 
     }
 
-    public void setRaftPolicy(RaftPolicy raftPolicy){
+    public void setRaftPolicy(RaftPolicy raftPolicy) {
         this.raftPolicy = raftPolicy;
     }
 
         this.raftPolicy = raftPolicy;
     }
 
-    public void setPayloadVersion(short payloadVersion) {
-        this.payloadVersion = payloadVersion;
-    }
-
     public static class SimpleReplicatedLog extends AbstractReplicatedLogImpl {
         @Override
         public void appendAndPersist(
     public static class SimpleReplicatedLog extends AbstractReplicatedLogImpl {
         @Override
         public void appendAndPersist(