Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lh fix individual read deduplication and limiting #195

Open
wants to merge 95 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
66a8f73
[fix][build] Fix error "Element encoding is not allowed here" in pom.…
lhotari Nov 29, 2024
32b3ccf
[improve][client] Replace NameUtil#generateRandomName with RandomStri…
geniusjoe Nov 29, 2024
3a50255
[improve] [pip] PIP-373: Add a topic's system prop that indicates whe…
poorbarcode Nov 29, 2024
d1753ee
[fix][broker] Revert "[improve][client] Add log when can't add messag…
Technoboy- Nov 29, 2024
eb60d0a
[fix][broker]: support missing broker level fine-granted permissions …
mattisonchao Nov 29, 2024
9ed44dd
[improve] Upgrade OpenTelemetry library to 1.44.1 version (#23656)
lhotari Nov 29, 2024
429f7de
[improve][client] Reduce unshaded dependencies and shading warnings i…
lhotari Nov 29, 2024
280997e
[fix][broker] support missing tenant level fine-granted permissions (…
mattisonchao Nov 29, 2024
bf1f677
[fix][client] Fix race-condition causing doReconsumeLater to hang whe…
hanmz Nov 29, 2024
7fc88d6
[improve][client] Enhance error handling for non-exist subscription i…
Shawyeok Nov 29, 2024
4603722
[feat][broker] Implement allowBrokerOperationAsync in PulsarAuthoriza…
mattisonchao Nov 29, 2024
a61b426
Add solution to PulsarMockBookKeeper for intercepting reads
lhotari Oct 21, 2024
a2de406
Add validation to getManagedLedgerMaxReadsInFlightSizeInMB
lhotari Oct 21, 2024
29c8952
Don't divide by 0 if it can be avoided
lhotari Oct 21, 2024
cd2427d
Estimate entry size for InflightReadsLimiter by keeping stats
lhotari Oct 21, 2024
6b63b32
Limit replay messages by bytes size
lhotari Oct 21, 2024
25f1c31
Test limiting by bytes size
lhotari Oct 21, 2024
ddc9fa9
Test
lhotari Oct 21, 2024
7df7a94
Avoid exception which commonly happens
lhotari Oct 22, 2024
8f3f09c
Add debug logging to InflightReadsLimiter
lhotari Oct 22, 2024
dd4bb66
Clear the cache in the test
lhotari Oct 22, 2024
f774f43
Add logging
lhotari Oct 22, 2024
9a78b8e
Fix read limits for individual reads
lhotari Oct 22, 2024
9280cc9
Revert "Test"
lhotari Oct 22, 2024
f452ba8
Reduce timeout
lhotari Oct 22, 2024
bf54324
Apply cap for delayed messages too
lhotari Oct 23, 2024
cc3f530
Improve asyncReplayEntries
lhotari Oct 23, 2024
124bf6e
Refactor to have a single replay method
lhotari Oct 23, 2024
6a1a431
Optimize filtering deleted messages
lhotari Nov 21, 2024
e7aade5
deprecate synchronous replayEntries method
lhotari Oct 23, 2024
c4836d0
move asyncReplayEntries without sortEntries as a default method
lhotari Oct 23, 2024
5884e7b
Perform replay reads in ranges
lhotari Oct 23, 2024
83013df
Make test to fail
lhotari Oct 23, 2024
041928f
Fix disabled timeout in InflightReadsLimiter
lhotari Oct 23, 2024
63629fb
Add queuing to InflightReadsLimiter when the limit is reached
lhotari Nov 1, 2024
e14514c
revisit
lhotari Nov 1, 2024
89adfb6
Ensure that cached entry readerIndex is not tied to the original one
lhotari Nov 1, 2024
b4e4b2e
Adjust InflightReadsLimiterTest
lhotari Nov 4, 2024
f9919cc
Add timeout executor to InflightReadsLimiter
lhotari Nov 1, 2024
dae77e5
Polish
lhotari Nov 4, 2024
8466578
Fix test
lhotari Nov 4, 2024
235dc41
Instantiate ArrayList directly
lhotari Nov 4, 2024
c719306
Support caching replayed entries
lhotari Nov 4, 2024
d2d9356
Start addressing the removal issue with a removal queue
lhotari Nov 4, 2024
4b99aee
Move EntryWrapper to upper level
lhotari Nov 4, 2024
807f0c9
Move RangeCache to cache package
lhotari Nov 4, 2024
dce251f
Start adding removal queue
lhotari Nov 4, 2024
6e75ca9
Move towards adding removal queue changes
lhotari Nov 4, 2024
39d0258
More moves towards removal queue solution
lhotari Nov 4, 2024
cdc70b3
Handle removing by size in scheduled task so that blocking would be rare
lhotari Nov 4, 2024
cffa151
Remove unused code
lhotari Nov 5, 2024
3c4af56
Update RangeCacheTest with removal queue
lhotari Nov 5, 2024
0098d3a
Fix imports
lhotari Nov 5, 2024
55fe582
Add license headers
lhotari Nov 5, 2024
a7aed9d
Handle all cache evictions by the same thread
lhotari Nov 5, 2024
d1c28a7
Move RangeCacheRemovalCounters to top level
lhotari Nov 8, 2024
308afe5
Use removal queue in RangeCacheTest
lhotari Nov 8, 2024
3b5508a
Handle eviction
lhotari Nov 10, 2024
4b53193
Handle adding atomically to removal queue and cache
lhotari Nov 12, 2024
b329372
Improve javadoc
lhotari Nov 12, 2024
e0b2fc5
Use unbounded queue for removal queue since cache size is bounded by …
lhotari Nov 12, 2024
4fb16e6
Refactor eviction when cache size exceeds evictionTriggerThreshold
lhotari Nov 12, 2024
35cafd2
Start adding cacheEvictionByExpectedReadCount
lhotari Nov 12, 2024
17a44af
Add CachedEntry
lhotari Nov 12, 2024
080b985
Activate cursor when consumers disconnect and connect
lhotari Nov 12, 2024
4f7426f
disable checkCursorsToCacheEntries when eviction by read count is ena…
lhotari Nov 12, 2024
ec7022c
Always keep cursors with connected consumers in "active" state when e…
lhotari Nov 12, 2024
3e02069
Add a way to find cursors before current cursor
lhotari Nov 12, 2024
ebcec70
Pass predicate for deciding whether to cache or not
lhotari Nov 12, 2024
d56b1d6
Reduce coupling to EntryImpl
lhotari Nov 12, 2024
e934e90
Extract abstract base class to be used for Entry implementations
lhotari Nov 12, 2024
80d9541
Introduce CachedEntry for eviction by read count implementation
lhotari Nov 12, 2024
6500339
Remove generics type parameters from RangeCache since there's no need…
lhotari Nov 13, 2024
50bc822
Add TODO about the solution for handling skipping of the entries
lhotari Nov 13, 2024
09464c1
Add note of replacing the use of peek
lhotari Nov 13, 2024
bb905eb
update design
lhotari Nov 13, 2024
bbbb7c4
Evaluate entry size when it gets added
lhotari Nov 14, 2024
197d038
Fix issue in getting the entry
lhotari Nov 14, 2024
eee7522
Fix RangeCacheTest
lhotari Nov 14, 2024
ff1add7
Remove generics
lhotari Nov 14, 2024
4eae832
Add simple stash
lhotari Nov 14, 2024
d3df21c
Add note
lhotari Nov 14, 2024
b1d50ce
Fix test that expects old defaults
lhotari Nov 14, 2024
8e8cf68
Adapt test to new behavior
lhotari Nov 14, 2024
731148c
Improve removal queue
lhotari Nov 14, 2024
4ca1b7f
Fix EntryCacheManagerTest
lhotari Nov 14, 2024
952b2e1
Support configuring ManagedLedgerConfig defaults for tests
lhotari Nov 14, 2024
336b472
Fix ManagedLedgerTests
lhotari Nov 15, 2024
d2bd347
Use waitForPendingCacheEvictions in EntryCacheManagerTest
lhotari Nov 15, 2024
3470a0f
Use Double.NaN instead of Double.POSITIVE_INFINITY
lhotari Nov 15, 2024
929942a
Start adding expected read count solution
lhotari Nov 18, 2024
20b262b
Improve ManagedCursorContainerTest
lhotari Nov 18, 2024
1326dc9
Implement getNumberOfCursorsAtSamePositionOrBefore
lhotari Nov 18, 2024
c0750c3
Implement EntryReadCountHandler
lhotari Nov 19, 2024
f58ad8c
Implement decreasing read count on release
lhotari Nov 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 20 additions & 23 deletions distribution/server/src/assemble/LICENSE.bin.txt
Original file line number Diff line number Diff line change
Expand Up @@ -338,12 +338,11 @@ The Apache Software License, Version 2.0
- io.prometheus-simpleclient_tracer_otel-0.16.0.jar
- io.prometheus-simpleclient_tracer_otel_agent-0.16.0.jar
* Prometheus exporter
- io.prometheus-prometheus-metrics-config-1.3.1.jar
- io.prometheus-prometheus-metrics-exporter-common-1.3.1.jar
- io.prometheus-prometheus-metrics-exporter-httpserver-1.3.1.jar
- io.prometheus-prometheus-metrics-exposition-formats-1.3.1.jar
- io.prometheus-prometheus-metrics-model-1.3.1.jar
- io.prometheus-prometheus-metrics-shaded-protobuf-1.3.1.jar
- io.prometheus-prometheus-metrics-config-1.3.3.jar
- io.prometheus-prometheus-metrics-exporter-common-1.3.3.jar
- io.prometheus-prometheus-metrics-exporter-httpserver-1.3.3.jar
- io.prometheus-prometheus-metrics-exposition-formats-1.3.3.jar
- io.prometheus-prometheus-metrics-model-1.3.3.jar
* Jakarta Bean Validation API
- jakarta.validation-jakarta.validation-api-2.0.2.jar
- javax.validation-validation-api-1.1.0.Final.jar
Expand Down Expand Up @@ -516,21 +515,21 @@ The Apache Software License, Version 2.0
* RoaringBitmap
- org.roaringbitmap-RoaringBitmap-1.2.0.jar
* OpenTelemetry
- io.opentelemetry-opentelemetry-api-1.41.0.jar
- io.opentelemetry-opentelemetry-api-incubator-1.41.0-alpha.jar
- io.opentelemetry-opentelemetry-context-1.41.0.jar
- io.opentelemetry-opentelemetry-exporter-common-1.41.0.jar
- io.opentelemetry-opentelemetry-exporter-otlp-1.41.0.jar
- io.opentelemetry-opentelemetry-exporter-otlp-common-1.41.0.jar
- io.opentelemetry-opentelemetry-exporter-prometheus-1.41.0-alpha.jar
- io.opentelemetry-opentelemetry-exporter-sender-okhttp-1.41.0.jar
- io.opentelemetry-opentelemetry-sdk-1.41.0.jar
- io.opentelemetry-opentelemetry-sdk-common-1.41.0.jar
- io.opentelemetry-opentelemetry-sdk-extension-autoconfigure-1.41.0.jar
- io.opentelemetry-opentelemetry-sdk-extension-autoconfigure-spi-1.41.0.jar
- io.opentelemetry-opentelemetry-sdk-logs-1.41.0.jar
- io.opentelemetry-opentelemetry-sdk-metrics-1.41.0.jar
- io.opentelemetry-opentelemetry-sdk-trace-1.41.0.jar
- io.opentelemetry-opentelemetry-api-1.44.1.jar
- io.opentelemetry-opentelemetry-api-incubator-1.44.1-alpha.jar
- io.opentelemetry-opentelemetry-context-1.44.1.jar
- io.opentelemetry-opentelemetry-exporter-common-1.44.1.jar
- io.opentelemetry-opentelemetry-exporter-otlp-1.44.1.jar
- io.opentelemetry-opentelemetry-exporter-otlp-common-1.44.1.jar
- io.opentelemetry-opentelemetry-exporter-prometheus-1.44.1-alpha.jar
- io.opentelemetry-opentelemetry-exporter-sender-okhttp-1.44.1.jar
- io.opentelemetry-opentelemetry-sdk-1.44.1.jar
- io.opentelemetry-opentelemetry-sdk-common-1.44.1.jar
- io.opentelemetry-opentelemetry-sdk-extension-autoconfigure-1.44.1.jar
- io.opentelemetry-opentelemetry-sdk-extension-autoconfigure-spi-1.44.1.jar
- io.opentelemetry-opentelemetry-sdk-logs-1.44.1.jar
- io.opentelemetry-opentelemetry-sdk-metrics-1.44.1.jar
- io.opentelemetry-opentelemetry-sdk-trace-1.44.1.jar
- io.opentelemetry.instrumentation-opentelemetry-instrumentation-api-1.33.6.jar
- io.opentelemetry.instrumentation-opentelemetry-instrumentation-api-semconv-1.33.6-alpha.jar
- io.opentelemetry.instrumentation-opentelemetry-resources-1.33.6-alpha.jar
Expand Down Expand Up @@ -572,10 +571,8 @@ Protocol Buffers License
CDDL-1.1 -- ../licenses/LICENSE-CDDL-1.1.txt
* Java Annotations API
- com.sun.activation-javax.activation-1.2.0.jar
- javax.xml.bind-jaxb-api-2.3.1.jar
* Java Servlet API -- javax.servlet-javax.servlet-api-3.1.0.jar
* WebSocket Server API -- javax.websocket-javax.websocket-client-api-1.0.jar
* Java Web Service REST API -- javax.ws.rs-javax.ws.rs-api-2.1.jar
* HK2 - Dependency Injection Kernel
- org.glassfish.hk2-hk2-api-2.6.1.jar
- org.glassfish.hk2-hk2-locator-2.6.1.jar
Expand Down
9 changes: 3 additions & 6 deletions distribution/shell/src/assemble/LICENSE.bin.txt
Original file line number Diff line number Diff line change
Expand Up @@ -388,9 +388,9 @@ The Apache Software License, Version 2.0
- log4j-slf4j2-impl-2.23.1.jar
- log4j-web-2.23.1.jar
* OpenTelemetry
- opentelemetry-api-1.41.0.jar
- opentelemetry-api-incubator-1.41.0-alpha.jar
- opentelemetry-context-1.41.0.jar
- opentelemetry-api-1.44.1.jar
- opentelemetry-api-incubator-1.44.1-alpha.jar
- opentelemetry-context-1.44.1.jar

* BookKeeper
- bookkeeper-common-allocator-4.17.1.jar
Expand Down Expand Up @@ -431,11 +431,8 @@ MIT License

CDDL-1.1 -- ../licenses/LICENSE-CDDL-1.1.txt
* Java Annotations API
- javax.annotation-api-1.3.2.jar
- javax.activation-1.2.0.jar
- jaxb-api-2.3.1.jar
* WebSocket Server API -- javax.websocket-client-api-1.0.jar
* Java Web Service REST API -- javax.ws.rs-api-2.1.jar
* HK2 - Dependency Injection Kernel
- hk2-api-2.6.1.jar
- hk2-locator-2.6.1.jar
Expand Down
4 changes: 4 additions & 0 deletions jetcd-core-shaded/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@
<groupId>io.netty</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.pulsar.client.util;
package org.apache.bookkeeper.mledger;

import java.util.UUID;
import org.apache.commons.codec.digest.DigestUtils;
import io.netty.util.ReferenceCounted;

public class NameUtil {
public static String generateRandomName() {
return DigestUtils.sha1Hex(UUID.randomUUID().toString()).substring(0, 5);
}
public interface CachedEntry extends Entry, ReferenceCounted {
boolean matchesKey(Position key);
boolean canEvict();
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ public interface Entry {
/**
* @return the data
*/
@Deprecated
byte[] getData();

@Deprecated
byte[] getDataAndRelease();

/**
Expand Down Expand Up @@ -66,4 +68,8 @@ public interface Entry {
* of data reached to 0).
*/
boolean release();

default EntryReadCountHandler getReadCountHandler() {
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.bookkeeper.mledger;

public interface EntryReadCountHandler {
int getExpectedReadCount();
boolean incrementExpectedReadCount();
void markRead();
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,13 @@
package org.apache.bookkeeper.mledger;

import com.google.common.collect.Range;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.SortedSet;
import java.util.concurrent.CompletableFuture;
import java.util.function.Predicate;
import org.apache.bookkeeper.common.annotation.InterfaceAudience;
Expand Down Expand Up @@ -693,6 +696,7 @@ void asyncFindNewestMatching(FindPositionConstraint constraint, Predicate<Entry>
* @throws InterruptedException
* @throws ManagedLedgerException
*/
@Deprecated
List<Entry> replayEntries(Set<? extends Position> positions)
throws InterruptedException, ManagedLedgerException;

Expand All @@ -708,8 +712,10 @@ List<Entry> replayEntries(Set<? extends Position> positions)
* @return skipped positions
* set of positions which are already deleted/acknowledged and skipped while replaying them
*/
Set<? extends Position> asyncReplayEntries(
Set<? extends Position> positions, ReadEntriesCallback callback, Object ctx);
default Set<? extends Position> asyncReplayEntries(final Set<? extends Position> positions,
ReadEntriesCallback callback, Object ctx) {
return asyncReplayEntries(positions, callback, ctx, false);
}

/**
* Read the specified set of positions from ManagedLedger.
Expand All @@ -728,6 +734,28 @@ Set<? extends Position> asyncReplayEntries(
Set<? extends Position> asyncReplayEntries(
Set<? extends Position> positions, ReadEntriesCallback callback, Object ctx, boolean sortEntries);

/**
* Read the specified set of positions from ManagedLedger in ranges.
* This method is used to read entries in ranges to avoid reading all entries at once.
*
* @param positions
* set of positions to read
* @param callback
* callback object returning the result of each range
* @param ctx
* opaque context
* @param invokeCallbacksInOrder
* when true, the callback will be invoked in order of the positions, otherwise the callback will be
* invoked in the order of the completion of the range read.
* @return skipped positions
* set of positions which are already deleted/acknowledged and skipped while replaying them
*/
default Set<? extends Position> asyncReplayEntriesInRanges(SortedSet<? extends Position> positions,
ManagedCursorReplayReadEntriesCallback callback,
Object ctx, boolean invokeCallbacksInOrder) {
throw new UnsupportedOperationException("Not implemented");
}

/**
* Close the cursor and releases the associated resources.
*
Expand Down Expand Up @@ -893,6 +921,24 @@ default ManagedCursorAttributes getManagedCursorAttributes() {

boolean isMessageDeleted(Position position);

/**
* Returns the deleted messages from the given positions.
* Implementation classes can override this method to provide a more efficient way to filter deleted messages.
*
* @param positions the positions to filter
* @return the set of deleted positions
*/
default Set<Position> filterDeletedMessages(Collection<? extends Position> positions) {
Set<Position> deletedPositions = new HashSet<>();
// prefer for loop to avoid creating stream related instances
for (Position position : positions) {
if (isMessageDeleted(position)) {
deletedPositions.add(position);
}
}
return deletedPositions;
}

ManagedCursor duplicateNonDurableCursor(String nonDurableCursorName) throws ManagedLedgerException;

long[] getBatchPositionAckSet(Position position);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.bookkeeper.mledger;

import java.util.List;

public interface ManagedCursorReplayReadEntriesCallback {
void readEntriesComplete(ManagedCursorReplayReadRange range, boolean isLast, List<Entry> entries, Object ctx);

void readEntriesFailed(ManagedCursorReplayReadRange range, boolean isLast, ManagedLedgerException exception,
Object ctx);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.bookkeeper.mledger;

public interface ManagedCursorReplayReadRange extends Comparable<ManagedCursorReplayReadRange> {
int rangeIndex();

int totalRanges();

Position startPosition();

Position lastPosition();

default int size() {
if (startPosition().getLedgerId() != lastPosition().getLedgerId()) {
throw new IllegalStateException("Cannot calculate size for range spanning multiple ledgers");
}
return (int) (lastPosition().getEntryId() - startPosition().getEntryId() + 1);
}

@Override
default int compareTo(ManagedCursorReplayReadRange o) {
return Integer.compare(rangeIndex(), o.rangeIndex());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ public class ManagedLedgerConfig {
@Getter
@Setter
private boolean cacheEvictionByMarkDeletedPosition = false;
@Getter
@Setter
private boolean cacheEvictionByExpectedReadCount = true;
private int minimumBacklogCursorsForCaching = 0;
private int minimumBacklogEntriesForCaching = 1000;
private int maxBacklogBetweenCursorsForCaching = 1000;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,18 @@ public class ManagedLedgerFactoryConfig {
*/
private long managedLedgerMaxReadsInFlightSize = 0;

/**
* Maximum time to wait for acquiring permits for max reads in flight when managedLedgerMaxReadsInFlightSizeInMB is
* set (>0) and the limit is reached.
*/
private long managedLedgerMaxReadsInFlightPermitsAcquireTimeoutMillis = 60000;

/**
* Maximum number of reads that can be queued for acquiring permits for max reads in flight when
* managedLedgerMaxReadsInFlightSizeInMB is set (>0) and the limit is reached.
*/
private int managedLedgerMaxReadsInFlightPermitsAcquireQueueSize = 10000;

/**
* Whether trace managed ledger task execution time.
*/
Expand Down
Loading
Loading