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

   Reverts: #5881
   
   ### Motivation
   
   The `redeliveryCount` was introduced in [PIP 
22](https://github.com/apache/pulsar/wiki/PIP-22%3A-Pulsar-Dead-Letter-Topic). 
It is an extra field on a message that indicates how many times a message has 
been redelivered. In the original design, it was only incremented for shared 
subscriptions when the consumer sent `REDELIVER_UNACKNOWLEDGED_MESSAGES` to the 
broker.
   
   In #5881, this field's logic changed so that it is incremented each time a 
broker delivers a message to a consumer (after the initial delivery). The 
problem with this logic is that it counts messages that are sent to a 
consumer's `receiveQueue`, but not actually received by the client application, 
as "delivered" messages. This is especially problematic for the DLQ 
implementation because it relies on the counter to track deliveries, and this 
eager incrementing of the `redeliveryCount` could lead to fewer retries than an 
application would like.
   
   This PR returns the broker's behavior to the original state before #5881.
   
   Note that the DLQ logic is only triggered by messages that hit their ack 
timeout or are negatively acknowledged. This means that in some cases, a 
message could be delivered many times to a `receiveQueue` and once to the 
application and then sent to the DLQ. Given that our DLQ implementation has an 
intentional preference towards over delivery instead of under delivery, I think 
this logic should be fixed.
   
   One of the consequences of this PR is that the message filter logic for 
redelivering messages triggers this logic for incrementing `redeliveryCount`. 
See this code here: 
https://github.com/apache/pulsar/blob/b1a29b520d34d60e60160e3a7b9b0e26926063ee/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/AbstractBaseDispatcher.java#L198-L206
   
   I'll need feedback from someone more familiar with message filtering to 
understand if this is a problematic change. If it is, I think we might need to 
revisit the logic in `filterEntriesForConsumer`.
   
   ### Modifications
   
   * Revert the relevant changes from #5895. I kept the test that was added in 
the PR and modified the assertion.
   * Fix test assertion ordering and modify expected value to align with new 
paradigm.
   
   ### Verifying this change
   
   This change includes modifications to tests as well as existing test 
coverage.
   
   ### Does this pull request potentially affect one of the following parts:
   
   This change is a break in current behavior, so I will send an email to the 
dev mailing list.
   
   ### Documentation
     
   - [x] `doc-not-needed` 


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