# UNDF: UNDF-2026-000000097 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/HeartbeatManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/HeartbeatManager.java @@ -18,7 +18,9 @@ import java.util.ArrayList; import java.util.List; +import java.util.HashSet; +import java.util.Set; // ... (other imports unchanged) @@ -447,8 +447,8 @@ class HeartbeatManager implements DatanodeStatistics { boolean allAlive = false; // Locate limited dead nodes. - List deadDatanodes = new ArrayList<>( - numOfDeadDatanodesRemove); + Set deadDatanodes = new HashSet<>( + numOfDeadDatanodesRemove * 2); // Locate limited failed storages that isn't on a dead node. List failedStorages = new ArrayList<>( numOfDeadDatanodesRemove); @@ -493,7 +493,7 @@ class HeartbeatManager implements DatanodeStatistics { if (failedStorages.size() < numOfDeadDatanodesRemove && storageInfo.areBlocksOnFailedStorage() && - !deadDatanodes.contains(d)) { + !deadDatanodes.contains(d)) { // now O(1) via HashSet failedStorages.add(storageInfo); } }