Dream95 opened a new pull request, #25916:
URL: https://github.com/apache/pulsar/pull/25916

   <!--
   ### 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.
   -->
   
   ### Motivation
   When a multi-topic consumer unsubscribes from a single topic, the client 
should drop that topic's unacked messages from the ack-timeout tracker so they 
are not redelivered later.
   `MultiTopicsConsumerImpl` already called `removeTopicMessages` for 
`UnAckedTopicMessageTracker`, but not for 
`UnAckedTopicMessageRedeliveryTracker`, which is used when 
`ackTimeoutRedeliveryBackoff` is configured . Unsubscribed topics could 
therefore leave stale entries in the redelivery partition map and in 
`ackTimeoutMessages`.
   Additionally, `UnAckedTopicMessageRedeliveryTracker.removeTopicMessages` 
used the partition-map iterator when iterating `ackTimeoutMessages` 
(`iterator.hasNext()` / `iterator.remove()` instead of `iteratorAckTimeOut`), 
so ack-timeout entries were not removed correctly and internal tracker state 
could be corrupted.
   ### Modifications
   - Call `removeTopicMessages` on `UnAckedTopicMessageRedeliveryTracker` when 
a topic is unsubscribed from a multi-topic consumer.
   - Fix ack-timeout iteration in 
`UnAckedTopicMessageRedeliveryTracker.removeTopicMessages` to use 
`iteratorAckTimeOut`.
   - Add `UnAckedTopicMessageRedeliveryTrackerTest` to verify 
`removeTopicMessages` clears both the partition map and ack-timeout map.
   ### Verifying this change
   - [x] `./gradlew :pulsar-client-original:test --tests 
org.apache.pulsar.client.impl.UnAckedTopicMessageRedeliveryTrackerTest`
   
   ### 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
   
   ### Matching PR in forked repository
   
   PR in forked repository: https://github.com/Dream95/pulsar/pull/12


-- 
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]

Reply via email to