Snapshot changes
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / RaftActorContextImpl.java
index 9ec8dddf6a11773cb07f1206350cd9175e6c8b9d..0fbc55d1a4a5293bf195126542c71e6fc8cf56e7 100644 (file)
@@ -10,10 +10,14 @@ package org.opendaylight.controller.cluster.raft;
 
 import akka.actor.ActorRef;
 import akka.actor.ActorSelection;
+import akka.actor.ActorSystem;
 import akka.actor.Props;
 import akka.actor.UntypedActorContext;
+import akka.event.LoggingAdapter;
 
-import java.util.concurrent.atomic.AtomicLong;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkState;
 
 public class RaftActorContextImpl implements RaftActorContext{
 
@@ -25,16 +29,20 @@ public class RaftActorContextImpl implements RaftActorContext{
 
     private final ElectionTerm termInformation;
 
-    private final AtomicLong commitIndex;
+    private long commitIndex;
+
+    private long lastApplied;
 
-    private final AtomicLong lastApplied;
+    private ReplicatedLog replicatedLog;
 
-    private final ReplicatedLog replicatedLog;
+    private final Map<String, String> peerAddresses;
+
+    private final LoggingAdapter LOG;
 
     public RaftActorContextImpl(ActorRef actor, UntypedActorContext context,
         String id,
-        ElectionTerm termInformation, AtomicLong commitIndex,
-        AtomicLong lastApplied, ReplicatedLog replicatedLog) {
+        ElectionTerm termInformation, long commitIndex,
+        long lastApplied, ReplicatedLog replicatedLog, Map<String, String> peerAddresses, LoggingAdapter logger) {
         this.actor = actor;
         this.context = context;
         this.id = id;
@@ -42,6 +50,8 @@ public class RaftActorContextImpl implements RaftActorContext{
         this.commitIndex = commitIndex;
         this.lastApplied = lastApplied;
         this.replicatedLog = replicatedLog;
+        this.peerAddresses = peerAddresses;
+        this.LOG = logger;
     }
 
     public ActorRef actorOf(Props props){
@@ -64,15 +74,66 @@ public class RaftActorContextImpl implements RaftActorContext{
         return termInformation;
     }
 
-    public AtomicLong getCommitIndex() {
+    public long getCommitIndex() {
         return commitIndex;
     }
 
-    public AtomicLong getLastApplied() {
+    @Override public void setCommitIndex(long commitIndex) {
+        this.commitIndex = commitIndex;
+    }
+
+    public long getLastApplied() {
         return lastApplied;
     }
 
+    @Override public void setLastApplied(long lastApplied) {
+        this.lastApplied = lastApplied;
+    }
+
+    @Override public void setReplicatedLog(ReplicatedLog replicatedLog) {
+        this.replicatedLog = replicatedLog;
+    }
+
     @Override public ReplicatedLog getReplicatedLog() {
         return replicatedLog;
     }
+
+    @Override public ActorSystem getActorSystem() {
+        return context.system();
+    }
+
+    @Override public LoggingAdapter getLogger() {
+        return this.LOG;
+    }
+
+    @Override public Map<String, String> 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){
+            return actorSelection(peerAddress);
+        }
+        return null;
+    }
+
+    @Override public void setPeerAddress(String peerId, String peerAddress) {
+        LOG.info("Peer address for peer {} set to {}", peerId, peerAddress);
+        checkState(peerAddresses.containsKey(peerId), peerId + " is unknown");
+
+        peerAddresses.put(peerId, peerAddress);
+    }
 }