Dream95 opened a new pull request, #25923:
URL: https://github.com/apache/pulsar/pull/25923
<!--
### Contribution Checklist
- PR title format should be *[type][component] summary*. The valid
`[type]` and `[component]`/scope
prefixes are enforced by CI (see
`.github/workflows/ci-semantic-pull-request.yml`); for details,
see *[Guideline - Pulsar PR Naming
Convention](https://pulsar.apache.org/contribute/develop-semantic-title/)*.
- Fill out the template below to describe the changes contributed by the
pull request. That will give reviewers the context they need to do the review.
- The **Motivation** and **Modifications** sections are required: explain
*why* (the problem/context)
and *what/how* (the change). A title alone, or a description that only
restates the title, is not enough.
- Each pull request should address only one issue, not mix up code from
multiple issues.
- Each commit in the pull request has a meaningful commit message
- For the local build/test/PR workflow see `CONTRIBUTING.md`, and for
coding conventions see
`CODING.md`. If you use an AI coding assistant, see `AGENTS.md`.
- Once all items of the checklist are addressed, remove the above text and
this checklist, leaving only the filled out template below.
-->
<!-- Details of when a PIP is required and how the PIP process work, please
see: https://github.com/apache/pulsar/blob/master/pip/README.md -->
### Motivation
Follow-up to [#25921]. That PR fixed incorrect unacked-message removal on
explicit unsubscribe by comparing logical partitioned topic names instead of
substring matching. This change extends the same cleanup to other paths where a
multi-topic or pattern consumer drops a topic without calling unsubscribe, so
timed-out unacked entries are not left behind.
In production, topics can also disappear from a consumer when:
* Partition metadata shrinks — onTopicsExtended closes partition consumers
when a partitioned topic is deleted or loses partitions (autoUpdatePartitions).
* Pattern subscription — PatternMultiTopicsConsumerImpl removes a grouped
partitioned topic after all its partition consumers are gone.
Those paths closed partition consumers but did not clear matching entries
from the unacked tracker.
<!-- Explain here the context, and why you're making that change. What is
the problem you're trying to solve. -->
### Modifications
* Extract removeTopicMessagesFromUnackedTracker(String topicName) in
MultiTopicsConsumerImpl and reuse it from unsubscribeAsync .
* After partition consumers are closed in onTopicsExtended when partition
count goes to zero, call removeTopicMessagesFromUnackedTracker for the logical
topic name.
* In PatternMultiTopicsConsumerImpl, when all partitions of a grouped topic
are removed, call the same helper before dropping the topic from
partitionedTopics.
<!-- Describe the modifications you've done. -->
### Verifying this change
- [x] Make sure that the change passes the CI checks.
*(Please pick either of the following options)*
This change added tests and can be verified as follows:
~~~sh
./gradlew :pulsar-client-original:test --tests
"org.apache.pulsar.client.impl.MultiTopicsConsumerImplTest.testOnTopicsExtendedRemovedTopicCleansUnackedMessages"
./gradlew :pulsar-client-original:test --tests
"org.apache.pulsar.client.impl.PatternMultiTopicsConsumerImplTest#testOnTopicsRemovedCleansUnackedMessagesForRemovedPartitionedTopic"
~~~
### Does this pull request potentially affect one of the following parts:
<!-- DO NOT REMOVE THIS SECTION. CHECK THE PROPER BOX ONLY. -->
*If the box was checked, please highlight the changes*
- [ ] Dependencies (add or upgrade a dependency)
- [ ] The public API
- [ ] The schema
- [ ] The default values of configurations
- [ ] The threading model
- [ ] The binary protocol
- [ ] The REST endpoints
- [ ] The admin CLI options
- [ ] The metrics
- [ ] Anything that affects deployment
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]