Merge "Added hosttracker shell for karaf (rebased)"
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / RaftActorContextImpl.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.cluster.raft;
10
11 import akka.actor.ActorRef;
12 import akka.actor.ActorSelection;
13 import akka.actor.ActorSystem;
14 import akka.actor.Props;
15 import akka.actor.UntypedActorContext;
16 import akka.event.LoggingAdapter;
17
18 import java.util.Map;
19
20 import static com.google.common.base.Preconditions.checkState;
21
22 public class RaftActorContextImpl implements RaftActorContext {
23
24     private final ActorRef actor;
25
26     private final UntypedActorContext context;
27
28     private final String id;
29
30     private final ElectionTerm termInformation;
31
32     private long commitIndex;
33
34     private long lastApplied;
35
36     private ReplicatedLog replicatedLog;
37
38     private final Map<String, String> peerAddresses;
39
40     private final LoggingAdapter LOG;
41
42     private final ConfigParams configParams;
43
44     public RaftActorContextImpl(ActorRef actor, UntypedActorContext context,
45         String id,
46         ElectionTerm termInformation, long commitIndex,
47         long lastApplied, ReplicatedLog replicatedLog,
48         Map<String, String> peerAddresses, ConfigParams configParams,
49         LoggingAdapter logger) {
50         this.actor = actor;
51         this.context = context;
52         this.id = id;
53         this.termInformation = termInformation;
54         this.commitIndex = commitIndex;
55         this.lastApplied = lastApplied;
56         this.replicatedLog = replicatedLog;
57         this.peerAddresses = peerAddresses;
58         this.configParams = configParams;
59         this.LOG = logger;
60     }
61
62     public ActorRef actorOf(Props props){
63         return context.actorOf(props);
64     }
65
66     public ActorSelection actorSelection(String path){
67         return context.actorSelection(path);
68     }
69
70     public String getId() {
71         return id;
72     }
73
74     public ActorRef getActor() {
75         return actor;
76     }
77
78     public ElectionTerm getTermInformation() {
79         return termInformation;
80     }
81
82     public long getCommitIndex() {
83         return commitIndex;
84     }
85
86     @Override public void setCommitIndex(long commitIndex) {
87         this.commitIndex = commitIndex;
88     }
89
90     public long getLastApplied() {
91         return lastApplied;
92     }
93
94     @Override public void setLastApplied(long lastApplied) {
95         this.lastApplied = lastApplied;
96     }
97
98     @Override public void setReplicatedLog(ReplicatedLog replicatedLog) {
99         this.replicatedLog = replicatedLog;
100     }
101
102     @Override public ReplicatedLog getReplicatedLog() {
103         return replicatedLog;
104     }
105
106     @Override public ActorSystem getActorSystem() {
107         return context.system();
108     }
109
110     @Override public LoggingAdapter getLogger() {
111         return this.LOG;
112     }
113
114     @Override public Map<String, String> getPeerAddresses() {
115         return peerAddresses;
116     }
117
118     @Override public String getPeerAddress(String peerId) {
119         return peerAddresses.get(peerId);
120     }
121
122     @Override public ConfigParams getConfigParams() {
123         return configParams;
124     }
125
126     @Override public void addToPeers(String name, String address) {
127         peerAddresses.put(name, address);
128     }
129
130     @Override public void removePeer(String name) {
131         peerAddresses.remove(name);
132     }
133
134     @Override public ActorSelection getPeerActorSelection(String peerId) {
135         String peerAddress = getPeerAddress(peerId);
136         if(peerAddress != null){
137             return actorSelection(peerAddress);
138         }
139         return null;
140     }
141
142     @Override public void setPeerAddress(String peerId, String peerAddress) {
143         LOG.info("Peer address for peer {} set to {}", peerId, peerAddress);
144         checkState(peerAddresses.containsKey(peerId), peerId + " is unknown");
145
146         peerAddresses.put(peerId, peerAddress);
147     }
148 }