[fix][broker] Close pending acks cleanup gap in BacklogQuotaManager - #25624
Merged
nodece merged 1 commit intoApr 30, 2026
Merged
Conversation
lhotari
added a commit
to lhotari/pulsar
that referenced
this pull request
May 5, 2026
…409 cascade)
Two `BacklogQuotaManagerTest` cases consistently fail together: an
`@AfterMethod` `clearNamespaces` times out at 10s while force-deleting
`prop/ns-quota`, leaving the namespace in metadata; the next test's
`@BeforeMethod` `createNamespaces` then hits HTTP 409 ("Namespace already
exists") and the cascade continues for every subsequent test.
Root cause: PR apache#25624 added two pending-acks tests that leave Key_Shared
consumers with unacked messages on `prop/ns-quota` and an active
backlog-quota check loop running every 2s. Force-deleting that state can
exceed the 10s default `Awaitility` budget used by the shared
`MockedPulsarServiceBaseTest.deleteNamespaceWithRetry`. The afterMethod
times out, leftover metadata remains, and the next beforeMethod hits 409.
Fix:
1. `MockedPulsarServiceBaseTest.deleteNamespaceWithRetry` now uses
`atMost(20, SECONDS)` instead of relying on the Awaitility 10s
default. 2× headroom is enough for the heaviest cleanups in this
class while staying conservative for the many tests that share this
helper.
2. `BacklogQuotaManagerTest.createNamespaces` is split into a helper
that catches `ConflictException` and recovers by force-deleting the
leftover and recreating, so a slow prior cleanup cannot cascade as a
409 — defense in depth on top of (1).
Verified locally with `@Test(invocationCount = 10)` on the two new
pending-acks tests: 20/20 passes, all `clearNamespaces` cycles within
the new 20s budget.
poorbarcode
pushed a commit
to poorbarcode/pulsar
that referenced
this pull request
May 6, 2026
Technoboy-
added a commit
that referenced
this pull request
May 12, 2026
nodece
added a commit
to ascentstream/pulsar
that referenced
this pull request
May 27, 2026
…pache#25624) (cherry-pick from commit d861e15)
priyanshu-ctds
pushed a commit
to datastax/pulsar
that referenced
this pull request
Jun 9, 2026
…pache#25624) (cherry-pick from commit d861e15) (cherry picked from commit e3419ce)
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.
Fix #25613
Motivation
PR #25592 added
Dispatcher#markDeletePositionMoveForward()to clean up pending acks and redelivery state when cursors advance via subscription-level APIs (skip, expiry, clear-backlog).However,
BacklogQuotaManagerbypasses these APIs and directly updatesManagedCursor, so the hook is not triggered in two eviction paths:ManagedCursor.skipEntriesManagedCursor.markDeleteThis leads to stale state in
Key_Sharedsubscriptions:pendingAcksnot cleaned upunackedMessagesdriftModifications
Dispatcher#markDeletePositionMoveForwardcomputeEvictionTargetcomputeEntriesToEvict