private void handleReadLastConfirmedError(int rc){
  if (BKException.Code.NoSuchLedgerExistsException == rc) {
    if (bkcNoLedgerExceptionsOnReadLAC.incrementAndGet() > noLedgerExceptionOnReadLACThreshold) {
      LOG.info("{} No entries published to ledger {} yet for {} millis.",new Object[]{fullyQualifiedName,currentLH,conf.getReadAheadNoSuchLedgerExceptionOnReadLACErrorThresholdMillis()});
      bkcNoLedgerExceptionsOnReadLAC.set(0);
      if (closeCurrentLedgerHandle()) {
        next.process(BKException.Code.OK);
      }
      return;
    }
 else {
      if (LOG.isTraceEnabled()) {
        LOG.info("{} No entries published to ledger {} yet. Backoff reading ahead for {} ms.",new Object[]{fullyQualifiedName,currentLH,conf.getReadAheadWaitTime()});
      }
      schedule(ReadAheadWorker.this,conf.getReadAheadWaitTime());
      return;
    }
  }
 else   if (BKException.Code.OK != rc) {
    handleException(ReadAheadPhase.READ_LAST_CONFIRMED,rc);
    return;
  }
}

private void handleReadLastConfirmedError ( int rc ) { if ( BKException . Code . NoSuchLedgerExistsException == rc ) { if ( bkcNoLedgerExceptionsOnReadLAC . incrementAndGet ( ) > noLedgerExceptionOnReadLACThreshold ) { LOG . info ( "{} No entries published to ledger {} yet for {} millis." , new Object [ ] { fullyQualifiedName , currentLH , conf . getReadAheadNoSuchLedgerExceptionOnReadLACErrorThresholdMillis ( ) } ) ; bkcNoLedgerExceptionsOnReadLAC . set ( 0 ) ; if ( closeCurrentLedgerHandle ( ) ) { next . process ( BKException . Code . OK ) ; } return ; } else { if ( LOG . isTraceEnabled ( ) ) { LOG . info ( "{} No entries published to ledger {} yet. Backoff reading ahead for {} ms." , new Object [ ] { fullyQualifiedName , currentLH , conf . getReadAheadWaitTime ( ) } ) ; } schedule ( ReadAheadWorker . this , conf . getReadAheadWaitTime ( ) ) ; return ; } } else if ( BKException . Code . OK != rc ) { handleException ( ReadAheadPhase . READ_LAST_CONFIRMED , rc ) ; return ; } }
handle the result of reading last add confirmed .
