Move FollowerInfo
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / client / messages / OnDemandRaftState.java
1 /*
2  * Copyright (c) 2015 Brocade Communications 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 package org.opendaylight.controller.cluster.raft.client.messages;
9
10 import com.google.common.collect.ImmutableMap;
11 import java.util.Collections;
12 import java.util.List;
13 import java.util.Map;
14 import org.eclipse.jdt.annotation.NonNull;
15 import org.opendaylight.controller.cluster.mgmt.api.FollowerInfo;
16
17 /**
18  * The response to a GetOnDemandRaftState message.
19  *
20  * @author Thomas Pantelis
21  */
22 public class OnDemandRaftState {
23     private long lastLogIndex = -1L;
24     private long lastLogTerm = -1L;
25     private long currentTerm = -1L;
26     private long commitIndex = -1L;
27     private long lastApplied = -1L;
28     private long lastIndex = -1L;
29     private long lastTerm = -1L;
30     private long snapshotIndex = -1L;
31     private long snapshotTerm = -1L;
32     private long replicatedToAllIndex = -1L;
33     private long inMemoryJournalDataSize;
34     private long inMemoryJournalLogSize;
35     private String leader;
36     private String raftState;
37     private String votedFor;
38     private boolean isSnapshotCaptureInitiated;
39     private String customRaftPolicyClassName;
40     private boolean isVoting;
41
42     private List<FollowerInfo> followerInfoList = Collections.emptyList();
43     private Map<String, String> peerAddresses = Collections.emptyMap();
44     private Map<String, Boolean> peerVotingStates = Collections.emptyMap();
45
46     protected OnDemandRaftState() {
47     }
48
49     public static Builder builder() {
50         return new Builder();
51     }
52
53     public long getLastLogIndex() {
54         return lastLogIndex;
55     }
56
57     public long getLastLogTerm() {
58         return lastLogTerm;
59     }
60
61     public long getCurrentTerm() {
62         return currentTerm;
63     }
64
65     public long getCommitIndex() {
66         return commitIndex;
67     }
68
69     public long getLastApplied() {
70         return lastApplied;
71     }
72
73     public long getLastIndex() {
74         return lastIndex;
75     }
76
77     public long getLastTerm() {
78         return lastTerm;
79     }
80
81     public long getSnapshotIndex() {
82         return snapshotIndex;
83     }
84
85     public long getSnapshotTerm() {
86         return snapshotTerm;
87     }
88
89     public long getReplicatedToAllIndex() {
90         return replicatedToAllIndex;
91     }
92
93     public long getInMemoryJournalDataSize() {
94         return inMemoryJournalDataSize;
95     }
96
97     public long getInMemoryJournalLogSize() {
98         return inMemoryJournalLogSize;
99     }
100
101     public String getLeader() {
102         return leader;
103     }
104
105     public String getRaftState() {
106         return raftState;
107     }
108
109     public String getVotedFor() {
110         return votedFor;
111     }
112
113     public boolean isSnapshotCaptureInitiated() {
114         return isSnapshotCaptureInitiated;
115     }
116
117     public boolean isVoting() {
118         return isVoting;
119     }
120
121     public List<FollowerInfo> getFollowerInfoList() {
122         return followerInfoList;
123     }
124
125     public Map<String, String> getPeerAddresses() {
126         return peerAddresses;
127     }
128
129     public Map<String, Boolean> getPeerVotingStates() {
130         return peerVotingStates;
131     }
132
133     public String getCustomRaftPolicyClassName() {
134         return customRaftPolicyClassName;
135     }
136
137     public abstract static class AbstractBuilder<B extends AbstractBuilder<B, T>, T extends OnDemandRaftState> {
138         @SuppressWarnings("unchecked")
139         protected B self() {
140             return (B) this;
141         }
142
143         protected abstract @NonNull OnDemandRaftState state();
144
145         public B lastLogIndex(long value) {
146             state().lastLogIndex = value;
147             return self();
148         }
149
150         public B lastLogTerm(long value) {
151             state().lastLogTerm = value;
152             return self();
153         }
154
155         public B currentTerm(long value) {
156             state().currentTerm = value;
157             return self();
158         }
159
160         public B commitIndex(long value) {
161             state().commitIndex = value;
162             return self();
163         }
164
165         public B lastApplied(long value) {
166             state().lastApplied = value;
167             return self();
168         }
169
170         public B lastIndex(long value) {
171             state().lastIndex = value;
172             return self();
173         }
174
175         public B lastTerm(long value) {
176             state().lastTerm = value;
177             return self();
178         }
179
180         public B snapshotIndex(long value) {
181             state().snapshotIndex = value;
182             return self();
183         }
184
185         public B snapshotTerm(long value) {
186             state().snapshotTerm = value;
187             return self();
188         }
189
190         public B replicatedToAllIndex(long value) {
191             state().replicatedToAllIndex = value;
192             return self();
193         }
194
195         public B inMemoryJournalDataSize(long value) {
196             state().inMemoryJournalDataSize = value;
197             return self();
198         }
199
200         public B inMemoryJournalLogSize(long value) {
201             state().inMemoryJournalLogSize = value;
202             return self();
203         }
204
205         public B leader(String value) {
206             state().leader = value;
207             return self();
208         }
209
210         public B raftState(String value) {
211             state().raftState = value;
212             return self();
213         }
214
215         public B votedFor(String value) {
216             state().votedFor = value;
217             return self();
218         }
219
220         public B isVoting(boolean isVoting) {
221             state().isVoting = isVoting;
222             return self();
223         }
224
225         public B followerInfoList(List<FollowerInfo> followerInfoList) {
226             state().followerInfoList = followerInfoList;
227             return self();
228         }
229
230         public B peerAddresses(Map<String, String> peerAddresses) {
231             state().peerAddresses = peerAddresses;
232             return self();
233         }
234
235         public B peerVotingStates(Map<String, Boolean> peerVotingStates) {
236             state().peerVotingStates = ImmutableMap.copyOf(peerVotingStates);
237             return self();
238         }
239
240         public B isSnapshotCaptureInitiated(boolean value) {
241             state().isSnapshotCaptureInitiated = value;
242             return self();
243         }
244
245         public B customRaftPolicyClassName(String className) {
246             state().customRaftPolicyClassName = className;
247             return self();
248         }
249
250         @SuppressWarnings("unchecked")
251         public T build() {
252             return (T) state();
253         }
254     }
255
256     public static class Builder extends AbstractBuilder<Builder, OnDemandRaftState> {
257         private final OnDemandRaftState state = new OnDemandRaftState();
258
259         @Override
260         protected OnDemandRaftState state() {
261             return state;
262         }
263     }
264 }