private int bkQuery(BookKeeperAdmin bkAdmin, Set<BookieSocketAddress> bookieAddrs) throws InterruptedException, BKException { SortedMap<Long, LedgerMetadata> ledgersContainBookies = bkAdmin.getLedgersContainBookies(bookieAddrs); System.err.println("NOTE: Bookies in inspection list are marked with '*'."); for (Map.Entry<Long, LedgerMetadata> ledger : ledgersContainBookies.entrySet()) { System.out.println("ledger " + ledger.getKey() + " : " + ledger.getValue().getState()); Map<Long, Integer> numBookiesToReplacePerEnsemble = inspectLedger(ledger.getValue(), bookieAddrs); System.out.print("summary: ["); for (Map.Entry<Long, Integer> entry : numBookiesToReplacePerEnsemble.entrySet()) { System.out.print(entry.getKey() + "=" + entry.getValue() + ", "); } System.out.println("]"); System.out.println(); } System.err.println("Done"); return 0; }
if (metadata.getState() == State.IN_RECOVERY) { writer.append(String.valueOf(V1_IN_RECOVERY_ENTRY_ID)).append(FIELD_SPLITTER).append(V1_CLOSED_TAG); } else if (metadata.getState() == State.CLOSED) { writer.append(String.valueOf(metadata.getLastEntryId())) .append(FIELD_SPLITTER).append(V1_CLOSED_TAG); } else { checkArgument(metadata.getState() == State.OPEN, String.format("Unknown state %s for V1 serialization", metadata.getState()));
void handleUnrecoverableErrorDuringAdd(int rc) { if (getLedgerMetadata().getState() == LedgerMetadata.State.IN_RECOVERY) { // we should not close ledger if ledger is recovery mode // otherwise we may lose entry. errorOutPendingAdds(rc); return; } LOG.error("Closing ledger {} due to {}", ledgerId, BKException.codeLogger(rc)); asyncCloseInternal(NoopCloseCallback.instance, null, rc); }
clientCtx.getLedgerManager(), getId(), this::getVersionedLedgerMetadata, (metadata) -> metadata.getState() == LedgerMetadata.State.IN_RECOVERY, (metadata) -> { LedgerMetadataBuilder builder = LedgerMetadataBuilder.from(metadata);
clientCtx.getLedgerManager(), getId(), this::getVersionedLedgerMetadata, (metadata) -> metadata.getState() == LedgerMetadata.State.OPEN && failedBookies.entrySet().stream().anyMatch( e -> LedgerMetadataUtils.getLastEnsembleValue(metadata) } else if (metadata.getValue().getState() == LedgerMetadata.State.IN_RECOVERY) { if (LOG.isDebugEnabled()) { LOG.debug("{}[attempt:{}] Metadata marked as in-recovery during attempt to replace bookie."
public static LedgerMetadataBuilder from(LedgerMetadata other) { LedgerMetadataBuilder builder = new LedgerMetadataBuilder(); builder.metadataFormatVersion = other.getMetadataFormatVersion(); builder.ensembleSize = other.getEnsembleSize(); builder.writeQuorumSize = other.getWriteQuorumSize(); builder.ackQuorumSize = other.getAckQuorumSize(); builder.state = other.getState(); if (builder.state == State.CLOSED) { builder.lastEntryId = Optional.of(other.getLastEntryId()); builder.length = Optional.of(other.getLength()); } builder.ensembles.putAll(other.getAllEnsembles()); if (other.hasPassword()) { builder.password = Optional.of(other.getPassword()); builder.digestType = Optional.of(other.getDigestType()); } builder.ctime = other.getCtime(); /** Hack to get around fact that ctime was never versioned correctly */ builder.storeCtime = LedgerMetadataUtils.shouldStoreCtime(other); builder.customMetadata = ImmutableMap.copyOf(other.getCustomMetadata()); return builder; }
if (skipOpenLedgers && lm.getState() == LedgerMetadata.State.OPEN) { LOG.info("Skip recovering open ledger {}.", lId); try {