HDFS-12278. LeaseManager operations are inefficient in 2.8. Contributed by Rushabh S Shah.
This commit is contained in:
parent
ec694145cf
commit
b5c02f95b5
@ -26,10 +26,11 @@
|
||||
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;
|
||||
@ -87,11 +88,15 @@ public class LeaseManager {
|
||||
// Mapping: leaseHolder -> Lease
|
||||
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
|
||||
@ -528,9 +533,10 @@ synchronized boolean checkLeases() {
|
||||
|
||||
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<>();
|
||||
|
Loading…
Reference in New Issue
Block a user