Remove Helium protobuff code from AppendEntries
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / messages / AppendEntries.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.messages;
10
11 import java.io.IOException;
12 import java.io.ObjectInputStream;
13 import java.io.ObjectOutputStream;
14 import java.util.ArrayList;
15 import java.util.List;
16 import org.opendaylight.controller.cluster.raft.RaftVersions;
17 import org.opendaylight.controller.cluster.raft.ReplicatedLogEntry;
18
19 /**
20  * Invoked by leader to replicate log entries (§5.3); also used as
21  * heartbeat (§5.2).
22  */
23 public class AppendEntries extends AbstractRaftRPC {
24     private static final long serialVersionUID = 1L;
25
26     private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(AppendEntries.class);
27
28     // So that follower can redirect clients
29     private final String leaderId;
30
31     // Index of log entry immediately preceding new ones
32     private final long prevLogIndex;
33
34     // term of prevLogIndex entry
35     private final long prevLogTerm;
36
37     // log entries to store (empty for heartbeat;
38     // may send more than one for efficiency)
39     private transient List<ReplicatedLogEntry> entries;
40
41     // leader's commitIndex
42     private final long leaderCommit;
43
44     // index which has been replicated successfully to all followers, -1 if none
45     private final long replicatedToAllIndex;
46
47     private final short payloadVersion;
48
49     public AppendEntries(long term, String leaderId, long prevLogIndex, long prevLogTerm,
50             List<ReplicatedLogEntry> entries, long leaderCommit, long replicatedToAllIndex, short payloadVersion) {
51         super(term);
52         this.leaderId = leaderId;
53         this.prevLogIndex = prevLogIndex;
54         this.prevLogTerm = prevLogTerm;
55         this.entries = entries;
56         this.leaderCommit = leaderCommit;
57         this.replicatedToAllIndex = replicatedToAllIndex;
58         this.payloadVersion = payloadVersion;
59     }
60
61     private void writeObject(ObjectOutputStream out) throws IOException {
62         out.writeShort(RaftVersions.CURRENT_VERSION);
63         out.defaultWriteObject();
64
65         out.writeInt(entries.size());
66         for(ReplicatedLogEntry e: entries) {
67             out.writeObject(e);
68         }
69     }
70
71     private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
72         in.readShort(); // raft version
73
74         in.defaultReadObject();
75
76         int size = in.readInt();
77         entries = new ArrayList<>(size);
78         for(int i = 0; i < size; i++) {
79             entries.add((ReplicatedLogEntry) in.readObject());
80         }
81     }
82
83     public String getLeaderId() {
84         return leaderId;
85     }
86
87     public long getPrevLogIndex() {
88         return prevLogIndex;
89     }
90
91     public long getPrevLogTerm() {
92         return prevLogTerm;
93     }
94
95     public List<ReplicatedLogEntry> getEntries() {
96         return entries;
97     }
98
99     public long getLeaderCommit() {
100         return leaderCommit;
101     }
102
103     public long getReplicatedToAllIndex() {
104         return replicatedToAllIndex;
105     }
106
107     public short getPayloadVersion() {
108         return payloadVersion;
109     }
110
111     @Override
112     public String toString() {
113         StringBuilder builder = new StringBuilder();
114         builder.append("AppendEntries [leaderId=").append(leaderId).append(", prevLogIndex=").append(prevLogIndex)
115                 .append(", prevLogTerm=").append(prevLogTerm).append(", leaderCommit=").append(leaderCommit)
116                 .append(", replicatedToAllIndex=").append(replicatedToAllIndex).append(", payloadVersion=")
117                 .append(payloadVersion).append(", entries=").append(entries).append("]");
118         return builder.toString();
119     }
120 }