diff options
Diffstat (limited to 'logserver/src/main/java/com/yahoo/logserver/handlers/archive/LogWriterLRUCache.java')
-rw-r--r-- | logserver/src/main/java/com/yahoo/logserver/handlers/archive/LogWriterLRUCache.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/logserver/src/main/java/com/yahoo/logserver/handlers/archive/LogWriterLRUCache.java b/logserver/src/main/java/com/yahoo/logserver/handlers/archive/LogWriterLRUCache.java new file mode 100644 index 00000000000..21ca26efdd2 --- /dev/null +++ b/logserver/src/main/java/com/yahoo/logserver/handlers/archive/LogWriterLRUCache.java @@ -0,0 +1,41 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.logserver.handlers.archive; + +import java.io.IOException; +import java.util.logging.Logger; +import java.util.logging.Level; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author <a href="mailto:borud@yahoo-inc.com">Bjorn Borud</a> + */ +@SuppressWarnings("serial") +public class LogWriterLRUCache extends LinkedHashMap<Integer, LogWriter> +{ + private static final Logger log + = Logger.getLogger(LogWriterLRUCache.class.getName()); + + final int maxEntries = 100; + + public LogWriterLRUCache(int initialCapacity, + float loadFactor) { + super(initialCapacity, loadFactor, true); + } + + // TODO: implement unit test for this + protected boolean removeEldestEntry (Map.Entry<Integer, LogWriter> eldest) { + if (size() > maxEntries) { + LogWriter logWriter = (LogWriter)eldest.getValue(); + log.fine("Closing oldest LogWriter: " + logWriter); + try { + logWriter.close(); + } catch (IOException e) { + log.log(Level.WARNING, "closing LogWriter failed", e); + } + return true; + } + + return false; + } +} |