Skip to content

Added support for multiple connections to each broker - #336

Merged
BewareMyPower merged 5 commits into
apache:mainfrom
merlimat:multi-connections-per-broker
Nov 1, 2023
Merged

Added support for multiple connections to each broker#336
BewareMyPower merged 5 commits into
apache:mainfrom
merlimat:multi-connections-per-broker

Conversation

@merlimat

Copy link
Copy Markdown
Contributor

Fixes#221

Motivation

Support having more than 1 connection to each broker.

@merlimatmerlimat self-assigned this Oct 30, 2023
@merlimatmerlimat added the enhancement New feature or request label Oct 30, 2023
Comment threadlib/ConnectionPool.cc Outdated
Comment threadlib/ClientConfiguration.cc
Comment threadlib/ConnectionPool.cc Outdated
Comment threadlib/ConnectionPool.cc
@BewareMyPowerBewareMyPower added this to the 3.4.0 milestone Oct 31, 2023
merlimatand others added 2 commits October 31, 2023 14:00
Co-authored-by: Zike Yang <zike@apache.org>
@BewareMyPower
BewareMyPower merged commit 81cc562 into apache:mainNov 1, 2023
@merlimat
merlimat deleted the multi-connections-per-broker branch November 1, 2023 15:35
BewareMyPower added a commit to BewareMyPower/pulsar-client-cpp that referenced this pull request Nov 16, 2023
Fixesapache#346
### Motivation
apache#336 changes the key of
the `ClientConnection` in `ConnectionPool`, while in
`ClientConnection::close`, it still passes the old key (logical address)
to `ConnectionPool::remove`, which results in the connection could never
be removed and destroyed until being deleted as a stale connection.
What's worse, if the key does not exist, the iterator returned by
`std::map::find` will still be dereferenced, which might cause crash in
some platforms. See
https://github.com/apache/pulsar-client-cpp/blob/8d32fd254e294d1fabba73aed70115a434b341ef/lib/ConnectionPool.cc#L122-L123
### Modifications
- Avoid dereferencing the iterator if it's invalid in
`ConnectionPool::remove`.
- Store the key suffix in `ClientConnection` and pass the correct key to
`ConnectionPool::remove` in `ClientConnection::close`
- Add `ClientTest.testConnectionClose` to verify
`ClientConnection::close` can remove itself from the pool and the
connection will be destroyed eventually.
BewareMyPower added a commit to BewareMyPower/pulsar-client-cpp that referenced this pull request Nov 16, 2023
Fixesapache#346
### Motivation
apache#336 changes the key of
the `ClientConnection` in `ConnectionPool`, while in
`ClientConnection::close`, it still passes the old key (logical address)
to `ConnectionPool::remove`, which results in the connection could never
be removed and destroyed until being deleted as a stale connection.
What's worse, if the key does not exist, the iterator returned by
`std::map::find` will still be dereferenced, which might cause crash in
some platforms. See
https://github.com/apache/pulsar-client-cpp/blob/8d32fd254e294d1fabba73aed70115a434b341ef/lib/ConnectionPool.cc#L122-L123
### Modifications
- Avoid dereferencing the iterator if it's invalid in
`ConnectionPool::remove`.
- Store the key suffix in `ClientConnection` and pass the correct key to
`ConnectionPool::remove` in `ClientConnection::close`
- Add `ClientTest.testConnectionClose` to verify
`ClientConnection::close` can remove itself from the pool and the
connection will be destroyed eventually.
BewareMyPower added a commit that referenced this pull request Nov 17, 2023
Fixes#346
### Motivation
#336 changes the key of
the `ClientConnection` in `ConnectionPool`, while in
`ClientConnection::close`, it still passes the old key (logical address)
to `ConnectionPool::remove`, which results in the connection could never
be removed and destroyed until being deleted as a stale connection.
What's worse, if the key does not exist, the iterator returned by
`std::map::find` will still be dereferenced, which might cause crash in
some platforms. See
https://github.com/apache/pulsar-client-cpp/blob/8d32fd254e294d1fabba73aed70115a434b341ef/lib/ConnectionPool.cc#L122-L123
### Modifications
- Avoid dereferencing the iterator if it's invalid in
`ConnectionPool::remove`.
- Store the key suffix in `ClientConnection` and pass the correct key to
`ConnectionPool::remove` in `ClientConnection::close`
- Add `ClientTest.testConnectionClose` to verify
`ClientConnection::close` can remove itself from the pool and the
connection will be destroyed eventually.
BewareMyPower added a commit that referenced this pull request Nov 17, 2023
Fixes#346
### Motivation
#336 changes the key of
the `ClientConnection` in `ConnectionPool`, while in
`ClientConnection::close`, it still passes the old key (logical address)
to `ConnectionPool::remove`, which results in the connection could never
be removed and destroyed until being deleted as a stale connection.
What's worse, if the key does not exist, the iterator returned by
`std::map::find` will still be dereferenced, which might cause crash in
some platforms. See
https://github.com/apache/pulsar-client-cpp/blob/8d32fd254e294d1fabba73aed70115a434b341ef/lib/ConnectionPool.cc#L122-L123
### Modifications
- Avoid dereferencing the iterator if it's invalid in
`ConnectionPool::remove`.
- Store the key suffix in `ClientConnection` and pass the correct key to
`ConnectionPool::remove` in `ClientConnection::close`
- Add `ClientTest.testConnectionClose` to verify
`ClientConnection::close` can remove itself from the pool and the
connection will be destroyed eventually.
(cherry picked from commit 6d47e94)
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feature request] Support the connectionsPerBroker config

3 participants

@merlimat@RobertIndie@BewareMyPower