Repository: hadoop Updated Branches: refs/heads/branch-2 8b7590057 -> 306abf498
HDFS-12278. LeaseManager operations are inefficient in 2.8. Contributed by Rushabh S Shah. (cherry picked from commit b5c02f95b5a2fcb8931d4a86f8192caa18009ea9) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/306abf49 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/306abf49 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/306abf49 Branch: refs/heads/branch-2 Commit: 306abf4980723c42f60b2a4ca0a328a559bfbd99 Parents: 8b75900 Author: Kihwal Lee <kih...@apache.org> Authored: Wed Aug 9 16:48:55 2017 -0500 Committer: Kihwal Lee <kih...@apache.org> Committed: Wed Aug 9 16:48:55 2017 -0500 ---------------------------------------------------------------------- .../hadoop/hdfs/server/namenode/LeaseManager.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/306abf49/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java index 51125a1..30c48dd 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java @@ -26,10 +26,11 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; -import java.util.PriorityQueue; +import java.util.NavigableSet; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; +import java.util.TreeSet; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -92,11 +93,15 @@ public class LeaseManager { // private final SortedMap<String, Lease> leases = new TreeMap<>(); // Set of: Lease - private final PriorityQueue<Lease> sortedLeases = new PriorityQueue<>(512, + private final NavigableSet<Lease> sortedLeases = new TreeSet<>( new Comparator<Lease>() { @Override public int compare(Lease o1, Lease o2) { - return Long.signum(o1.getLastUpdate() - o2.getLastUpdate()); + if (o1.getLastUpdate() != o2.getLastUpdate()) { + return Long.signum(o1.getLastUpdate() - o2.getLastUpdate()); + } else { + return o1.holder.compareTo(o2.holder); + } } }); // INodeID -> Lease @@ -533,9 +538,10 @@ public class LeaseManager { long start = monotonicNow(); - while(!sortedLeases.isEmpty() && sortedLeases.peek().expiredHardLimit() - && !isMaxLockHoldToReleaseLease(start)) { - Lease leaseToCheck = sortedLeases.peek(); + while(!sortedLeases.isEmpty() && + sortedLeases.first().expiredHardLimit() + && !isMaxLockHoldToReleaseLease(start)) { + Lease leaseToCheck = sortedLeases.first(); LOG.info(leaseToCheck + " has expired hard limit"); final List<Long> removing = new ArrayList<>(); --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org