This is an automated email from the ASF dual-hosted git repository.
szetszwo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-ratis.git
The following commit(s) were added to refs/heads/master by this push:
new d6d58d0 RATIS-603. Add a method to StateMachine for printing
StateMachineLogEntryProto. Contributed by Mukul Kumar Singh
d6d58d0 is described below
commit d6d58d0f52b66c10c364ff1115fe252bd36acf62
Author: Tsz Wo Nicholas Sze <[email protected]>
AuthorDate: Thu Oct 24 10:54:36 2019 -0700
RATIS-603. Add a method to StateMachine for printing
StateMachineLogEntryProto. Contributed by Mukul Kumar Singh
---
.../apache/ratis/server/impl/ServerProtoUtils.java | 19 ++++++++++++++++---
.../java/org/apache/ratis/server/raftlog/RaftLog.java | 14 +++++++++-----
.../server/raftlog/segmented/SegmentedRaftLog.java | 5 +++++
.../raftlog/segmented/SegmentedRaftLogWorker.java | 4 ++--
.../org/apache/ratis/statemachine/StateMachine.java | 10 ++++++++++
5 files changed, 42 insertions(+), 10 deletions(-)
diff --git
a/ratis-server/src/main/java/org/apache/ratis/server/impl/ServerProtoUtils.java
b/ratis-server/src/main/java/org/apache/ratis/server/impl/ServerProtoUtils.java
index 37d2dfb..5c4494e 100644
---
a/ratis-server/src/main/java/org/apache/ratis/server/impl/ServerProtoUtils.java
+++
b/ratis-server/src/main/java/org/apache/ratis/server/impl/ServerProtoUtils.java
@@ -26,6 +26,7 @@ import org.apache.ratis.protocol.RaftGroupMemberId;
import org.apache.ratis.protocol.RaftPeer;
import org.apache.ratis.protocol.RaftPeerId;
import org.apache.ratis.server.protocol.TermIndex;
+import org.apache.ratis.statemachine.StateMachine;
import org.apache.ratis.thirdparty.com.google.protobuf.ByteString;
import org.apache.ratis.util.Preconditions;
import org.apache.ratis.util.ProtoUtils;
@@ -65,14 +66,26 @@ public interface ServerProtoUtils {
}
static String toLogEntryString(LogEntryProto entry) {
+ return toLogEntryString(entry, null);
+ }
+
+ static String toStateMachineLogEntryString(StateMachineLogEntryProto smLog,
StateMachine stateMachine) {
+ if (stateMachine != null) {
+ return stateMachine.toStateMachineLogEntryString(smLog);
+ }
+ final ByteString clientId = smLog.getClientId();
+ return (clientId.isEmpty() ? "<empty clientId>" :
ClientId.valueOf(clientId)) + ", cid=" + smLog.getCallId();
+ }
+
+
+ static String toLogEntryString(LogEntryProto entry,
+ StateMachine stateMachine) {
if (entry == null) {
return null;
}
final String s;
if (entry.hasStateMachineLogEntry()) {
- final StateMachineLogEntryProto smLog = entry.getStateMachineLogEntry();
- final ByteString clientId = smLog.getClientId();
- s = ", " + (clientId.isEmpty()? "<empty clientId>":
ClientId.valueOf(clientId)) + ", cid=" + smLog.getCallId();
+ s = ", " + toStateMachineLogEntryString(entry.getStateMachineLogEntry(),
stateMachine);
} else if (entry.hasMetadataEntry()) {
final MetadataProto metadata = entry.getMetadataEntry();
s = "(c" + metadata.getCommitIndex() + ")";
diff --git
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLog.java
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLog.java
index 13a05c5..3bf5f84 100644
--- a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLog.java
+++ b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/RaftLog.java
@@ -471,18 +471,18 @@ public abstract class RaftLog implements
RaftLogSequentialOps, Closeable {
entryProto = future.thenApply(data ->
ServerProtoUtils.addStateMachineData(data, logEntry))
.get(timeout.getDuration(), timeout.getUnit());
} catch (TimeoutException t) {
+ final String err = getName() + ": Timeout readStateMachineData for " +
toLogEntryString(logEntry);
+ LOG.error(err, t);
throw t;
} catch (Throwable t) {
- final String err = getName() + ": Failed readStateMachineData for " +
- ServerProtoUtils.toLogEntryString(logEntry);
+ final String err = getName() + ": Failed readStateMachineData for " +
toLogEntryString(logEntry);
LOG.error(err, t);
throw new RaftLogIOException(err,
JavaUtils.unwrapCompletionException(t));
}
// by this time we have already read the state machine data,
// so the log entry data should be set now
if (ServerProtoUtils.shouldReadStateMachineData(entryProto)) {
- final String err = getName() + ": State machine data not set for " +
- ServerProtoUtils.toLogEntryString(logEntry);
+ final String err = getName() + ": State machine data not set for " +
toLogEntryString(logEntry);
LOG.error(err);
throw new RaftLogIOException(err);
}
@@ -491,7 +491,11 @@ public abstract class RaftLog implements
RaftLogSequentialOps, Closeable {
@Override
public String toString() {
- return ServerProtoUtils.toLogEntryString(logEntry);
+ return toLogEntryString(logEntry);
}
}
+
+ public String toLogEntryString(LogEntryProto logEntry) {
+ return ServerProtoUtils.toLogEntryString(logEntry);
+ }
}
diff --git
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
index a8c12c8..aeec9b6 100644
---
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
+++
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java
@@ -519,4 +519,9 @@ public class SegmentedRaftLog extends RaftLog {
}
}
}
+
+ @Override
+ public String toLogEntryString(LogEntryProto logEntry) {
+ return ServerProtoUtils.toLogEntryString(logEntry, stateMachine);
+ }
}
diff --git
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogWorker.java
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogWorker.java
index d0edf95..268f6e9 100644
---
a/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogWorker.java
+++
b/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLogWorker.java
@@ -447,7 +447,7 @@ class SegmentedRaftLogWorker implements Runnable {
this.stateMachineFuture = stateMachine.writeStateMachineData(entry);
} catch (Throwable e) {
LOG.error(name + ": writeStateMachineData failed for index " +
entry.getIndex()
- + ", entry=" + ServerProtoUtils.toLogEntryString(entry), e);
+ + ", entry=" + ServerProtoUtils.toLogEntryString(entry,
stateMachine), e);
throw e;
}
}
@@ -502,7 +502,7 @@ class SegmentedRaftLogWorker implements Runnable {
@Override
public String toString() {
- return super.toString() + ": " +
ServerProtoUtils.toLogEntryString(entry);
+ return super.toString() + ": " +
ServerProtoUtils.toLogEntryString(entry, stateMachine);
}
}
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 ee78014..3a642f0 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
@@ -17,6 +17,7 @@
*/
package org.apache.ratis.statemachine;
+import org.apache.ratis.proto.RaftProtos;
import org.apache.ratis.protocol.Message;
import org.apache.ratis.protocol.RaftClientRequest;
import org.apache.ratis.protocol.RaftGroupId;
@@ -24,6 +25,7 @@ import org.apache.ratis.protocol.RaftGroupMemberId;
import org.apache.ratis.protocol.RaftPeerId;
import org.apache.ratis.server.RaftServer;
import org.apache.ratis.server.RaftServerConfigKeys;
+import org.apache.ratis.server.impl.ServerProtoUtils;
import org.apache.ratis.server.protocol.TermIndex;
import org.apache.ratis.server.storage.RaftStorage;
import org.apache.ratis.proto.RaftProtos.RoleInfoProto;
@@ -293,4 +295,12 @@ public interface StateMachine extends Closeable {
default void notifyGroupRemove() {
}
+ /**
+ * Converts the proto object into a useful log string to add information
about state machine data.
+ * @param proto state machine proto
+ * @return
+ */
+ default String
toStateMachineLogEntryString(RaftProtos.StateMachineLogEntryProto proto) {
+ return ServerProtoUtils.toStateMachineLogEntryString(proto, null);
+ }
}