X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2Fmessages%2FRequestVote.java;h=5ed18f918a0d7ba87c7cf75e6567ee1548711c99;hp=8321d0c25bcecce32617c55fe652c2b7be189541;hb=8d04a0c4e33016ec502c5b45d70c6454fe0a31e6;hpb=b131db5779e46e9555aa3358c5b6aa13109ef8f5 diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/messages/RequestVote.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/messages/RequestVote.java index 8321d0c25b..5ed18f918a 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/messages/RequestVote.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/messages/RequestVote.java @@ -8,37 +8,33 @@ package org.opendaylight.controller.cluster.raft.messages; +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; + /** * Invoked by candidates to gather votes (§5.2). */ public class RequestVote extends AbstractRaftRPC { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = -6967509186297108657L; // candidate requesting vote - private String candidateId; + private final String candidateId; // index of candidate’s last log entry (§5.4) - private long lastLogIndex; + private final long lastLogIndex; // term of candidate’s last log entry (§5.4) - private long lastLogTerm; + private final long lastLogTerm; - public RequestVote(long term, String candidateId, long lastLogIndex, - long lastLogTerm) { + public RequestVote(long term, String candidateId, long lastLogIndex, long lastLogTerm) { super(term); this.candidateId = candidateId; this.lastLogIndex = lastLogIndex; this.lastLogTerm = lastLogTerm; } - // added for testing while serialize-messages=on - public RequestVote() { - } - - public long getTerm() { - return term; - } - public String getCandidateId() { return candidateId; } @@ -51,26 +47,54 @@ public class RequestVote extends AbstractRaftRPC { return lastLogTerm; } - public void setCandidateId(String candidateId) { - this.candidateId = candidateId; + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("RequestVote [term=").append(getTerm()).append(", candidateId=").append(candidateId) + .append(", lastLogIndex=").append(lastLogIndex).append(", lastLogTerm=").append(lastLogTerm) + .append("]"); + return builder.toString(); } - public void setLastLogIndex(long lastLogIndex) { - this.lastLogIndex = lastLogIndex; + private Object writeReplace() { + return new Proxy(this); } - public void setLastLogTerm(long lastLogTerm) { - this.lastLogTerm = lastLogTerm; - } + private static class Proxy implements Externalizable { + private static final long serialVersionUID = 1L; + + private RequestVote requestVote; + + // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't + // redundant. It is explicitly needed for Java serialization to be able to create instances via reflection. + @SuppressWarnings("checkstyle:RedundantModifier") + public Proxy() { + } + + Proxy(RequestVote requestVote) { + this.requestVote = requestVote; + } + + @Override + public void writeExternal(ObjectOutput out) throws IOException { + out.writeLong(requestVote.getTerm()); + out.writeObject(requestVote.candidateId); + out.writeLong(requestVote.lastLogIndex); + out.writeLong(requestVote.lastLogTerm); + } + + @Override + public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + long term = in.readLong(); + String candidateId = (String) in.readObject(); + long lastLogIndex = in.readLong(); + long lastLogTerm = in.readLong(); + + requestVote = new RequestVote(term, candidateId, lastLogIndex, lastLogTerm); + } - @Override public String toString() { - final StringBuilder sb = - new StringBuilder("RequestVote{"); - sb.append("term='").append(getTerm()).append('\''); - sb.append("candidateId='").append(candidateId).append('\''); - sb.append(", lastLogIndex=").append(lastLogIndex); - sb.append(", lastLogTerm=").append(lastLogTerm); - sb.append('}'); - return sb.toString(); + private Object readResolve() { + return requestVote; + } } }