[improve][broker] Optimize fine-grained concurrency control for BucketDelayedDeliveryTracker - #24739
[improve][broker] Optimize fine-grained concurrency control for BucketDelayedDeliveryTracker#24739Denovo1998 wants to merge 28 commits into
Conversation
…rategy Refactor lock mechanism from StampedLock to ReentrantReadWriteLock for thread safety. Add async bucket snapshot creation and improve concurrent message handling.
…yncMergeBucketSnapshot
|
@codelipenghui @lhotari @coderzc @Apurva007 |
Without benchmarking, it will be hard to validate assumptions. I'd suggest adding JMH benchmarks so that performance could be compared. JMH benchmarks can be added to microbench module: https://github.com/apache/pulsar/tree/master/microbench |
|
OK. I will add JMH benchmarks first. |
…cketDelayedDeliveryTracker
# Conflicts: # microbench/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerBenchmark.java # microbench/src/main/java/org/apache/pulsar/broker/delayed/bucket/MockBucketSnapshotStorage.java # pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/AbstractDelayedDeliveryTracker.java # pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/DelayedDeliveryContext.java # pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/DispatcherDelayedDeliveryContext.java # pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTracker.java # pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTrackerFactory.java # pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/NoopDelayedDeliveryContext.java # pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTracker.java
…tDelayedDeliveryTracker
# Conflicts: # pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/AbstractDelayedDeliveryTracker.java # pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTracker.java # pulsar-broker/src/test/java/org/apache/pulsar/broker/delayed/InMemoryDeliveryTrackerTest.java
|
Is this still relevant? |
|
@lhotari Recently, there have been many changes about delaying messages. I will start to re-study this pr next week. |
Merge the current upstream master while intentionally taking its delayed-delivery implementation as the new baseline. The original PR implementation predates the shared runtime index, bucket context, asynchronous close, trim safeguards, and related correctness fixes; the focused snapshot-build offload is rebuilt in follow-up commits.
…cker lock Detach and replace the active mutable bucket under the tracker monitor, then build and persist its snapshot outside the critical section. Use a broker-scoped bounded executor with memory-mode fallback, and fence asynchronous work across clear and close lifecycle transitions. Cover rejection, build and persistence failures, stale lifecycle completions, late messages, and non-blocking close with deterministic tests.
Measure the ledger-rollover add latency for 10K, 100K, and 1M-index buckets with direct and asynchronous snapshot builders. Use Gradle benchmark packaging and longer JMH warmup, measurement, and fork settings for repeatable comparisons.
Fixes #24603
Main Issue: #24600
PIP: #xyz
Motivation
Modifications
Verifying this change
(Please pick either of the following options)
This change is a trivial rework / code cleanup without any test coverage.
(or)
This change is already covered by existing tests, such as (please describe tests).
(or)
This change added tests and can be verified as follows:
(example:)
Does this pull request potentially affect one of the following parts:
If the box was checked, please highlight the changes
Documentation
docdoc-requireddoc-not-neededdoc-completeMatching PR in forked repository
PR in forked repository: Denovo1998#10