Details
-
Bug
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
3.4.0, 3.3.2
Description
We use comparator to sort locations in getBlockLocations(), and the expected result is: live -> stale -> entering_maintenance -> decommissioned.
But the networktopology. SortByDistance() will disrupt the order. We should also filtered out node in sate AdminStates.ENTERING_MAINTENANCE before networktopology. SortByDistance().
org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager#sortLocatedBlock()
DatanodeInfoWithStorage[] di = lb.getLocations(); // Move decommissioned/stale datanodes to the bottom Arrays.sort(di, comparator); // Sort nodes by network distance only for located blocks int lastActiveIndex = di.length - 1; while (lastActiveIndex > 0 && isInactive(di[lastActiveIndex])) { --lastActiveIndex; } int activeLen = lastActiveIndex + 1; if(nonDatanodeReader) { networktopology.sortByDistanceUsingNetworkLocation(client, lb.getLocations(), activeLen, createSecondaryNodeSorter()); } else { networktopology.sortByDistance(client, lb.getLocations(), activeLen, createSecondaryNodeSorter()); }
Attachments
Issue Links
- links to