balodesecurity opened a new pull request, #8332: URL: https://github.com/apache/hadoop/pull/8332
### Problem When multiple NFS export paths are configured on the same HDFS namenode (e.g., `/path1` and `/path2` both served by `hdfs://namenode:8020`), the `DFSClientCache` constructor throws a `FileSystemException` with the message "Namenode ID collision". This causes the NFS gateway to fail startup even though the configuration is valid. The root symptom was a flaky test (`testViewFsMultipleExportPoint`) that failed with: ``` Namenode ID collision for path:/hdfs2 nnid:2130740544 uri being added:hdfs://localhost:34111/ existing uri:hdfs://localhost:34111/ ``` ### Root Cause `DFSClientCache.prepareAddressMap()` uses `Nfs3Utils.getNamenodeId()` to map each export path to a namenode ID, where the ID is derived from the namenode's `InetSocketAddress.hashCode()`. When two export paths resolve to the **same namenode** (same host and port), they produce the same namenode ID. The existing code incorrectly treats any duplicate namenode ID as a collision and throws an error, even when both paths point to the same namenode authority. The check should only fail when two **different** namenode authorities (different host:port) hash to the same ID — a true hash collision — not when the same namenode is referenced by multiple export paths. ### Fix Changed the collision check in `prepareAddressMap()` from "throw on any duplicate namenodeId" to "throw only when the conflicting entries have different URI authorities (host:port)". When the authorities match, the duplicate is logged at DEBUG level and skipped safely. ### Testing Added `testMultipleExportPointsSameNamenode()` to `TestDFSClientCache` which configures two export paths (`/path1` and `/path2`) on the same HDFS namenode and verifies the `DFSClientCache` constructor completes without throwing. Before the fix this test would fail with `FileSystemException`. JIRA: https://issues.apache.org/jira/browse/HDFS-17844 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
