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;
 

Reply via email to