diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/ContainerStateMachine.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/ContainerStateMachine.java index 1a87ce55e26d..a79f09b93299 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/ContainerStateMachine.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/ContainerStateMachine.java @@ -763,7 +763,8 @@ public CompletableFuture applyTransaction(TransactionContext trx) { } }, getCommandExecutor(requestProto)); future.thenApply(r -> { - if (trx.getServerRole() == RaftPeerRole.LEADER) { + if (trx.getServerRole() == RaftPeerRole.LEADER + && trx.getStateMachineContext() != null) { long startTime = (long) trx.getStateMachineContext(); metrics.incPipelineLatency(cmdType, Time.monotonicNowNanos() - startTime); @@ -811,6 +812,12 @@ public CompletableFuture applyTransaction(TransactionContext trx) { } return applyTransactionFuture; }).whenComplete((r, t) -> { + if (t != null) { + stateMachineHealthy.set(false); + LOG.error("gid {} : ApplyTransaction failed. cmd {} logIndex " + + "{} exception {}", gid, requestProto.getCmdType(), + index, t); + } applyTransactionSemaphore.release(); metrics.recordApplyTransactionCompletion( Time.monotonicNowNanos() - applyTxnStartTime);