private Object visitSecondPhaseCommand(TxInvocationContext ctx, TransactionBoundaryCommand command, boolean commit,
ExtendedStatistic duration, ExtendedStatistic counter) throws Throwable {
GlobalTransaction globalTransaction = command.getGlobalTransaction();
if (trace) {
log.tracef("Visit 2nd phase command %s. Is it local? %s. Transaction is %s", command,
ctx.isOriginLocal(), globalTransaction.globalId());
}
long start = timeService.time();
return invokeNextThenAccept(ctx, command, (rCtx, rCommand, rv) -> {
long end = timeService.time();
updateTime(duration, counter, start, end, globalTransaction, rCtx.isOriginLocal());
cacheStatisticManager.setTransactionOutcome(commit, globalTransaction, rCtx.isOriginLocal());
cacheStatisticManager.terminateTransaction(globalTransaction, true, true);
});
}