Fix possible zombie consumer when closing after reconnection #518
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.
Fixes #483
Motivation
When the consumer is during reconnection (e.g. after
seekis done), theSubscriberequest might be sent to the broker but the connection is not bound with the consumer. In this case,closeAsyncwon't send aCloseConsumerRPC because connection is not available, seepulsar-client-cpp/lib/ConsumerImpl.cc
Line 1355 in 3be5267
Modifications
Call
setCnxinconnectionOpenedbefore sending theSubscribeRPC. However, after that,seekorhasMessageAvailablemight fail withResultNotConnectedafter reconnection. Hence, add a subscribe promise to delay these RPCs after subscribe RPC is done.Add
testSeekAfterSeekandtestCloseAfterSeekto verify the behavior.