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