Fix ProducerBusy or ConsumerBusy error when configuring multiple brokers per connection #337
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
This is a catch up for apache/pulsar#21144
When a producer or consumer reconnects, a random number will be generated as the key suffix in
ConnectionPool
to create or get theClientConnection
object from the pool.pulsar-client-cpp/lib/ConnectionPool.cc
Line 75 in 81cc562
If a new connection is created with the same producer or consumer name to the broker, the broker will respond with a
ProducerBusy
orConsumerBusy
error so that the reconnection will never succeed.Modifications
ConnectionPool::getConnectionAsync
that accepts an integer parameter as the key suffix. If it's not specified, generate the random number as the suffix. In this method, choose the executor bykey suffix % size
.HandlerBase
object. When connecting the owner broker of its topic, pass that index so that the reconnection will always reuse the sameClientConnection
object.Verifying this change
ProducerTest.testReconnectMultiConnectionsPerBroker
is added to protected the change.