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]

Reply via email to