/* * (non-Javadoc) * * @see * org.apache.bookkeeper.client.AsyncCallback.OpenCallback#openComplete(int, * org.apache.bookkeeper.client.LedgerHandle, java.lang.Object) */ @Override public void openComplete(int rc, LedgerHandle ledger, Object ctx) { OpReadEntry opReadEntry = (OpReadEntry) ctx; if (rc != BKException.Code.OK) { opReadEntry.failed(new ManagedLedgerException(BKException.create(rc))); return; } log.debug("[{}] Successfully opened ledger {} for reading", name, ledger.getId()); internalReadFromLedger(ledger, opReadEntry); }
public void force() throws IOException { SyncCounter counter = lastCounter.get(); if (counter != null) { try { counter.block(0); if (counter.getrc() != BKException.Code.OK) { throw new IOException("Force append failed", BKException.create(counter.getrc())); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new IOException(e); } finally { lastCounter.remove(); } } }
/* * (non-Javadoc) * * @see * org.apache.bookkeeper.client.AsyncCallback.ReadCallback#readComplete(int, * org.apache.bookkeeper.client.LedgerHandle, java.util.Enumeration, * java.lang.Object) */ @Override public void readComplete( int rc, LedgerHandle lh, Enumeration<LedgerEntry> entriesEnum, Object ctx) { OpReadEntry opReadEntry = (OpReadEntry) ctx; if (rc != BKException.Code.OK) { log.warn( "[{}] read failed from ledger {} at position:{}", va(name, lh.getId(), opReadEntry.readPosition)); opReadEntry.failed(new ManagedLedgerException(BKException.create(rc))); return; } List<Entry> entries = opReadEntry.entries; while (entriesEnum.hasMoreElements()) entries.add(new EntryImpl(entriesEnum.nextElement())); long lastEntry = entries.get(entries.size() - 1).getPosition().getEntryId(); // Get the "next read position", we need to advance the position taking // care of ledgers boundaries Position nextReadPosition; if (lastEntry < lh.getLastAddConfirmed()) { nextReadPosition = new Position(lh.getId(), lastEntry + 1); } else { // Move to next ledger Long nextLedgerId = ledgers.ceilingKey(lh.getId() + 1); if (nextLedgerId == null) { // We are already in the last ledger nextReadPosition = new Position(lh.getId(), lastEntry + 1); } else { nextReadPosition = new Position(nextLedgerId, 0); } } opReadEntry.nextReadPosition = nextReadPosition; opReadEntry.succeeded(); }
/* * (non-Javadoc) * * @see * org.apache.bookkeeper.client.AsyncCallback.CreateCallback#createComplete * (int, org.apache.bookkeeper.client.LedgerHandle, java.lang.Object) */ @Override public synchronized void createComplete(int rc, LedgerHandle lh, Object ctx) { log.debug("[{}] createComplete rc={} ledger={}", va(name, rc, lh != null ? lh.getId() : -1)); if (rc != BKException.Code.OK) { state = State.ClosedLedger; log.error("[{}] Error creating ledger rc={} {}", va(name, rc, BKException.getMessage(rc))); ManagedLedgerException status = new ManagedLedgerException(BKException.create(rc)); // Empty the list of pending requests and make all of them fail while (!pendingAddEntries.isEmpty()) { pendingAddEntries.poll().failed(status); } } else { log.debug("[{}] Successfully created new ledger {}", name, lh.getId()); ledgers.put(lh.getId(), new LedgerStat(lh.getId(), 0, 0)); currentLedger = lh; currentLedgerEntries = 0; currentLedgerSize = 0; MetaStoreCallback<Void> cb = new MetaStoreCallback<Void>() { public void operationComplete(Void v, Version version) { updateLedgersIdsComplete(version); } public void operationFailed(MetaStoreException e) { log.warn("Error updating meta data with the new list of ledgers"); while (!pendingAddEntries.isEmpty()) { pendingAddEntries.poll().failed(e); } } }; store.asyncUpdateLedgerIds(name, ledgers.values(), ledgersVersion, cb); } }