Repository: incubator-ratis
Updated Branches:
  refs/heads/master ca1c7dfd1 -> ca1106caf


RATIS-266. Log Exception thrown during applyTransaction & 
writeStateMachineData. Contributed by Mukul Kumar Singh.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ratis/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ratis/commit/ca1106ca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ratis/tree/ca1106ca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ratis/diff/ca1106ca

Branch: refs/heads/master
Commit: ca1106caf8f48daffba2f2f2bac2409ab64cabff
Parents: ca1c7df
Author: Lokesh Jain <[email protected]>
Authored: Mon Jul 9 14:44:19 2018 +0530
Committer: Lokesh Jain <[email protected]>
Committed: Mon Jul 9 14:44:19 2018 +0530

----------------------------------------------------------------------
 .../org/apache/ratis/server/impl/RaftServerImpl.java  | 14 ++++++++++----
 .../apache/ratis/server/storage/RaftLogWorker.java    | 11 +++++++++--
 2 files changed, 19 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/ca1106ca/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
----------------------------------------------------------------------
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
index 5032e88..c825033 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/impl/RaftServerImpl.java
@@ -1057,10 +1057,16 @@ public class RaftServerImpl implements 
RaftServerProtocol, RaftServerAsynchronou
       // Let the StateMachine inject logic for committed transactions in 
sequential order.
       trx = stateMachine.applyTransactionSerial(trx);
 
-      // TODO: This step can be parallelized
-      CompletableFuture<Message> stateMachineFuture =
-          stateMachine.applyTransaction(trx);
-      return replyPendingRequest(next, stateMachineFuture);
+      try {
+        // TODO: This step can be parallelized
+        CompletableFuture<Message> stateMachineFuture =
+            stateMachine.applyTransaction(trx);
+        return replyPendingRequest(next, stateMachineFuture);
+      } catch (Throwable e) {
+        LOG.error("{}: applyTransaction failed for index:{} proto:{}", getId(),
+            next.getIndex(), ServerProtoUtils.toString(next), e.getMessage());
+        throw e;
+      }
     }
     return null;
   }

http://git-wip-us.apache.org/repos/asf/incubator-ratis/blob/ca1106ca/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLogWorker.java
----------------------------------------------------------------------
diff --git 
a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLogWorker.java 
b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLogWorker.java
index eaf0459..64f5356 100644
--- 
a/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLogWorker.java
+++ 
b/ratis-server/src/main/java/org/apache/ratis/server/storage/RaftLogWorker.java
@@ -277,8 +277,15 @@ class RaftLogWorker implements Runnable {
       if (this.entry == entry || stateMachine == null) {
         this.stateMachineFuture = null;
       } else {
-        // this.entry != entry iff the entry has state machine data
-        this.stateMachineFuture = stateMachine.writeStateMachineData(entry);
+        try {
+          // this.entry != entry iff the entry has state machine data
+          this.stateMachineFuture = stateMachine.writeStateMachineData(entry);
+        } catch (Throwable e) {
+          LOG.error("{}: writeStateMachineData failed for index:{} proto:{}",
+              raftServer.getId() ,entry.getIndex(),
+              ServerProtoUtils.toString(entry), e.getMessage());
+          throw e;
+        }
       }
       this.combined = stateMachineFuture == null? super.getFuture()
           : super.getFuture().thenCombine(stateMachineFuture, (index, 
stateMachineResult) -> index);

Reply via email to