Search in sources :

Example 1 with ManagedLedgerAlreadyClosedException

use of org.apache.bookkeeper.mledger.ManagedLedgerException.ManagedLedgerAlreadyClosedException in project incubator-pulsar by apache.

the class ManagedLedgerImpl method ledgerClosed.

// //////////////////////////////////////////////////////////////////////
// Private helpers
synchronized void ledgerClosed(final LedgerHandle lh) {
    final State state = STATE_UPDATER.get(this);
    if (state == State.ClosingLedger || state == State.LedgerOpened) {
        STATE_UPDATER.set(this, State.ClosedLedger);
    } else if (state == State.Closed) {
        // The managed ledger was closed during the write operation
        clearPendingAddEntries(new ManagedLedgerAlreadyClosedException("Managed ledger was already closed"));
        return;
    } else {
        // just once
        return;
    }
    long entriesInLedger = lh.getLastAddConfirmed() + 1;
    if (log.isDebugEnabled()) {
        log.debug("[{}] Ledger has been closed id={} entries={}", name, lh.getId(), entriesInLedger);
    }
    if (entriesInLedger > 0) {
        LedgerInfo info = LedgerInfo.newBuilder().setLedgerId(lh.getId()).setEntries(entriesInLedger).setSize(lh.getLength()).setTimestamp(System.currentTimeMillis()).build();
        ledgers.put(lh.getId(), info);
    } else {
        // The last ledger was empty, so we can discard it
        ledgers.remove(lh.getId());
        mbean.startDataLedgerDeleteOp();
        bookKeeper.asyncDeleteLedger(lh.getId(), (rc, ctx) -> {
            mbean.endDataLedgerDeleteOp();
            log.info("[{}] Delete complete for empty ledger {}. rc={}", name, lh.getId(), rc);
        }, null);
    }
    trimConsumedLedgersInBackground();
    if (!pendingAddEntries.isEmpty()) {
        // Need to create a new ledger to write pending entries
        if (log.isDebugEnabled()) {
            log.debug("[{}] Creating a new ledger", name);
        }
        STATE_UPDATER.set(this, State.CreatingLedger);
        this.lastLedgerCreationInitiationTimestamp = System.nanoTime();
        mbean.startDataLedgerCreateOp();
        bookKeeper.asyncCreateLedger(config.getEnsembleSize(), config.getWriteQuorumSize(), config.getAckQuorumSize(), config.getDigestType(), config.getPassword(), this, null, Collections.emptyMap());
    }
}
Also used : ManagedLedgerInfo(org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedLedgerInfo) LedgerInfo(org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedLedgerInfo.LedgerInfo) ManagedLedgerAlreadyClosedException(org.apache.bookkeeper.mledger.ManagedLedgerException.ManagedLedgerAlreadyClosedException)

Aggregations

ManagedLedgerAlreadyClosedException (org.apache.bookkeeper.mledger.ManagedLedgerException.ManagedLedgerAlreadyClosedException)1 ManagedLedgerInfo (org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedLedgerInfo)1 LedgerInfo (org.apache.bookkeeper.mledger.proto.MLDataFormats.ManagedLedgerInfo.LedgerInfo)1