HDFS-17844. Fix the incorrect collision detection logic that causes nondeterministic behavior of testViewFsMultipleExportPoint() #8009
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.
Problem
There could be a race condition in generating namenode ID. What is problematic is that different URIs resolve to the same namenode ID, which leads to data integrity issues and security problems. The logic of the underlying function used to detect such problem is incorrect as it throws an error whenever the namenode exists even if the URI is the same. As a result,
testViewFsMultipleExportPoint()
has a nondeterministic behavior when the test execution order and timing change.Command line used to identify the nondeterminism of
testViewFsMultipleExportPoint()
:Error example:
Patch
The proposed fix has changed the collision detection logic in
prepareAddressMap()
so that it will throw errors only when different URIs resolves to the same namenode ID.In addition, the namenode ID generation logic in
getNamenodeId()
is modified where a robust hash function combines URI and address strings, so it now reduces the chance of hash collision.