Fix race condition in LruCache when handling exceptions #692
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.
Reorders the operations in the
LruCache
to avoid race conditions.When the future failed, the other threads could still fetch the failed result before the cache entry was deleted (this can be simulated by adding a
blocking(Thread.sleep(1000))
between the instructions).Now the cache entry is deleted first, leaving other threads free to create new futures, before marking the returned future as failed.
This was detected by flaky tests in https://github.com/adzerk/apso/pull/690/checks.
Does this change relate to existing issues or pull requests?
No
Does this change require an update to the documentation?
No
How has this been tested?
Unit tests.
I also reproduced the previous issue by changing the code to:
Doing the same thing with the new ordering does not cause any issue.