X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2Fmessages%2FRequestVote.java;h=b23c76d06f9213d516f0f2a7345f85034c157333;hb=4a3ba6c6695119ba041f358fca281b582c7665f1;hp=981da17ce143389b75e8303b4bde9fd9fd582ad1;hpb=244d226cc66672e2e15d0b557bd1af37153d8065;p=controller.git 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 981da17ce1..b23c76d06f 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 @@ -5,13 +5,18 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - 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{ +public final class RequestVote extends AbstractRaftRPC { + private static final long serialVersionUID = -6967509186297108657L; // candidate requesting vote private final String candidateId; @@ -22,18 +27,13 @@ public class RequestVote extends AbstractRaftRPC{ // term of candidate’s last log entry (§5.4) private final long lastLogTerm; - public RequestVote(long term, String candidateId, long lastLogIndex, - long lastLogTerm) { + public RequestVote(final long term, final String candidateId, final long lastLogIndex, final long lastLogTerm) { super(term); this.candidateId = candidateId; this.lastLogIndex = lastLogIndex; this.lastLogTerm = lastLogTerm; } - public long getTerm() { - return term; - } - public String getCandidateId() { return candidateId; } @@ -45,4 +45,56 @@ public class RequestVote extends AbstractRaftRPC{ public long getLastLogTerm() { return lastLogTerm; } + + @Override + public String toString() { + return "RequestVote [term=" + getTerm() + + ", candidateId=" + candidateId + + ", lastLogIndex=" + lastLogIndex + + ", lastLogTerm=" + lastLogTerm + + "]"; + } + + @Override + Object writeReplace() { + return new Proxy(this); + } + + 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(final RequestVote requestVote) { + this.requestVote = requestVote; + } + + @Override + public void writeExternal(final ObjectOutput out) throws IOException { + out.writeLong(requestVote.getTerm()); + out.writeObject(requestVote.candidateId); + out.writeLong(requestVote.lastLogIndex); + out.writeLong(requestVote.lastLogTerm); + } + + @Override + public void readExternal(final 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); + } + + private Object readResolve() { + return requestVote; + } + } }