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);
+  }
 }

Reply via email to