HDFS-15161. When evictableMmapped or evictable size is zero, do not throw NoSuchElementException in ShortCircuitCache#close(). Contributed by Lisheng Sun

This commit is contained in:
Ayush Saxena 2020-02-12 20:22:51 +05:30
parent 8d6ff87c18
commit f09710bbb8
1 changed files with 6 additions and 17 deletions

View File

@ -26,7 +26,6 @@ import java.nio.MappedByteBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.NoSuchElementException;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@ -865,23 +864,13 @@ public class ShortCircuitCache implements Closeable {
// Close and join cacheCleaner thread.
IOUtilsClient.cleanupWithLogger(LOG, cacheCleaner);
// Purge all replicas.
while (true) {
Object eldestKey;
try {
eldestKey = evictable.firstKey();
} catch (NoSuchElementException e) {
break;
}
purge((ShortCircuitReplica)evictable.get(eldestKey));
while (!evictable.isEmpty()) {
Object eldestKey = evictable.firstKey();
purge((ShortCircuitReplica) evictable.get(eldestKey));
}
while (true) {
Object eldestKey;
try {
eldestKey = evictableMmapped.firstKey();
} catch (NoSuchElementException e) {
break;
}
purge((ShortCircuitReplica)evictableMmapped.get(eldestKey));
while (!evictableMmapped.isEmpty()) {
Object eldestKey = evictableMmapped.firstKey();
purge((ShortCircuitReplica) evictableMmapped.get(eldestKey));
}
} finally {
lock.unlock();