Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added support for multiple connections to each broker #336

Merged
merged 5 commits into from
Nov 1, 2023

Conversation

merlimat
Copy link
Contributor

Fixes #221

Motivation

Support having more than 1 connection to each broker.

@merlimat merlimat self-assigned this Oct 30, 2023
@merlimat merlimat added the enhancement New feature or request label Oct 30, 2023
@BewareMyPower BewareMyPower added this to the 3.4.0 milestone Oct 31, 2023
merlimat and others added 2 commits October 31, 2023 14:00
Co-authored-by: Zike Yang <zike@apache.org>
@BewareMyPower BewareMyPower merged commit 81cc562 into apache:main Nov 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
Fixes apache#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
Fixes apache#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 free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[feature request] Support the connectionsPerBroker config
3 participants