You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ratis.apache.org by sz...@apache.org on 2018/09/27 23:17:40 UTC
incubator-ratis git commit: RATIS-304.
StateMachine#readStateMachineData should return SMLogEntryProto. Contributed
by Lokesh Jain
Repository: incubator-ratis
Updated Branches:
refs/heads/master 021ee857f -> 9d65b502c
RATIS-304. StateMachine#readStateMachineData should return SMLogEntryProto. Contributed by Lokesh Jain
Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/9d65b502
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/9d65b502
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/9d65b502
Branch: refs/heads/master
Commit: 9d65b502c5b48c8fff8debe5d65cedd10740f973
Parents: 021ee85
Author: Tsz Wo Nicholas Sze <sz...@apache.org>
Authored: Thu Sep 27 16:16:49 2018 -0700
Committer: Tsz Wo Nicholas Sze <sz...@apache.org>
Committed: Thu Sep 27 16:16:49 2018 -0700
----------------------------------------------------------------------
.../main/java/org/apache/ratis/util/ProtoUtils.java | 13 +++++++++++++
.../java/org/apache/ratis/server/storage/RaftLog.java | 7 ++++---
.../org/apache/ratis/statemachine/StateMachine.java | 3 ++-
.../ratis/statemachine/SimpleStateMachine4Testing.java | 4 ++--
4 files changed, 21 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/9d65b502/ratis-common/src/main/java/org/apache/ratis/util/ProtoUtils.java
----------------------------------------------------------------------
diff --git a/ratis-common/src/main/java/org/apache/ratis/util/ProtoUtils.java b/ratis-common/src/main/java/org/apache/ratis/util/ProtoUtils.java
index d1ef2e0..2b72397 100644
--- a/ratis-common/src/main/java/org/apache/ratis/util/ProtoUtils.java
+++ b/ratis-common/src/main/java/org/apache/ratis/util/ProtoUtils.java
@@ -194,6 +194,19 @@ public interface ProtoUtils {
.build();
}
+ /**
+ * Return a new log entry based on the input log entry with stateMachineData added.
+ * @param stateMachineData - state machine data to be added
+ * @param entry - log entry to which stateMachineData needs to be added
+ * @return LogEntryProto with stateMachineData added
+ */
+ static LogEntryProto addStateMachineData(ByteString stateMachineData, LogEntryProto entry) {
+ final SMLogEntryProto smLogEntryProto = SMLogEntryProto.newBuilder(entry.getSmLogEntry())
+ .setStateMachineData(stateMachineData)
+ .build();
+ return LogEntryProto.newBuilder(entry).setSmLogEntry(smLogEntryProto).build();
+ }
+
static long getSerializedSize(LogEntryProto entry) {
if (entry.getLogEntryBodyCase() != LogEntryBodyCase.SMLOGENTRY) {
return entry.getSerializedSize();
http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/9d65b502/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLog.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLog.java b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLog.java
index ff38879..2adef40 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLog.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLog.java
@@ -27,6 +27,7 @@ import org.apache.ratis.server.impl.ServerProtoUtils;
import org.apache.ratis.server.protocol.TermIndex;
import org.apache.ratis.proto.RaftProtos.LogEntryProto;
import org.apache.ratis.statemachine.TransactionContext;
+import org.apache.ratis.thirdparty.com.google.protobuf.ByteString;
import org.apache.ratis.util.AutoCloseableLock;
import org.apache.ratis.util.JavaUtils;
import org.apache.ratis.util.Preconditions;
@@ -347,9 +348,9 @@ public abstract class RaftLog implements Closeable {
*/
public class EntryWithData {
private LogEntryProto logEntry;
- private CompletableFuture<LogEntryProto> future;
+ private CompletableFuture<ByteString> future;
- EntryWithData(LogEntryProto logEntry, CompletableFuture<LogEntryProto> future) {
+ EntryWithData(LogEntryProto logEntry, CompletableFuture<ByteString> future) {
this.logEntry = logEntry;
this.future = future;
}
@@ -365,7 +366,7 @@ public abstract class RaftLog implements Closeable {
}
try {
- entryProto = future.join();
+ entryProto = future.thenApply(data -> ProtoUtils.addStateMachineData(data, logEntry)).join();
} catch (Throwable t) {
final String err = selfId + ": Failed readStateMachineData for " +
ServerProtoUtils.toLogEntryString(logEntry);
http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/9d65b502/ratis-server/src/main/java/org/apache/ratis/statemachine/StateMachine.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/main/java/org/apache/ratis/statemachine/StateMachine.java b/ratis-server/src/main/java/org/apache/ratis/statemachine/StateMachine.java
index 6c8b2df..900db83 100644
--- a/ratis-server/src/main/java/org/apache/ratis/statemachine/StateMachine.java
+++ b/ratis-server/src/main/java/org/apache/ratis/statemachine/StateMachine.java
@@ -28,6 +28,7 @@ import org.apache.ratis.server.protocol.TermIndex;
import org.apache.ratis.server.storage.RaftStorage;
import org.apache.ratis.proto.RaftProtos.RoleInfoProto;
import org.apache.ratis.proto.RaftProtos.LogEntryProto;
+import org.apache.ratis.thirdparty.com.google.protobuf.ByteString;
import org.apache.ratis.util.LifeCycle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -161,7 +162,7 @@ public interface StateMachine extends Closeable {
* @return a future for the read task if the state machine data should be read
* otherwise, return null.
*/
- default CompletableFuture<LogEntryProto> readStateMachineData(LogEntryProto entry) {
+ default CompletableFuture<ByteString> readStateMachineData(LogEntryProto entry) {
return null;
}
http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/9d65b502/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java
----------------------------------------------------------------------
diff --git a/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java b/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java
index cafd98d..6285701 100644
--- a/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java
+++ b/ratis-server/src/test/java/org/apache/ratis/statemachine/SimpleStateMachine4Testing.java
@@ -285,8 +285,8 @@ public class SimpleStateMachine4Testing extends BaseStateMachine {
}
@Override
- public CompletableFuture<LogEntryProto> readStateMachineData(LogEntryProto entry) {
- CompletableFuture<LogEntryProto> f = new CompletableFuture<>();
+ public CompletableFuture<ByteString> readStateMachineData(LogEntryProto entry) {
+ CompletableFuture<ByteString> f = new CompletableFuture<>();
if (blockAppend) {
try {
blockingSemaphore.acquire();