HDDS-4673. NodeStateMap leaks internal representation of container sets #1782
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.
JIRA: https://issues.apache.org/jira/browse/HDDS-4673
What changes were proposed in this pull request?
@jojochuang reported that some
ConcurrentModificationException
is visible even after #1174 (https://issues.apache.org/jira/browse/HDDS-3918)The root cause of this issue is a leak of internal representation of sets in
NodeStateMap
.NodeStateMap
returns an unmodifiable copy of containers for one specific node:With this approach the users of the
nodeStateMap.getContainers
method couldn't modify the set anymore. ButnodeStateMap
can modify the original set which is referenced (instead of copy) by theunmodifiableSet
. Even if it's unmodifiable it throws an exception during the iteration if the original set is modified in the background.How was this patch tested?
There is a new unit test method which reproduce the specific race condition with the help of
CountDownLatch
-es