-
Notifications
You must be signed in to change notification settings - Fork 3.6k
[Broker] Fix race condition in BrokerService topic cache #9565
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
Merged
merlimat
merged 5 commits into
apache:master
from
lhotari:lh-fix-broker-service-topic-cache-issue
Feb 12, 2021
Merged
[Broker] Fix race condition in BrokerService topic cache #9565
merlimat
merged 5 commits into
apache:master
from
lhotari:lh-fix-broker-service-topic-cache-issue
Feb 12, 2021
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
eolivelli
approved these changes
Feb 11, 2021
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lgtm
pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java
Outdated
Show resolved
Hide resolved
/pulsarbot run-failure-checks |
2 similar comments
/pulsarbot run-failure-checks |
/pulsarbot run-failure-checks |
sijie
reviewed
Feb 12, 2021
pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java
Outdated
Show resolved
Hide resolved
pulsar-broker/src/test/java/org/apache/pulsar/broker/service/BrokerServiceTest.java
Outdated
Show resolved
Hide resolved
/pulsarbot run-failure-checks |
- remove timeout - show thread info in log statement - add index of thread as part of thread's name
aahmed-se
approved these changes
Feb 12, 2021
merlimat
approved these changes
Feb 12, 2021
codelipenghui
pushed a commit
that referenced
this pull request
Feb 18, 2021
* Fix race condition in BrokerService topic cache * Add test that reproduces the topic cache race condition * Use logger for logging exception * Address review comments - remove timeout - show thread info in log statement - add index of thread as part of thread's name * Reset state before running BrokerServiceTests that check stats (cherry picked from commit cee6377)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
area/broker
cherry-picked/branch-2.7
Archived: 2.7 is end of life
release/2.7.1
type/enhancement
The enhancements for the existing features or docs. e.g. reduce memory usage of the delayed messages
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.
Fixes #9564
Motivation
There's a concurrency bug in
org.apache.pulsar.broker.service.BrokerService.getTopic
method.When the topic has been retried with
createIfMissing=false
, for example by getting the statistics, for the topic, the pending future for this call will be in the cache and it's result will be returned for the call which currently calls this method withcreateIfMissing=true
.Modifications
Address the race condition and if
createIfMissing=true
, retry callinggetTopic
when the current result isOptional.empty()
.