You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by ji...@apache.org on 2017/01/31 21:16:58 UTC
[13/54] [abbrv] incubator-ratis git commit: Convert TermIndex to an
interface.
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 <sz...@hortonworks.com>
Authored: Fri Jan 6 14:44:36 2017 +0800
Committer: Tsz-Wo Nicholas Sze <sz...@hortonworks.com>
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;