X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FMockRaftActorContext.java;h=7f70796bbd27520106e2aa544fbc110fce221c9f;hb=2fb20e0091de8945147ca984721b23d28161aa8d;hp=4d33152b41ca1a575d086a5ca04be8437e25d52b;hpb=bd8beb1bfee9f421ad8f2d07b1424b21038234a2;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MockRaftActorContext.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MockRaftActorContext.java index 4d33152b41..7f70796bbd 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MockRaftActorContext.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MockRaftActorContext.java @@ -12,48 +12,28 @@ import akka.actor.ActorRef; import akka.actor.ActorSelection; import akka.actor.ActorSystem; import akka.actor.Props; -import com.google.common.base.Preconditions; +import akka.japi.Procedure; import com.google.protobuf.GeneratedMessage; import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import org.opendaylight.controller.cluster.NonPersistentDataProvider; +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.protobuff.messages.cluster.raft.test.MockPayloadMessages; 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 ActorRef actor; - private long index = 0; - private long lastApplied = 0; - private final ElectionTerm electionTerm; - private ReplicatedLog replicatedLog; - private Map peerAddresses = new HashMap<>(); - private ConfigParams configParams; - private boolean snapshotCaptureInitiated; + private RaftPolicy raftPolicy; - public MockRaftActorContext(){ - electionTerm = null; - - initReplicatedLog(); - } - - public MockRaftActorContext(String id, ActorSystem system, ActorRef actor){ - this.id = id; - this.system = system; - this.actor = actor; - - final String id1 = id; - electionTerm = new ElectionTerm() { - /** - * Identifier of the actor whose election term information this is - */ - private final String id = id1; - private long currentTerm = 0; + private static ElectionTerm newElectionTerm() { + return new ElectionTerm() { + private long currentTerm = 1; private String votedFor = ""; @Override @@ -79,17 +59,30 @@ public class MockRaftActorContext implements RaftActorContext { update(currentTerm, votedFor); } }; + } + + public MockRaftActorContext(){ + super(null, null, "test", newElectionTerm(), -1, -1, new HashMap(), + new DefaultConfigParamsImpl(), new NonPersistentDataProvider(), LOG); + setReplicatedLog(new MockReplicatedLogBuilder().build()); + } - configParams = new DefaultConfigParamsImpl(); + public MockRaftActorContext(String id, ActorSystem system, ActorRef actor){ + super(actor, null, id, newElectionTerm(), -1, -1, new HashMap(), + new DefaultConfigParamsImpl(), new NonPersistentDataProvider(), LOG); + + this.system = system; initReplicatedLog(); } public void initReplicatedLog(){ - this.replicatedLog = new SimpleReplicatedLog(); - this.replicatedLog.append(new MockReplicatedLogEntry(1, 0, new MockPayload("1"))); - this.replicatedLog.append(new MockReplicatedLogEntry(1, 1, new MockPayload("2"))); + SimpleReplicatedLog replicatedLog = new SimpleReplicatedLog(); + long term = getTermInformation().getCurrentTerm(); + 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) { @@ -100,71 +93,10 @@ public class MockRaftActorContext implements RaftActorContext { 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 - public void setReplicatedLog(ReplicatedLog replicatedLog) { - this.replicatedLog = replicatedLog; - } - - @Override public ReplicatedLog getReplicatedLog() { - return replicatedLog; - } - @Override public ActorSystem getActorSystem() { return this.system; } - @Override public Logger getLogger() { - return LoggerFactory.getLogger(getClass()); - } - - @Override public Map getPeerAddresses() { - return peerAddresses; - } - - @Override public String getPeerAddress(String peerId) { - return peerAddresses.get(peerId); - } - - @Override public void addToPeers(String name, String address) { - 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){ @@ -173,36 +105,35 @@ public class MockRaftActorContext implements RaftActorContext { return null; } - @Override public void setPeerAddress(String peerId, String peerAddress) { - Preconditions.checkState(peerAddresses.containsKey(peerId)); - peerAddresses.put(peerId, peerAddress); - } - public void setPeerAddresses(Map peerAddresses) { - this.peerAddresses = peerAddresses; - } + for(String id: getPeerIds()) { + removePeer(id); + } - @Override - public ConfigParams getConfigParams() { - return configParams; + for(Map.Entry e: peerAddresses.entrySet()) { + addToPeers(e.getKey(), e.getValue(), VotingState.VOTING); + } } @Override - public void setSnapshotCaptureInitiated(boolean snapshotCaptureInitiated) { - this.snapshotCaptureInitiated = snapshotCaptureInitiated; + public SnapshotManager getSnapshotManager() { + SnapshotManager snapshotManager = super.getSnapshotManager(); + snapshotManager.setCreateSnapshotCallable(NoopProcedure.instance()); + return snapshotManager; } @Override - public boolean isSnapshotCaptureInitiated() { - return snapshotCaptureInitiated; + public RaftPolicy getRaftPolicy() { + return raftPolicy != null ? raftPolicy : super.getRaftPolicy(); } - public void setConfigParams(ConfigParams configParams) { - this.configParams = configParams; + public void setRaftPolicy(RaftPolicy raftPolicy) { + this.raftPolicy = raftPolicy; } public static class SimpleReplicatedLog extends AbstractReplicatedLogImpl { - @Override public void appendAndPersist( + @Override + public void appendAndPersist( ReplicatedLogEntry replicatedLogEntry) { append(replicatedLogEntry); } @@ -212,25 +143,48 @@ public class MockRaftActorContext implements RaftActorContext { return -1; } + @Override + public void captureSnapshotIfReady(ReplicatedLogEntry replicatedLogEntry) { + } + @Override public void removeFromAndPersist(long index) { removeFrom(index); } + + @Override + public void appendAndPersist(ReplicatedLogEntry replicatedLogEntry, Procedure callback) { + append(replicatedLogEntry); + + if(callback != null) { + try { + callback.apply(replicatedLogEntry); + } catch (Exception e) { + e.printStackTrace(); + } + } + } } public static class MockPayload extends Payload implements Serializable { private static final long serialVersionUID = 3121380393130864247L; private String value = ""; + private int size; - public MockPayload(){ - + public MockPayload() { } public MockPayload(String s) { this.value = s; + size = value.length(); } - @Override public Map encode() { - Map map = new HashMap(); + public MockPayload(String s, int size) { + this(s); + this.size = size; + } + + @Override public Map, String> encode() { + Map, String> map = new HashMap<>(); map.put(MockPayloadMessages.value, value); return map; } @@ -244,7 +198,7 @@ public class MockRaftActorContext implements RaftActorContext { @Override public int size() { - return value.length(); + return size; } @Override public String getClientPayloadClassName() { @@ -255,6 +209,36 @@ public class MockRaftActorContext implements RaftActorContext { public String toString() { return value; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((value == null) ? 0 : value.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + MockPayload other = (MockPayload) obj; + if (value == null) { + if (other.value != null) { + return false; + } + } else if (!value.equals(other.value)) { + return false; + } + return true; + } } public static class MockReplicatedLogEntry implements ReplicatedLogEntry, Serializable { @@ -287,6 +271,52 @@ public class MockRaftActorContext implements RaftActorContext { public int size() { return getData().size(); } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((data == null) ? 0 : data.hashCode()); + result = prime * result + (int) (index ^ (index >>> 32)); + result = prime * result + (int) (term ^ (term >>> 32)); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + MockReplicatedLogEntry other = (MockReplicatedLogEntry) obj; + if (data == null) { + if (other.data != null) { + return false; + } + } else if (!data.equals(other.data)) { + return false; + } + if (index != other.index) { + return false; + } + if (term != other.term) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("MockReplicatedLogEntry [term=").append(term).append(", index=").append(index) + .append(", data=").append(data).append("]"); + return builder.toString(); + } } public static class MockReplicatedLogBuilder { @@ -294,7 +324,7 @@ public class MockRaftActorContext implements RaftActorContext { public MockReplicatedLogBuilder createEntries(int start, int end, int term) { for (int i=start; i