pulsar
pulsar copied to clipboard
[improve][client-c++] Use an atomic `state_` instead of the lock to improve performance
Motivation
Now, Use a lot of locks to ensure the atomicity of state_ in the ConsumerImpl, ProducerImpl, PartitionedConsumerImpl, and MultiTopicsConsumerImpl, we can use atomic state_ instead of the lock to improve performance.
Modifications
Use an atomic state_ instead of the lock to improve performance.
Verifying this change
- [x] Make sure that the change passes the CI checks.
(Please pick either of the following options)
This change is a trivial rework / code cleanup without any test coverage.
(or)
This change is already covered by existing tests, such as (please describe tests).
(or)
This change added tests and can be verified as follows:
(example:)
- Added integration tests for end-to-end deployment with large payloads (10MB)
- Extended integration test for recovery after broker failure
Does this pull request potentially affect one of the following parts:
If yes was chosen, please highlight the changes
- Dependencies (does it add or upgrade a dependency): (yes / no)
- The public API: (yes / no)
- The schema: (yes / no / don't know)
- The default values of configurations: (yes / no)
- The wire protocol: (yes / no)
- The rest endpoints: (yes / no)
- The admin cli options: (yes / no)
- Anything that affects deployment: (yes / no / don't know)
Documentation
Check the box below or label this PR directly.
Need to update docs?
-
[ ]
doc-required(Your PR needs to update docs and you will update later) -
[x]
doc-not-needed(Please explain why) -
[ ]
doc(Your PR contains doc changes) -
[ ]
doc-complete(Docs have been already added)
@coderzc PartitionedConsumerImpl and MultiTopicsConsumerImpl may be also can improve
@coderzc
PartitionedConsumerImplandMultiTopicsConsumerImplmay be also can improve
Thanks, I have already improved them.
/pulsarbot run-failure-checks
@BewareMyPower @shibd Could you review it again?
/pulsarbot run-failure-checks
@BewareMyPower PTAL
The correct process on the following code might be a little complicated. I think we can add a TODO here.
if (state_ != Ready && state_ != Pending) {
state_ = Closed;
Just left one final minor comment, LGTM.