[client] Fix issue where paused consumer receives new message when reconnecting #8165
+181
−7
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.
Motivation
Consumers whose
pause()
method is called are expected not to fetch any more new messages from the broker untilresume()
is called. However, when the topic is unloaded or the broker is restarted, the consumer receives new messages.While the consumer is paused, no flow permits are sent to the broker when the
increaseAvailablePermits()
method is called.pulsar/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java
Lines 1527 to 1538 in dea574b
However, if the
sendFlowPermitsToBroker()
method is called directly, flow permits will be sent even while the consumer is paused. When a reconnection occurs,sendFlowPermitsToBroker()
is called instead ofincreaseAvailablePermits()
.pulsar/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java
Lines 850 to 856 in dea574b
Modifications
Fixed consumer classes to always use
increaseAvailablePermits()
instead ofsendFlowPermitsToBroker()
.