bkc.openLedgerNoRecovery(ledgerId, DigestType.fromApiDigestType(mlConfig.getDigestType()), mlConfig.getPassword()); fail("ledger should have deleted due to update-cursor failure");
public ManagedLedgerImpl(ManagedLedgerFactoryImpl factory, BookKeeper bookKeeper, MetaStore store, ManagedLedgerConfig config, OrderedScheduler scheduledExecutor, OrderedExecutor orderedExecutor, final String name) { this.factory = factory; this.bookKeeper = bookKeeper; this.config = config; this.store = store; this.name = name; this.digestType = BookKeeper.DigestType.fromApiDigestType(config.getDigestType()); this.scheduledExecutor = scheduledExecutor; this.executor = orderedExecutor; TOTAL_SIZE_UPDATER.set(this, 0); NUMBER_OF_ENTRIES_UPDATER.set(this, 0); ENTRIES_ADDED_COUNTER_UPDATER.set(this, 0); STATE_UPDATER.set(this, State.None); this.ledgersStat = null; this.mbean = new ManagedLedgerMBeanImpl(this); this.entryCache = factory.getEntryCacheManager().getEntryCache(this); this.waitingCursors = Queues.newConcurrentLinkedQueue(); this.uninitializedCursors = Maps.newHashMap(); this.updateCursorRateLimit = RateLimiter.create(1); this.clock = config.getClock(); // Get the next rollover time. Add a random value upto 5% to avoid rollover multiple ledgers at the same time this.maximumRolloverTimeMs = (long) (config.getMaximumRolloverTimeMs() * (1 + random.nextDouble() * 5 / 100.0)); }
@Override public CompletableFuture<ReadHandle> execute() { return getProgrammedFailure().thenCompose( (res) -> { if (!validate()) { return FutureUtils.exception(new BKException.BKNoSuchLedgerExistsException()); } PulsarMockLedgerHandle lh = ledgers.get(ledgerId); if (lh == null) { return FutureUtils.exception(new BKException.BKNoSuchLedgerExistsException()); } else if (lh.digest != DigestType.fromApiDigestType(digestType)) { return FutureUtils.exception(new BKException.BKDigestMatchException()); } else if (!Arrays.equals(lh.passwd, password)) { return FutureUtils.exception(new BKException.BKUnauthorizedAccessException()); } else { return FutureUtils.value(new PulsarMockReadHandle(PulsarMockBookKeeper.this, ledgerId, lh.getLedgerMetadata(), lh.entries)); } }); } };
digestType = fromApiDigestType(metadata.getDigestType()); } else { digestType = suggestedDigestType; digestType = fromApiDigestType(metadata.getDigestType()); } else { passwd = this.passwd; if (suggestedDigestType != fromApiDigestType(metadata.getDigestType()) && !enableDigestAutodetection) { LOG.error("Provided digest does not match that in metadata"); openComplete(BKException.Code.DigestMatchException, null);
private void open(OpenCallback cb) { final int validateRc = validate(); if (Code.OK != validateRc) { cb.openComplete(validateRc, null, null); return; } LedgerOpenOp op = new LedgerOpenOp(bk, bk.getClientCtx().getClientStats(), ledgerId, fromApiDigestType(digestType), password, cb, null); ReentrantReadWriteLock closeLock = bk.getCloseLock(); closeLock.readLock().lock(); try { if (bk.isClosed()) { cb.openComplete(BKException.Code.ClientClosedException, null, null); return; } if (recovery) { op.initiate(); } else { op.initiateWithoutRecovery(); } } finally { closeLock.readLock().unlock(); } } }
private void create(CreateCallback cb) { if (!validate()) { cb.createComplete(BKException.Code.IncorrectParameterException, null, null); return; } LedgerCreateOp op = new LedgerCreateOp(parent.bk, parent.builderEnsembleSize, parent.builderWriteQuorumSize, parent.builderAckQuorumSize, DigestType.fromApiDigestType(parent.builderDigestType), parent.builderPassword, cb, null, parent.builderCustomMetadata, parent.builderWriteFlags, parent.bk.getClientCtx().getClientStats()); ReentrantReadWriteLock closeLock = parent.bk.getCloseLock(); closeLock.readLock().lock(); try { if (parent.bk.isClosed()) { cb.createComplete(BKException.Code.ClientClosedException, null, null); return; } op.initiateAdv(builderLedgerId == null ? -1L : builderLedgerId); } finally { closeLock.readLock().unlock(); } } }
public ManagedLedgerImpl(ManagedLedgerFactoryImpl factory, BookKeeper bookKeeper, MetaStore store, ManagedLedgerConfig config, OrderedScheduler scheduledExecutor, OrderedExecutor orderedExecutor, final String name) { this.factory = factory; this.bookKeeper = bookKeeper; this.config = config; this.store = store; this.name = name; this.digestType = BookKeeper.DigestType.fromApiDigestType(config.getDigestType()); this.scheduledExecutor = scheduledExecutor; this.executor = orderedExecutor; TOTAL_SIZE_UPDATER.set(this, 0); NUMBER_OF_ENTRIES_UPDATER.set(this, 0); ENTRIES_ADDED_COUNTER_UPDATER.set(this, 0); STATE_UPDATER.set(this, State.None); this.ledgersStat = null; this.mbean = new ManagedLedgerMBeanImpl(this); this.entryCache = factory.getEntryCacheManager().getEntryCache(this); this.waitingCursors = Queues.newConcurrentLinkedQueue(); this.uninitializedCursors = Maps.newHashMap(); this.updateCursorRateLimit = RateLimiter.create(1); this.clock = config.getClock(); // Get the next rollover time. Add a random value upto 5% to avoid rollover multiple ledgers at the same time this.maximumRolloverTimeMs = (long) (config.getMaximumRolloverTimeMs() * (1 + random.nextDouble() * 5 / 100.0)); }
private void create(CreateCallback cb) { if (!validate()) { cb.createComplete(BKException.Code.IncorrectParameterException, null, null); return; } LedgerCreateOp op = new LedgerCreateOp(bk, builderEnsembleSize, builderWriteQuorumSize, builderAckQuorumSize, DigestType.fromApiDigestType(builderDigestType), builderPassword, cb, null, builderCustomMetadata, builderWriteFlags, bk.getClientCtx().getClientStats()); ReentrantReadWriteLock closeLock = bk.getCloseLock(); closeLock.readLock().lock(); try { if (bk.isClosed()) { cb.createComplete(BKException.Code.ClientClosedException, null, null); return; } op.initiate(); } finally { closeLock.readLock().unlock(); } } }
ManagedCursorImpl(BookKeeper bookkeeper, ManagedLedgerConfig config, ManagedLedgerImpl ledger, String cursorName) { this.bookkeeper = bookkeeper; this.config = config; this.ledger = ledger; this.name = cursorName; this.digestType = BookKeeper.DigestType.fromApiDigestType(config.getDigestType()); STATE_UPDATER.set(this, State.Uninitialized); PENDING_MARK_DELETED_SUBMITTED_COUNT_UPDATER.set(this, 0); PENDING_READ_OPS_UPDATER.set(this, 0); RESET_CURSOR_IN_PROGRESS_UPDATER.set(this, FALSE); WAITING_READ_OP_UPDATER.set(this, null); this.clock = config.getClock(); this.lastActive = this.clock.millis(); this.lastLedgerSwitchTimestamp = this.clock.millis(); if (config.getThrottleMarkDelete() > 0.0) { markDeleteLimiter = RateLimiter.create(config.getThrottleMarkDelete()); } else { // Disable mark-delete rate limiter markDeleteLimiter = null; } }
@NotNull private CompletableFuture<LedgerHandle> createLedger() { final CompletableFuture<LedgerHandle> future = new CompletableFuture<>(); bookKeeper.asyncCreateLedger( config.getManagedLedgerDefaultEnsembleSize(), config.getManagedLedgerDefaultWriteQuorum(), config.getManagedLedgerDefaultAckQuorum(), BookKeeper.DigestType.fromApiDigestType(config.getManagedLedgerDigestType()), LedgerPassword, (rc, handle, ctx) -> { if (rc != BKException.Code.OK) { future.completeExceptionally(bkException("Failed to create ledger", rc, -1, -1)); } else { future.complete(handle); } }, null, Collections.emptyMap() ); return future; }
@NotNull private CompletableFuture<LedgerHandle> openLedger(Long ledgerId) { final CompletableFuture<LedgerHandle> future = new CompletableFuture<>(); bookKeeper.asyncOpenLedger( ledgerId, BookKeeper.DigestType.fromApiDigestType(config.getManagedLedgerDigestType()), LedgerPassword, (rc, handle, ctx) -> { if (rc != BKException.Code.OK) { future.completeExceptionally(bkException("Failed to open ledger", rc, ledgerId, -1)); } else { future.complete(handle); } }, null ); return future; }
public ManagedLedgerOfflineBacklog(DigestType digestType, byte[] password, String brokerName, boolean accurate) { this.digestType = BookKeeper.DigestType.fromApiDigestType(digestType); this.password = password; this.accurate = accurate; this.brokerName = brokerName; }
ManagedCursorImpl(BookKeeper bookkeeper, ManagedLedgerConfig config, ManagedLedgerImpl ledger, String cursorName) { this.bookkeeper = bookkeeper; this.config = config; this.ledger = ledger; this.name = cursorName; this.digestType = BookKeeper.DigestType.fromApiDigestType(config.getDigestType()); STATE_UPDATER.set(this, State.Uninitialized); PENDING_MARK_DELETED_SUBMITTED_COUNT_UPDATER.set(this, 0); PENDING_READ_OPS_UPDATER.set(this, 0); RESET_CURSOR_IN_PROGRESS_UPDATER.set(this, FALSE); WAITING_READ_OP_UPDATER.set(this, null); this.clock = config.getClock(); this.lastActive = this.clock.millis(); this.lastLedgerSwitchTimestamp = this.clock.millis(); if (config.getThrottleMarkDelete() > 0.0) { markDeleteLimiter = RateLimiter.create(config.getThrottleMarkDelete()); } else { // Disable mark-delete rate limiter markDeleteLimiter = null; } }
public ManagedLedgerOfflineBacklog(DigestType digestType, byte[] password, String brokerName, boolean accurate) { this.digestType = BookKeeper.DigestType.fromApiDigestType(digestType); this.password = password; this.accurate = accurate; this.brokerName = brokerName; }