code: void deliverUndeliveredTxns() throws IOException {
      LOG.debug("Delivering all the undelivered txns after {}",
                lastDeliveredZxid);
      Zxid startZxid =
        new Zxid(lastDeliveredZxid.getEpoch(), lastDeliveredZxid.getXid() + 1);
      Log log = persistence.getLog();
      try (Log.LogIterator iter = log.getIterator(startZxid)) {
        while (iter.hasNext()) {
          Transaction txn = iter.next();
          if (txn.getType() == ProposalType.USER_REQUEST_VALUE) {
            // Only delivers REQUEST proposal, ignores COP.
            stateMachine.deliver(txn.getZxid(), txn.getBody(), null, null);
          }
          lastDeliveredZxid = txn.getZxid();
        }
      }
    }
docs: Delivers all the transactions in the log after last delivered zxid.
  
  @throws IOException in case of IO failures.