Convert TermIndex to an interface.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/59460582 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/59460582 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/59460582 Branch: refs/heads/master Commit: 594605829133f98d51b16d42fd0596fa26bde6d2 Parents: 8dbb64f Author: Tsz-Wo Nicholas Sze <[email protected]> Authored: Fri Jan 6 14:44:36 2017 +0800 Committer: Tsz-Wo Nicholas Sze <[email protected]> Committed: Fri Jan 6 14:44:36 2017 +0800 ---------------------------------------------------------------------- .../arithmetic/ArithmeticStateMachine.java | 2 +- .../raft/server/impl/ServerProtoUtils.java | 5 +- .../apache/raft/server/impl/ServerUtils.java | 81 ++++++++++++++++++++ .../apache/raft/server/protocol/TermIndex.java | 58 +++----------- .../org/apache/raft/server/storage/RaftLog.java | 3 +- .../statemachine/SimpleStateMachineStorage.java | 2 +- .../raft/statemachine/SnapshotInfoImpl.java | 2 +- .../SimpleStateMachine4Testing.java | 7 +- .../raft/statemachine/TermIndexTracker.java | 2 +- 9 files changed, 104 insertions(+), 58 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/59460582/raft-examples/src/main/java/org/apache/raft/examples/arithmetic/ArithmeticStateMachine.java ---------------------------------------------------------------------- diff --git a/raft-examples/src/main/java/org/apache/raft/examples/arithmetic/ArithmeticStateMachine.java b/raft-examples/src/main/java/org/apache/raft/examples/arithmetic/ArithmeticStateMachine.java index 91776eb..53b6122 100644 --- a/raft-examples/src/main/java/org/apache/raft/examples/arithmetic/ArithmeticStateMachine.java +++ b/raft-examples/src/main/java/org/apache/raft/examples/arithmetic/ArithmeticStateMachine.java @@ -172,7 +172,7 @@ public class ArithmeticStateMachine extends BaseStateMachine { } private void updateLatestTermIndex(long term, long index) { - final TermIndex newTI = new TermIndex(term, index); + final TermIndex newTI = TermIndex.newTermIndex(term, index); final TermIndex oldTI = latestTermIndex.getAndSet(newTI); if (oldTI != null) { Preconditions.checkArgument(newTI.compareTo(oldTI) >= 0); http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/59460582/raft-server/src/main/java/org/apache/raft/server/impl/ServerProtoUtils.java ---------------------------------------------------------------------- diff --git a/raft-server/src/main/java/org/apache/raft/server/impl/ServerProtoUtils.java b/raft-server/src/main/java/org/apache/raft/server/impl/ServerProtoUtils.java index 4594666..e30b979 100644 --- a/raft-server/src/main/java/org/apache/raft/server/impl/ServerProtoUtils.java +++ b/raft-server/src/main/java/org/apache/raft/server/impl/ServerProtoUtils.java @@ -29,9 +29,10 @@ import java.util.stream.Collectors; import static org.apache.raft.server.impl.RaftServerConstants.DEFAULT_SEQNUM; import static org.apache.raft.shaded.proto.RaftProtos.AppendEntriesReplyProto.AppendResult.SUCCESS; +/** Server proto utilities for internal use. */ public class ServerProtoUtils { public static TermIndex toTermIndex(TermIndexProto p) { - return p == null? null: new TermIndex(p.getTerm(), p.getIndex()); + return p == null? null: TermIndex.newTermIndex(p.getTerm(), p.getIndex()); } public static TermIndexProto toTermIndexProto(TermIndex ti) { @@ -43,7 +44,7 @@ public class ServerProtoUtils { public static TermIndex toTermIndex(LogEntryProto entry) { return entry == null ? null : - new TermIndex(entry.getTerm(), entry.getIndex()); + TermIndex.newTermIndex(entry.getTerm(), entry.getIndex()); } public static String toString(LogEntryProto... entries) { http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/59460582/raft-server/src/main/java/org/apache/raft/server/impl/ServerUtils.java ---------------------------------------------------------------------- diff --git a/raft-server/src/main/java/org/apache/raft/server/impl/ServerUtils.java b/raft-server/src/main/java/org/apache/raft/server/impl/ServerUtils.java new file mode 100644 index 0000000..ac21386 --- /dev/null +++ b/raft-server/src/main/java/org/apache/raft/server/impl/ServerUtils.java @@ -0,0 +1,81 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.raft.server.impl; + +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.raft.server.protocol.TermIndex; + +/** Server utilities for internal use. */ +public class ServerUtils { + public static TermIndex newTermIndex(long term, long index) { + return new TermIndexImpl(term, index); + } + + private static class TermIndexImpl implements TermIndex { + private final long term; + private final long index; //log index; first index is 1. + + TermIndexImpl(long term, long logIndex) { + this.term = term; + this.index = logIndex; + } + + @Override + public long getTerm() { + return term; + } + + @Override + public long getIndex() { + return index; + } + + @Override + public int compareTo(TermIndex that) { + final int d = Long.compare(this.getTerm(), that.getTerm()); + return d != 0 ? d : Long.compare(this.getIndex(), that.getIndex()); + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } else if (obj == null || !(obj instanceof TermIndexImpl)) { + return false; + } + + final TermIndexImpl that = (TermIndexImpl) obj; + return this.getTerm() == that.getTerm() + && this.getIndex() == that.getIndex(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(term).append(index).hashCode(); + } + + private static String toString(long n) { + return n < 0 ? "~" : "" + n; + } + + @Override + public String toString() { + return "(t:" + toString(term) + ", i:" + toString(index) + ")"; + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/59460582/raft-server/src/main/java/org/apache/raft/server/protocol/TermIndex.java ---------------------------------------------------------------------- diff --git a/raft-server/src/main/java/org/apache/raft/server/protocol/TermIndex.java b/raft-server/src/main/java/org/apache/raft/server/protocol/TermIndex.java index 4bf9d71..df401d6 100644 --- a/raft-server/src/main/java/org/apache/raft/server/protocol/TermIndex.java +++ b/raft-server/src/main/java/org/apache/raft/server/protocol/TermIndex.java @@ -17,56 +17,20 @@ */ package org.apache.raft.server.protocol; -import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.raft.server.impl.ServerUtils; -public class TermIndex implements Comparable<TermIndex> { - private final long term; - private final long index; //log index; first index is 1. +/** The term and the log index defined in the Raft consensus algorithm. */ +public interface TermIndex extends Comparable<TermIndex> { + /** @return the term. */ + long getTerm(); - public TermIndex(long term, long logIndex) { - this.term = term; - this.index = logIndex; - } - - public TermIndex(TermIndex other) { - this(other.getTerm(), other.getIndex()); - } - - public long getTerm() { - return term; - } - - public long getIndex() { - return index; - } + /** @return the index. */ + long getIndex(); - @Override - public int compareTo(TermIndex that) { - final int diff = Long.compare(this.term, that.term); - return diff != 0 ? diff : Long.compare(this.index, that.index); - } - - @Override - public boolean equals(Object o) { - if (o instanceof TermIndex) { - final TermIndex ti = (TermIndex) o; - return this == ti || - (this.term == ti.getTerm() && this.index == ti.getIndex()); - } - return false; + /** Create a new {@link TermIndex} instance. */ + static TermIndex newTermIndex(long term, long index) { + return ServerUtils.newTermIndex(term, index); } +} - @Override - public int hashCode() { - return new HashCodeBuilder().append(term).append(index).hashCode(); - } - private static String toString(long n) { - return n < 0 ? "~" : "" + n; - } - - @Override - public String toString() { - return "(t:" + toString(term) + ", i:" + toString(index) + ")"; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/59460582/raft-server/src/main/java/org/apache/raft/server/storage/RaftLog.java ---------------------------------------------------------------------- diff --git a/raft-server/src/main/java/org/apache/raft/server/storage/RaftLog.java b/raft-server/src/main/java/org/apache/raft/server/storage/RaftLog.java index acd44b0..de79911 100644 --- a/raft-server/src/main/java/org/apache/raft/server/storage/RaftLog.java +++ b/raft-server/src/main/java/org/apache/raft/server/storage/RaftLog.java @@ -101,8 +101,7 @@ public abstract class RaftLog implements Closeable { return false; } LogEntryProto entry = get(ti.getIndex()); - TermIndex local = entry == null ? null : - new TermIndex(entry.getTerm(), entry.getIndex()); + TermIndex local = ServerProtoUtils.toTermIndex(entry); return ti.equals(local); } http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/59460582/raft-server/src/main/java/org/apache/raft/statemachine/SimpleStateMachineStorage.java ---------------------------------------------------------------------- diff --git a/raft-server/src/main/java/org/apache/raft/statemachine/SimpleStateMachineStorage.java b/raft-server/src/main/java/org/apache/raft/statemachine/SimpleStateMachineStorage.java index bedb5b0..c317eb8 100644 --- a/raft-server/src/main/java/org/apache/raft/statemachine/SimpleStateMachineStorage.java +++ b/raft-server/src/main/java/org/apache/raft/statemachine/SimpleStateMachineStorage.java @@ -89,7 +89,7 @@ public class SimpleStateMachineStorage implements StateMachineStorage { } final long term = Long.parseLong(m.group(1)); final long index = Long.parseLong(m.group(2)); - return new TermIndex(term, index); + return TermIndex.newTermIndex(term, index); } protected static String getTmpSnapshotFileName(long term, long endIndex) { http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/59460582/raft-server/src/main/java/org/apache/raft/statemachine/SnapshotInfoImpl.java ---------------------------------------------------------------------- diff --git a/raft-server/src/main/java/org/apache/raft/statemachine/SnapshotInfoImpl.java b/raft-server/src/main/java/org/apache/raft/statemachine/SnapshotInfoImpl.java index 670bfc7..1929614 100644 --- a/raft-server/src/main/java/org/apache/raft/statemachine/SnapshotInfoImpl.java +++ b/raft-server/src/main/java/org/apache/raft/statemachine/SnapshotInfoImpl.java @@ -33,7 +33,7 @@ public class SnapshotInfoImpl implements SnapshotInfo { List<FileInfo> files, long term, long index) { this.raftConfiguration = raftConfiguration; this.files = files; - this.termIndex = new TermIndex(term, index); + this.termIndex = TermIndex.newTermIndex(term, index); } @Override http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/59460582/raft-server/src/test/java/org/apache/raft/statemachine/SimpleStateMachine4Testing.java ---------------------------------------------------------------------- diff --git a/raft-server/src/test/java/org/apache/raft/statemachine/SimpleStateMachine4Testing.java b/raft-server/src/test/java/org/apache/raft/statemachine/SimpleStateMachine4Testing.java index d11bfd4..0709d22 100644 --- a/raft-server/src/test/java/org/apache/raft/statemachine/SimpleStateMachine4Testing.java +++ b/raft-server/src/test/java/org/apache/raft/statemachine/SimpleStateMachine4Testing.java @@ -27,6 +27,7 @@ import org.apache.raft.protocol.RaftClientRequest; import org.apache.raft.server.impl.RaftServerConstants; import org.apache.raft.server.impl.RaftServerImpl; import org.apache.raft.server.impl.RaftServerTestUtil; +import org.apache.raft.server.impl.ServerProtoUtils; import org.apache.raft.server.protocol.TermIndex; import org.apache.raft.server.storage.LogInputStream; import org.apache.raft.server.storage.LogOutputStream; @@ -127,8 +128,9 @@ public class SimpleStateMachine4Testing extends BaseStateMachine { @Override public CompletableFuture<Message> applyTransaction(TransactionContext trx) { LogEntryProto entry = trx.getLogEntry().get(); + Preconditions.checkNotNull(entry); list.add(entry); - termIndexTracker.update(new TermIndex(entry.getTerm(), entry.getIndex())); + termIndexTracker.update(ServerProtoUtils.toTermIndex(entry)); return CompletableFuture.completedFuture( new SimpleMessage(entry.getIndex() + " OK")); } @@ -197,8 +199,7 @@ public class SimpleStateMachine4Testing extends BaseStateMachine { LogEntryProto entry; while ((entry = in.nextEntry()) != null) { list.add(entry); - termIndexTracker.update( - new TermIndex(entry.getTerm(), entry.getIndex())); + termIndexTracker.update(ServerProtoUtils.toTermIndex(entry)); } } Preconditions.checkState( http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/59460582/raft-server/src/test/java/org/apache/raft/statemachine/TermIndexTracker.java ---------------------------------------------------------------------- diff --git a/raft-server/src/test/java/org/apache/raft/statemachine/TermIndexTracker.java b/raft-server/src/test/java/org/apache/raft/statemachine/TermIndexTracker.java index fa9c130..b08fe11 100644 --- a/raft-server/src/test/java/org/apache/raft/statemachine/TermIndexTracker.java +++ b/raft-server/src/test/java/org/apache/raft/statemachine/TermIndexTracker.java @@ -28,7 +28,7 @@ import static org.apache.raft.server.impl.RaftServerConstants.INVALID_LOG_INDEX; */ class TermIndexTracker { static final TermIndex INIT_TERMINDEX = - new TermIndex(INVALID_LOG_INDEX, INVALID_LOG_INDEX); + TermIndex.newTermIndex(INVALID_LOG_INDEX, INVALID_LOG_INDEX); private TermIndex current = INIT_TERMINDEX;
