Merge "BUG-2424 Bump mina sshd-core version to 0.14"
[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 static com.google.common.base.Preconditions.checkState;
12 import akka.actor.ActorRef;
13 import akka.actor.ActorSelection;
14 import akka.actor.ActorSystem;
15 import akka.actor.Props;
16 import akka.actor.UntypedActorContext;
17 import java.util.Map;
18 import org.slf4j.Logger;
19
20 public class RaftActorContextImpl implements RaftActorContext {
21
22     private final ActorRef actor;
23
24     private final UntypedActorContext context;
25
26     private final String id;
27
28     private final ElectionTerm termInformation;
29
30     private long commitIndex;
31
32     private long lastApplied;
33
34     private ReplicatedLog replicatedLog;
35
36     private final Map<String, String> peerAddresses;
37
38     private final Logger LOG;
39
40     private ConfigParams configParams;
41
42     private boolean snapshotCaptureInitiated;
43
44     // Snapshot manager will need to be created on demand as it needs raft actor context which cannot
45     // be passed to it in the constructor
46     private SnapshotManager snapshotManager;
47
48     public RaftActorContextImpl(ActorRef actor, UntypedActorContext context,
49         String id,
50         ElectionTerm termInformation, long commitIndex,
51         long lastApplied, ReplicatedLog replicatedLog,
52         Map<String, String> peerAddresses, ConfigParams configParams,
53         Logger logger) {
54         this.actor = actor;
55         this.context = context;
56         this.id = id;
57         this.termInformation = termInformation;
58         this.commitIndex = commitIndex;
59         this.lastApplied = lastApplied;
60         this.replicatedLog = replicatedLog;
61         this.peerAddresses = peerAddresses;
62         this.configParams = configParams;
63         this.LOG = logger;
64     }
65
66     void setConfigParams(ConfigParams configParams) {
67         this.configParams = configParams;
68     }
69
70     @Override
71     public ActorRef actorOf(Props props){
72         return context.actorOf(props);
73     }
74
75     @Override
76     public ActorSelection actorSelection(String path){
77         return context.actorSelection(path);
78     }
79
80     @Override
81     public String getId() {
82         return id;
83     }
84
85     @Override
86     public ActorRef getActor() {
87         return actor;
88     }
89
90     @Override
91     public ElectionTerm getTermInformation() {
92         return termInformation;
93     }
94
95     @Override
96     public long getCommitIndex() {
97         return commitIndex;
98     }
99
100     @Override public void setCommitIndex(long commitIndex) {
101         this.commitIndex = commitIndex;
102     }
103
104     @Override
105     public long getLastApplied() {
106         return lastApplied;
107     }
108
109     @Override public void setLastApplied(long lastApplied) {
110         this.lastApplied = lastApplied;
111     }
112
113     @Override public void setReplicatedLog(ReplicatedLog replicatedLog) {
114         this.replicatedLog = replicatedLog;
115     }
116
117     @Override public ReplicatedLog getReplicatedLog() {
118         return replicatedLog;
119     }
120
121     @Override public ActorSystem getActorSystem() {
122         return context.system();
123     }
124
125     @Override public Logger getLogger() {
126         return this.LOG;
127     }
128
129     @Override public Map<String, String> getPeerAddresses() {
130         return peerAddresses;
131     }
132
133     @Override public String getPeerAddress(String peerId) {
134         return peerAddresses.get(peerId);
135     }
136
137     @Override public ConfigParams getConfigParams() {
138         return configParams;
139     }
140
141     @Override public void addToPeers(String name, String address) {
142         peerAddresses.put(name, address);
143     }
144
145     @Override public void removePeer(String name) {
146         peerAddresses.remove(name);
147     }
148
149     @Override public ActorSelection getPeerActorSelection(String peerId) {
150         String peerAddress = getPeerAddress(peerId);
151         if(peerAddress != null){
152             return actorSelection(peerAddress);
153         }
154         return null;
155     }
156
157     @Override public void setPeerAddress(String peerId, String peerAddress) {
158         LOG.info("Peer address for peer {} set to {}", peerId, peerAddress);
159         checkState(peerAddresses.containsKey(peerId), peerId + " is unknown");
160
161         peerAddresses.put(peerId, peerAddress);
162     }
163
164     public SnapshotManager getSnapshotManager() {
165         if(snapshotManager == null){
166             snapshotManager = new SnapshotManager(this, LOG);
167         }
168         return snapshotManager;
169     }
170 }