[refactor][broker] Decouple delayed delivery trackers from dispatcher#25384
Merged
nodece merged 9 commits intoapache:masterfrom Apr 7, 2026
Merged
[refactor][broker] Decouple delayed delivery trackers from dispatcher#25384nodece merged 9 commits intoapache:masterfrom
nodece merged 9 commits intoapache:masterfrom
Conversation
…text handling in delayed delivery trackers
Draft
15 tasks
|
@Denovo1998 Please add the following content to your PR description and select a checkbox: |
5 tasks
Contributor
Author
Contributor
There was a problem hiding this comment.
Pull request overview
Refactors delayed delivery trackers to depend on a lightweight DelayedDeliveryContext abstraction instead of directly depending on the dispatcher, enabling tracker construction in benchmarks/tests without a real dispatcher while keeping the production entry points intact.
Changes:
- Introduce
DelayedDeliveryContextplus dispatcher-backed (DispatcherDelayedDeliveryContext) and no-op (NoopDelayedDeliveryContext) implementations. - Add context-based (and name+cursor-based) constructors/creation helpers for
InMemoryDelayedDeliveryTrackerandBucketDelayedDeliveryTracker, while preserving existing dispatcher-based construction. - Update microbench scaffolding: remove the old simple benchmark, add a new
BucketDelayedDeliveryTrackerBenchmark, addMockBucketSnapshotStorage, and makeMockManagedCursorpublic for reuse.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/DelayedDeliveryContext.java | New context interface to decouple trackers from dispatcher. |
| pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/DispatcherDelayedDeliveryContext.java | Production context backed by dispatcher operations. |
| pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/NoopDelayedDeliveryContext.java | Test/bench-friendly context implementation. |
| pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/AbstractDelayedDeliveryTracker.java | Base tracker now uses DelayedDeliveryContext and a context-provided trigger lock. |
| pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTracker.java | Adds context/name+cursor constructors; replaces dispatcher references with context. |
| pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTrackerFactory.java | Uses dispatcher-backed context internally; adds test/bench helper constructor path. |
| pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/BucketDelayedDeliveryTrackerFactory.java | Uses dispatcher-backed context internally; adds test/bench helper constructor path. |
| pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTracker.java | Adds context/name+cursor constructors; replaces dispatcher references with context. |
| microbench/src/main/java/org/apache/pulsar/broker/package-info.java | Adds package-level Javadoc (currently targets a higher-level package). |
| microbench/src/main/java/org/apache/pulsar/broker/delayed/bucket/MockBucketSnapshotStorage.java | Adds a microbench snapshot storage stub. |
| microbench/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerBenchmark.java | New benchmark using context-based tracker construction. |
| microbench/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerSimpleBenchmark.java | Removes old simplified benchmark. |
| microbench/src/main/java/org/apache/bookkeeper/mledger/impl/MockManagedCursor.java | Makes cursor mock public and factory method public for benchmark reuse. |
microbench/src/main/java/org/apache/pulsar/broker/package-info.java
Outdated
Show resolved
Hide resolved
...main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerBenchmark.java
Outdated
Show resolved
Hide resolved
microbench/src/main/java/org/apache/pulsar/broker/delayed/bucket/MockBucketSnapshotStorage.java
Show resolved
Hide resolved
microbench/src/main/java/org/apache/pulsar/broker/delayed/bucket/MockBucketSnapshotStorage.java
Show resolved
Hide resolved
pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/NoopDelayedDeliveryContext.java
Outdated
Show resolved
Hide resolved
# Conflicts: # microbench/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerSimpleBenchmark.java # pulsar-broker/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTracker.java
Contributor
Author
|
@nodece |
nodece
requested changes
Apr 3, 2026
...ar-broker/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTracker.java
Show resolved
Hide resolved
...ar-broker/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTracker.java
Show resolved
Hide resolved
...ar-broker/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTracker.java
Outdated
Show resolved
Hide resolved
...er/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTrackerFactory.java
Outdated
Show resolved
Hide resolved
...er/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTrackerFactory.java
Show resolved
Hide resolved
...ar-broker/src/main/java/org/apache/pulsar/broker/delayed/InMemoryDelayedDeliveryTracker.java
Outdated
Show resolved
Hide resolved
...oker/src/main/java/org/apache/pulsar/broker/delayed/BucketDelayedDeliveryTrackerFactory.java
Outdated
Show resolved
Hide resolved
Contributor
Author
|
@nodece All done. |
nodece
approved these changes
Apr 3, 2026
...main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerBenchmark.java
Show resolved
Hide resolved
...main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerBenchmark.java
Outdated
Show resolved
Hide resolved
...main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTrackerBenchmark.java
Show resolved
Hide resolved
dao-jun
approved these changes
Apr 3, 2026
...oker/src/main/java/org/apache/pulsar/broker/delayed/bucket/BucketDelayedDeliveryTracker.java
Outdated
Show resolved
Hide resolved
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Main Issue: #24600
Related PR: #24739
Motivation
PR #24739 currently mixes correctness and threading changes with benchmark and testability refactors, which makes the review difficult to scope. This preparatory PR extracts the delayed delivery tracker context that is needed to construct trackers without a real dispatcher, so the benchmark and test scaffolding can be reviewed separately. The goal is to keep the existing production behavior intact while making the tracker setup reusable from microbench code.
Modifications
DelayedDeliveryContextplus dispatcher-backed and no-op implementations for delayed delivery trackersMockManagedCursorpublic for microbench usage and switch the JMH benchmark setup to the new context-based tracker constructionMockBucketSnapshotStorage, add the newBucketDelayedDeliveryTrackerBenchmark, and remove the old simple benchmarkVerifying 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:)
Documentation
docdoc-requireddoc-not-neededdoc-completeMatching PR in forked repository
PR in forked repository: Denovo1998#24