fix: prevent data race in balance strategy #2453
Merged
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.
For every
BalanceStrategy
, it may be shared across different consumer groups in one instance. Considering every built-in balance strategy has several fields in the struct as shown in the below snippet, data race issues may happen when several consumer group rebalances simultaneously.Even worse, I think this issue could cause
To verify this issue, a unit test was written, which fails when -race detection is enabled.
To avoid this problem, it may be best not to use a singleton for each and every of BalanceStrategy. Instead, newly-added functions like
NewBalanceStrategyRange() BalanceStrategy
are recommended so that every time an exclusive variable is assigned to each consumer group.Fixes #2422