[improve][broker] Remove the atomicity on active consumer of a dispatcher #22285
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
The modifications on
AbstractDispatcherSingleActiveConsumer#activeConsumer
only happen onpickAndScheduleActiveConsumer
, which is only called inaddConsumer
andremoveConsumer
. However, bothaddConsumer
andremoveConsumer
are synchronized methods so that we don't have to perform an atomic operation onactiveConsumer
.The composite operations on
activeConsumer
also happen on synchronized methods likedisconnectActiveConsumers
. The only access toactiveConsumer
that is not synchronized is the read onactiveConsumer
likegetActiveConsumer()
andisConsumerConnected()
.Modifications
Remove the
ACTIVE_CONSUMER_UPDATER
and note some methods are not thread safe or there is no need to make them thread safe.Besides, since
pickAndScheduleActiveConsumer
is never called concurrently, we don't need a double-checked locking onreadOnActiveConsumerTask
. Instead, just synchronize the modification in the scheduled task.Documentation
doc
doc-required
doc-not-needed
doc-complete
Matching PR in forked repository
PR in forked repository: