http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e2f20c83/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.StatisticsThread.html
----------------------------------------------------------------------
diff --git
a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.StatisticsThread.html
b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.StatisticsThread.html
index 55c1e83..989423f 100644
---
a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.StatisticsThread.html
+++
b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/LruBlockCache.StatisticsThread.html
@@ -848,375 +848,377 @@
<span class="sourceLineNo">840</span> *<a name="line.840"></a>
<span class="sourceLineNo">841</span> * @return max size in bytes<a
name="line.841"></a>
<span class="sourceLineNo">842</span> */<a name="line.842"></a>
-<span class="sourceLineNo">843</span> public long getMaxSize() {<a
name="line.843"></a>
-<span class="sourceLineNo">844</span> return this.maxSize;<a
name="line.844"></a>
-<span class="sourceLineNo">845</span> }<a name="line.845"></a>
-<span class="sourceLineNo">846</span><a name="line.846"></a>
-<span class="sourceLineNo">847</span> @Override<a name="line.847"></a>
-<span class="sourceLineNo">848</span> public long getCurrentSize() {<a
name="line.848"></a>
-<span class="sourceLineNo">849</span> return this.size.get();<a
name="line.849"></a>
-<span class="sourceLineNo">850</span> }<a name="line.850"></a>
-<span class="sourceLineNo">851</span><a name="line.851"></a>
-<span class="sourceLineNo">852</span> @Override<a name="line.852"></a>
-<span class="sourceLineNo">853</span> public long getCurrentDataSize() {<a
name="line.853"></a>
-<span class="sourceLineNo">854</span> return this.dataBlockSize.get();<a
name="line.854"></a>
-<span class="sourceLineNo">855</span> }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span> @Override<a name="line.857"></a>
-<span class="sourceLineNo">858</span> public long getFreeSize() {<a
name="line.858"></a>
-<span class="sourceLineNo">859</span> return getMaxSize() -
getCurrentSize();<a name="line.859"></a>
-<span class="sourceLineNo">860</span> }<a name="line.860"></a>
-<span class="sourceLineNo">861</span><a name="line.861"></a>
-<span class="sourceLineNo">862</span> @Override<a name="line.862"></a>
-<span class="sourceLineNo">863</span> public long size() {<a
name="line.863"></a>
-<span class="sourceLineNo">864</span> return getMaxSize();<a
name="line.864"></a>
-<span class="sourceLineNo">865</span> }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span> @Override<a name="line.867"></a>
-<span class="sourceLineNo">868</span> public long getBlockCount() {<a
name="line.868"></a>
-<span class="sourceLineNo">869</span> return this.elements.get();<a
name="line.869"></a>
-<span class="sourceLineNo">870</span> }<a name="line.870"></a>
-<span class="sourceLineNo">871</span><a name="line.871"></a>
-<span class="sourceLineNo">872</span> @Override<a name="line.872"></a>
-<span class="sourceLineNo">873</span> public long getDataBlockCount() {<a
name="line.873"></a>
-<span class="sourceLineNo">874</span> return
this.dataBlockElements.get();<a name="line.874"></a>
-<span class="sourceLineNo">875</span> }<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span> EvictionThread getEvictionThread() {<a
name="line.877"></a>
-<span class="sourceLineNo">878</span> return this.evictionThread;<a
name="line.878"></a>
-<span class="sourceLineNo">879</span> }<a name="line.879"></a>
-<span class="sourceLineNo">880</span><a name="line.880"></a>
-<span class="sourceLineNo">881</span> /*<a name="line.881"></a>
-<span class="sourceLineNo">882</span> * Eviction thread. Sits in waiting
state until an eviction is triggered<a name="line.882"></a>
-<span class="sourceLineNo">883</span> * when the cache size grows above the
acceptable level.<p><a name="line.883"></a>
-<span class="sourceLineNo">884</span> *<a name="line.884"></a>
-<span class="sourceLineNo">885</span> * Thread is triggered into action by
{@link LruBlockCache#runEviction()}<a name="line.885"></a>
-<span class="sourceLineNo">886</span> */<a name="line.886"></a>
-<span class="sourceLineNo">887</span> static class EvictionThread extends
HasThread {<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span> private
WeakReference<LruBlockCache> cache;<a name="line.889"></a>
-<span class="sourceLineNo">890</span> private volatile boolean go = true;<a
name="line.890"></a>
-<span class="sourceLineNo">891</span> // flag set after enter the run
method, used for test<a name="line.891"></a>
-<span class="sourceLineNo">892</span> private boolean enteringRun =
false;<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span> public EvictionThread(LruBlockCache
cache) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>
super(Thread.currentThread().getName() + ".LruBlockCache.EvictionThread");<a
name="line.895"></a>
-<span class="sourceLineNo">896</span> setDaemon(true);<a
name="line.896"></a>
-<span class="sourceLineNo">897</span> this.cache = new
WeakReference<>(cache);<a name="line.897"></a>
-<span class="sourceLineNo">898</span> }<a name="line.898"></a>
-<span class="sourceLineNo">899</span><a name="line.899"></a>
-<span class="sourceLineNo">900</span> @Override<a name="line.900"></a>
-<span class="sourceLineNo">901</span> public void run() {<a
name="line.901"></a>
-<span class="sourceLineNo">902</span> enteringRun = true;<a
name="line.902"></a>
-<span class="sourceLineNo">903</span> while (this.go) {<a
name="line.903"></a>
-<span class="sourceLineNo">904</span> synchronized (this) {<a
name="line.904"></a>
-<span class="sourceLineNo">905</span> try {<a name="line.905"></a>
-<span class="sourceLineNo">906</span> this.wait(1000 * 10/*Don't
wait for ever*/);<a name="line.906"></a>
-<span class="sourceLineNo">907</span> } catch (InterruptedException
e) {<a name="line.907"></a>
-<span class="sourceLineNo">908</span> LOG.warn("Interrupted
eviction thread ", e);<a name="line.908"></a>
-<span class="sourceLineNo">909</span>
Thread.currentThread().interrupt();<a name="line.909"></a>
-<span class="sourceLineNo">910</span> }<a name="line.910"></a>
-<span class="sourceLineNo">911</span> }<a name="line.911"></a>
-<span class="sourceLineNo">912</span> LruBlockCache cache =
this.cache.get();<a name="line.912"></a>
-<span class="sourceLineNo">913</span> if (cache == null) break;<a
name="line.913"></a>
-<span class="sourceLineNo">914</span> cache.evict();<a
name="line.914"></a>
-<span class="sourceLineNo">915</span> }<a name="line.915"></a>
-<span class="sourceLineNo">916</span> }<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>
@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NN_NAKED_NOTIFY",<a
name="line.918"></a>
-<span class="sourceLineNo">919</span> justification="This is what we
want")<a name="line.919"></a>
-<span class="sourceLineNo">920</span> public void evict() {<a
name="line.920"></a>
-<span class="sourceLineNo">921</span> synchronized (this) {<a
name="line.921"></a>
-<span class="sourceLineNo">922</span> this.notifyAll();<a
name="line.922"></a>
-<span class="sourceLineNo">923</span> }<a name="line.923"></a>
-<span class="sourceLineNo">924</span> }<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span> synchronized void shutdown() {<a
name="line.926"></a>
-<span class="sourceLineNo">927</span> this.go = false;<a
name="line.927"></a>
-<span class="sourceLineNo">928</span> this.notifyAll();<a
name="line.928"></a>
-<span class="sourceLineNo">929</span> }<a name="line.929"></a>
-<span class="sourceLineNo">930</span><a name="line.930"></a>
-<span class="sourceLineNo">931</span> /**<a name="line.931"></a>
-<span class="sourceLineNo">932</span> * Used for the test.<a
name="line.932"></a>
-<span class="sourceLineNo">933</span> */<a name="line.933"></a>
-<span class="sourceLineNo">934</span> boolean isEnteringRun() {<a
name="line.934"></a>
-<span class="sourceLineNo">935</span> return this.enteringRun;<a
name="line.935"></a>
-<span class="sourceLineNo">936</span> }<a name="line.936"></a>
-<span class="sourceLineNo">937</span> }<a name="line.937"></a>
-<span class="sourceLineNo">938</span><a name="line.938"></a>
-<span class="sourceLineNo">939</span> /*<a name="line.939"></a>
-<span class="sourceLineNo">940</span> * Statistics thread. Periodically
prints the cache statistics to the log.<a name="line.940"></a>
-<span class="sourceLineNo">941</span> */<a name="line.941"></a>
-<span class="sourceLineNo">942</span> static class StatisticsThread extends
Thread {<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span> private final LruBlockCache lru;<a
name="line.944"></a>
+<span class="sourceLineNo">843</span><a name="line.843"></a>
+<span class="sourceLineNo">844</span> @Override<a name="line.844"></a>
+<span class="sourceLineNo">845</span> public long getMaxSize() {<a
name="line.845"></a>
+<span class="sourceLineNo">846</span> return this.maxSize;<a
name="line.846"></a>
+<span class="sourceLineNo">847</span> }<a name="line.847"></a>
+<span class="sourceLineNo">848</span><a name="line.848"></a>
+<span class="sourceLineNo">849</span> @Override<a name="line.849"></a>
+<span class="sourceLineNo">850</span> public long getCurrentSize() {<a
name="line.850"></a>
+<span class="sourceLineNo">851</span> return this.size.get();<a
name="line.851"></a>
+<span class="sourceLineNo">852</span> }<a name="line.852"></a>
+<span class="sourceLineNo">853</span><a name="line.853"></a>
+<span class="sourceLineNo">854</span> @Override<a name="line.854"></a>
+<span class="sourceLineNo">855</span> public long getCurrentDataSize() {<a
name="line.855"></a>
+<span class="sourceLineNo">856</span> return this.dataBlockSize.get();<a
name="line.856"></a>
+<span class="sourceLineNo">857</span> }<a name="line.857"></a>
+<span class="sourceLineNo">858</span><a name="line.858"></a>
+<span class="sourceLineNo">859</span> @Override<a name="line.859"></a>
+<span class="sourceLineNo">860</span> public long getFreeSize() {<a
name="line.860"></a>
+<span class="sourceLineNo">861</span> return getMaxSize() -
getCurrentSize();<a name="line.861"></a>
+<span class="sourceLineNo">862</span> }<a name="line.862"></a>
+<span class="sourceLineNo">863</span><a name="line.863"></a>
+<span class="sourceLineNo">864</span> @Override<a name="line.864"></a>
+<span class="sourceLineNo">865</span> public long size() {<a
name="line.865"></a>
+<span class="sourceLineNo">866</span> return getMaxSize();<a
name="line.866"></a>
+<span class="sourceLineNo">867</span> }<a name="line.867"></a>
+<span class="sourceLineNo">868</span><a name="line.868"></a>
+<span class="sourceLineNo">869</span> @Override<a name="line.869"></a>
+<span class="sourceLineNo">870</span> public long getBlockCount() {<a
name="line.870"></a>
+<span class="sourceLineNo">871</span> return this.elements.get();<a
name="line.871"></a>
+<span class="sourceLineNo">872</span> }<a name="line.872"></a>
+<span class="sourceLineNo">873</span><a name="line.873"></a>
+<span class="sourceLineNo">874</span> @Override<a name="line.874"></a>
+<span class="sourceLineNo">875</span> public long getDataBlockCount() {<a
name="line.875"></a>
+<span class="sourceLineNo">876</span> return
this.dataBlockElements.get();<a name="line.876"></a>
+<span class="sourceLineNo">877</span> }<a name="line.877"></a>
+<span class="sourceLineNo">878</span><a name="line.878"></a>
+<span class="sourceLineNo">879</span> EvictionThread getEvictionThread() {<a
name="line.879"></a>
+<span class="sourceLineNo">880</span> return this.evictionThread;<a
name="line.880"></a>
+<span class="sourceLineNo">881</span> }<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span> /*<a name="line.883"></a>
+<span class="sourceLineNo">884</span> * Eviction thread. Sits in waiting
state until an eviction is triggered<a name="line.884"></a>
+<span class="sourceLineNo">885</span> * when the cache size grows above the
acceptable level.<p><a name="line.885"></a>
+<span class="sourceLineNo">886</span> *<a name="line.886"></a>
+<span class="sourceLineNo">887</span> * Thread is triggered into action by
{@link LruBlockCache#runEviction()}<a name="line.887"></a>
+<span class="sourceLineNo">888</span> */<a name="line.888"></a>
+<span class="sourceLineNo">889</span> static class EvictionThread extends
HasThread {<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span> private
WeakReference<LruBlockCache> cache;<a name="line.891"></a>
+<span class="sourceLineNo">892</span> private volatile boolean go = true;<a
name="line.892"></a>
+<span class="sourceLineNo">893</span> // flag set after enter the run
method, used for test<a name="line.893"></a>
+<span class="sourceLineNo">894</span> private boolean enteringRun =
false;<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span> public EvictionThread(LruBlockCache
cache) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>
super(Thread.currentThread().getName() + ".LruBlockCache.EvictionThread");<a
name="line.897"></a>
+<span class="sourceLineNo">898</span> setDaemon(true);<a
name="line.898"></a>
+<span class="sourceLineNo">899</span> this.cache = new
WeakReference<>(cache);<a name="line.899"></a>
+<span class="sourceLineNo">900</span> }<a name="line.900"></a>
+<span class="sourceLineNo">901</span><a name="line.901"></a>
+<span class="sourceLineNo">902</span> @Override<a name="line.902"></a>
+<span class="sourceLineNo">903</span> public void run() {<a
name="line.903"></a>
+<span class="sourceLineNo">904</span> enteringRun = true;<a
name="line.904"></a>
+<span class="sourceLineNo">905</span> while (this.go) {<a
name="line.905"></a>
+<span class="sourceLineNo">906</span> synchronized (this) {<a
name="line.906"></a>
+<span class="sourceLineNo">907</span> try {<a name="line.907"></a>
+<span class="sourceLineNo">908</span> this.wait(1000 * 10/*Don't
wait for ever*/);<a name="line.908"></a>
+<span class="sourceLineNo">909</span> } catch (InterruptedException
e) {<a name="line.909"></a>
+<span class="sourceLineNo">910</span> LOG.warn("Interrupted
eviction thread ", e);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>
Thread.currentThread().interrupt();<a name="line.911"></a>
+<span class="sourceLineNo">912</span> }<a name="line.912"></a>
+<span class="sourceLineNo">913</span> }<a name="line.913"></a>
+<span class="sourceLineNo">914</span> LruBlockCache cache =
this.cache.get();<a name="line.914"></a>
+<span class="sourceLineNo">915</span> if (cache == null) break;<a
name="line.915"></a>
+<span class="sourceLineNo">916</span> cache.evict();<a
name="line.916"></a>
+<span class="sourceLineNo">917</span> }<a name="line.917"></a>
+<span class="sourceLineNo">918</span> }<a name="line.918"></a>
+<span class="sourceLineNo">919</span><a name="line.919"></a>
+<span class="sourceLineNo">920</span>
@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NN_NAKED_NOTIFY",<a
name="line.920"></a>
+<span class="sourceLineNo">921</span> justification="This is what we
want")<a name="line.921"></a>
+<span class="sourceLineNo">922</span> public void evict() {<a
name="line.922"></a>
+<span class="sourceLineNo">923</span> synchronized (this) {<a
name="line.923"></a>
+<span class="sourceLineNo">924</span> this.notifyAll();<a
name="line.924"></a>
+<span class="sourceLineNo">925</span> }<a name="line.925"></a>
+<span class="sourceLineNo">926</span> }<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span> synchronized void shutdown() {<a
name="line.928"></a>
+<span class="sourceLineNo">929</span> this.go = false;<a
name="line.929"></a>
+<span class="sourceLineNo">930</span> this.notifyAll();<a
name="line.930"></a>
+<span class="sourceLineNo">931</span> }<a name="line.931"></a>
+<span class="sourceLineNo">932</span><a name="line.932"></a>
+<span class="sourceLineNo">933</span> /**<a name="line.933"></a>
+<span class="sourceLineNo">934</span> * Used for the test.<a
name="line.934"></a>
+<span class="sourceLineNo">935</span> */<a name="line.935"></a>
+<span class="sourceLineNo">936</span> boolean isEnteringRun() {<a
name="line.936"></a>
+<span class="sourceLineNo">937</span> return this.enteringRun;<a
name="line.937"></a>
+<span class="sourceLineNo">938</span> }<a name="line.938"></a>
+<span class="sourceLineNo">939</span> }<a name="line.939"></a>
+<span class="sourceLineNo">940</span><a name="line.940"></a>
+<span class="sourceLineNo">941</span> /*<a name="line.941"></a>
+<span class="sourceLineNo">942</span> * Statistics thread. Periodically
prints the cache statistics to the log.<a name="line.942"></a>
+<span class="sourceLineNo">943</span> */<a name="line.943"></a>
+<span class="sourceLineNo">944</span> static class StatisticsThread extends
Thread {<a name="line.944"></a>
<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span> public StatisticsThread(LruBlockCache
lru) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span> super("LruBlockCacheStats");<a
name="line.947"></a>
-<span class="sourceLineNo">948</span> setDaemon(true);<a
name="line.948"></a>
-<span class="sourceLineNo">949</span> this.lru = lru;<a
name="line.949"></a>
-<span class="sourceLineNo">950</span> }<a name="line.950"></a>
-<span class="sourceLineNo">951</span><a name="line.951"></a>
-<span class="sourceLineNo">952</span> @Override<a name="line.952"></a>
-<span class="sourceLineNo">953</span> public void run() {<a
name="line.953"></a>
-<span class="sourceLineNo">954</span> lru.logStats();<a
name="line.954"></a>
-<span class="sourceLineNo">955</span> }<a name="line.955"></a>
-<span class="sourceLineNo">956</span> }<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span> public void logStats() {<a
name="line.958"></a>
-<span class="sourceLineNo">959</span> // Log size<a name="line.959"></a>
-<span class="sourceLineNo">960</span> long totalSize = heapSize();<a
name="line.960"></a>
-<span class="sourceLineNo">961</span> long freeSize = maxSize -
totalSize;<a name="line.961"></a>
-<span class="sourceLineNo">962</span> LruBlockCache.LOG.info("totalSize=" +
StringUtils.byteDesc(totalSize) + ", " +<a name="line.962"></a>
-<span class="sourceLineNo">963</span> "freeSize=" +
StringUtils.byteDesc(freeSize) + ", " +<a name="line.963"></a>
-<span class="sourceLineNo">964</span> "max=" +
StringUtils.byteDesc(this.maxSize) + ", " +<a name="line.964"></a>
-<span class="sourceLineNo">965</span> "blockCount=" + getBlockCount() +
", " +<a name="line.965"></a>
-<span class="sourceLineNo">966</span> "accesses=" +
stats.getRequestCount() + ", " +<a name="line.966"></a>
-<span class="sourceLineNo">967</span> "hits=" + stats.getHitCount() +
", " +<a name="line.967"></a>
-<span class="sourceLineNo">968</span> "hitRatio=" +
(stats.getHitCount() == 0 ?<a name="line.968"></a>
-<span class="sourceLineNo">969</span> "0" :
(StringUtils.formatPercent(stats.getHitRatio(), 2)+ ", ")) + ", " +<a
name="line.969"></a>
-<span class="sourceLineNo">970</span> "cachingAccesses=" +
stats.getRequestCachingCount() + ", " +<a name="line.970"></a>
-<span class="sourceLineNo">971</span> "cachingHits=" +
stats.getHitCachingCount() + ", " +<a name="line.971"></a>
-<span class="sourceLineNo">972</span> "cachingHitsRatio=" +
(stats.getHitCachingCount() == 0 ?<a name="line.972"></a>
-<span class="sourceLineNo">973</span> "0,":
(StringUtils.formatPercent(stats.getHitCachingRatio(), 2) + ", ")) +<a
name="line.973"></a>
-<span class="sourceLineNo">974</span> "evictions=" +
stats.getEvictionCount() + ", " +<a name="line.974"></a>
-<span class="sourceLineNo">975</span> "evicted=" +
stats.getEvictedCount() + ", " +<a name="line.975"></a>
-<span class="sourceLineNo">976</span> "evictedPerRun=" +
stats.evictedPerEviction());<a name="line.976"></a>
-<span class="sourceLineNo">977</span> }<a name="line.977"></a>
-<span class="sourceLineNo">978</span><a name="line.978"></a>
-<span class="sourceLineNo">979</span> /**<a name="line.979"></a>
-<span class="sourceLineNo">980</span> * Get counter statistics for this
cache.<a name="line.980"></a>
-<span class="sourceLineNo">981</span> *<a name="line.981"></a>
-<span class="sourceLineNo">982</span> * <p>Includes: total accesses,
hits, misses, evicted blocks, and runs<a name="line.982"></a>
-<span class="sourceLineNo">983</span> * of the eviction processes.<a
name="line.983"></a>
-<span class="sourceLineNo">984</span> */<a name="line.984"></a>
-<span class="sourceLineNo">985</span> public CacheStats getStats() {<a
name="line.985"></a>
-<span class="sourceLineNo">986</span> return this.stats;<a
name="line.986"></a>
-<span class="sourceLineNo">987</span> }<a name="line.987"></a>
-<span class="sourceLineNo">988</span><a name="line.988"></a>
-<span class="sourceLineNo">989</span> public final static long
CACHE_FIXED_OVERHEAD = ClassSize.align(<a name="line.989"></a>
-<span class="sourceLineNo">990</span> (4 * Bytes.SIZEOF_LONG) + (11 *
ClassSize.REFERENCE) +<a name="line.990"></a>
-<span class="sourceLineNo">991</span> (6 * Bytes.SIZEOF_FLOAT) + (2 *
Bytes.SIZEOF_BOOLEAN)<a name="line.991"></a>
-<span class="sourceLineNo">992</span> + ClassSize.OBJECT);<a
name="line.992"></a>
-<span class="sourceLineNo">993</span><a name="line.993"></a>
-<span class="sourceLineNo">994</span> @Override<a name="line.994"></a>
-<span class="sourceLineNo">995</span> public long heapSize() {<a
name="line.995"></a>
-<span class="sourceLineNo">996</span> return getCurrentSize();<a
name="line.996"></a>
-<span class="sourceLineNo">997</span> }<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span> private static long
calculateOverhead(long maxSize, long blockSize, int concurrency) {<a
name="line.999"></a>
-<span class="sourceLineNo">1000</span> // FindBugs
ICAST_INTEGER_MULTIPLY_CAST_TO_LONG<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span> return CACHE_FIXED_OVERHEAD +
ClassSize.CONCURRENT_HASHMAP<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span> + ((long) Math.ceil(maxSize *
1.2 / blockSize) * ClassSize.CONCURRENT_HASHMAP_ENTRY)<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span> + ((long) concurrency *
ClassSize.CONCURRENT_HASHMAP_SEGMENT);<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span> }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span><a name="line.1005"></a>
-<span class="sourceLineNo">1006</span> @Override<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span> public Iterator<CachedBlock>
iterator() {<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span> final Iterator<LruCachedBlock>
iterator = map.values().iterator();<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span><a name="line.1009"></a>
-<span class="sourceLineNo">1010</span> return new
Iterator<CachedBlock>() {<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span> private final long now =
System.nanoTime();<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span><a name="line.1012"></a>
-<span class="sourceLineNo">1013</span> @Override<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span> public boolean hasNext() {<a
name="line.1014"></a>
-<span class="sourceLineNo">1015</span> return iterator.hasNext();<a
name="line.1015"></a>
-<span class="sourceLineNo">1016</span> }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span> @Override<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span> public CachedBlock next() {<a
name="line.1019"></a>
-<span class="sourceLineNo">1020</span> final LruCachedBlock b =
iterator.next();<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span> return new CachedBlock() {<a
name="line.1021"></a>
-<span class="sourceLineNo">1022</span> @Override<a
name="line.1022"></a>
-<span class="sourceLineNo">1023</span> public String toString() {<a
name="line.1023"></a>
-<span class="sourceLineNo">1024</span> return
BlockCacheUtil.toString(this, now);<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span> }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span> @Override<a
name="line.1027"></a>
-<span class="sourceLineNo">1028</span> public BlockPriority
getBlockPriority() {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span> return b.getPriority();<a
name="line.1029"></a>
-<span class="sourceLineNo">1030</span> }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span><a name="line.1031"></a>
-<span class="sourceLineNo">1032</span> @Override<a
name="line.1032"></a>
-<span class="sourceLineNo">1033</span> public BlockType
getBlockType() {<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span> return
b.getBuffer().getBlockType();<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span> }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span><a name="line.1036"></a>
-<span class="sourceLineNo">1037</span> @Override<a
name="line.1037"></a>
-<span class="sourceLineNo">1038</span> public long getOffset() {<a
name="line.1038"></a>
-<span class="sourceLineNo">1039</span> return
b.getCacheKey().getOffset();<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span> }<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span><a name="line.1041"></a>
-<span class="sourceLineNo">1042</span> @Override<a
name="line.1042"></a>
-<span class="sourceLineNo">1043</span> public long getSize() {<a
name="line.1043"></a>
-<span class="sourceLineNo">1044</span> return
b.getBuffer().heapSize();<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span> }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span><a name="line.1046"></a>
-<span class="sourceLineNo">1047</span> @Override<a
name="line.1047"></a>
-<span class="sourceLineNo">1048</span> public long getCachedTime()
{<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span> return b.getCachedTime();<a
name="line.1049"></a>
-<span class="sourceLineNo">1050</span> }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span><a name="line.1051"></a>
-<span class="sourceLineNo">1052</span> @Override<a
name="line.1052"></a>
-<span class="sourceLineNo">1053</span> public String getFilename()
{<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span> return
b.getCacheKey().getHfileName();<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span> }<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span><a name="line.1056"></a>
-<span class="sourceLineNo">1057</span> @Override<a
name="line.1057"></a>
-<span class="sourceLineNo">1058</span> public int
compareTo(CachedBlock other) {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span> int diff =
this.getFilename().compareTo(other.getFilename());<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span> if (diff != 0) return
diff;<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span> diff =
Long.compare(this.getOffset(), other.getOffset());<a name="line.1061"></a>
+<span class="sourceLineNo">946</span> private final LruBlockCache lru;<a
name="line.946"></a>
+<span class="sourceLineNo">947</span><a name="line.947"></a>
+<span class="sourceLineNo">948</span> public StatisticsThread(LruBlockCache
lru) {<a name="line.948"></a>
+<span class="sourceLineNo">949</span> super("LruBlockCacheStats");<a
name="line.949"></a>
+<span class="sourceLineNo">950</span> setDaemon(true);<a
name="line.950"></a>
+<span class="sourceLineNo">951</span> this.lru = lru;<a
name="line.951"></a>
+<span class="sourceLineNo">952</span> }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span> @Override<a name="line.954"></a>
+<span class="sourceLineNo">955</span> public void run() {<a
name="line.955"></a>
+<span class="sourceLineNo">956</span> lru.logStats();<a
name="line.956"></a>
+<span class="sourceLineNo">957</span> }<a name="line.957"></a>
+<span class="sourceLineNo">958</span> }<a name="line.958"></a>
+<span class="sourceLineNo">959</span><a name="line.959"></a>
+<span class="sourceLineNo">960</span> public void logStats() {<a
name="line.960"></a>
+<span class="sourceLineNo">961</span> // Log size<a name="line.961"></a>
+<span class="sourceLineNo">962</span> long totalSize = heapSize();<a
name="line.962"></a>
+<span class="sourceLineNo">963</span> long freeSize = maxSize -
totalSize;<a name="line.963"></a>
+<span class="sourceLineNo">964</span> LruBlockCache.LOG.info("totalSize=" +
StringUtils.byteDesc(totalSize) + ", " +<a name="line.964"></a>
+<span class="sourceLineNo">965</span> "freeSize=" +
StringUtils.byteDesc(freeSize) + ", " +<a name="line.965"></a>
+<span class="sourceLineNo">966</span> "max=" +
StringUtils.byteDesc(this.maxSize) + ", " +<a name="line.966"></a>
+<span class="sourceLineNo">967</span> "blockCount=" + getBlockCount() +
", " +<a name="line.967"></a>
+<span class="sourceLineNo">968</span> "accesses=" +
stats.getRequestCount() + ", " +<a name="line.968"></a>
+<span class="sourceLineNo">969</span> "hits=" + stats.getHitCount() +
", " +<a name="line.969"></a>
+<span class="sourceLineNo">970</span> "hitRatio=" +
(stats.getHitCount() == 0 ?<a name="line.970"></a>
+<span class="sourceLineNo">971</span> "0" :
(StringUtils.formatPercent(stats.getHitRatio(), 2)+ ", ")) + ", " +<a
name="line.971"></a>
+<span class="sourceLineNo">972</span> "cachingAccesses=" +
stats.getRequestCachingCount() + ", " +<a name="line.972"></a>
+<span class="sourceLineNo">973</span> "cachingHits=" +
stats.getHitCachingCount() + ", " +<a name="line.973"></a>
+<span class="sourceLineNo">974</span> "cachingHitsRatio=" +
(stats.getHitCachingCount() == 0 ?<a name="line.974"></a>
+<span class="sourceLineNo">975</span> "0,":
(StringUtils.formatPercent(stats.getHitCachingRatio(), 2) + ", ")) +<a
name="line.975"></a>
+<span class="sourceLineNo">976</span> "evictions=" +
stats.getEvictionCount() + ", " +<a name="line.976"></a>
+<span class="sourceLineNo">977</span> "evicted=" +
stats.getEvictedCount() + ", " +<a name="line.977"></a>
+<span class="sourceLineNo">978</span> "evictedPerRun=" +
stats.evictedPerEviction());<a name="line.978"></a>
+<span class="sourceLineNo">979</span> }<a name="line.979"></a>
+<span class="sourceLineNo">980</span><a name="line.980"></a>
+<span class="sourceLineNo">981</span> /**<a name="line.981"></a>
+<span class="sourceLineNo">982</span> * Get counter statistics for this
cache.<a name="line.982"></a>
+<span class="sourceLineNo">983</span> *<a name="line.983"></a>
+<span class="sourceLineNo">984</span> * <p>Includes: total accesses,
hits, misses, evicted blocks, and runs<a name="line.984"></a>
+<span class="sourceLineNo">985</span> * of the eviction processes.<a
name="line.985"></a>
+<span class="sourceLineNo">986</span> */<a name="line.986"></a>
+<span class="sourceLineNo">987</span> public CacheStats getStats() {<a
name="line.987"></a>
+<span class="sourceLineNo">988</span> return this.stats;<a
name="line.988"></a>
+<span class="sourceLineNo">989</span> }<a name="line.989"></a>
+<span class="sourceLineNo">990</span><a name="line.990"></a>
+<span class="sourceLineNo">991</span> public final static long
CACHE_FIXED_OVERHEAD = ClassSize.align(<a name="line.991"></a>
+<span class="sourceLineNo">992</span> (4 * Bytes.SIZEOF_LONG) + (11 *
ClassSize.REFERENCE) +<a name="line.992"></a>
+<span class="sourceLineNo">993</span> (6 * Bytes.SIZEOF_FLOAT) + (2 *
Bytes.SIZEOF_BOOLEAN)<a name="line.993"></a>
+<span class="sourceLineNo">994</span> + ClassSize.OBJECT);<a
name="line.994"></a>
+<span class="sourceLineNo">995</span><a name="line.995"></a>
+<span class="sourceLineNo">996</span> @Override<a name="line.996"></a>
+<span class="sourceLineNo">997</span> public long heapSize() {<a
name="line.997"></a>
+<span class="sourceLineNo">998</span> return getCurrentSize();<a
name="line.998"></a>
+<span class="sourceLineNo">999</span> }<a name="line.999"></a>
+<span class="sourceLineNo">1000</span><a name="line.1000"></a>
+<span class="sourceLineNo">1001</span> private static long
calculateOverhead(long maxSize, long blockSize, int concurrency) {<a
name="line.1001"></a>
+<span class="sourceLineNo">1002</span> // FindBugs
ICAST_INTEGER_MULTIPLY_CAST_TO_LONG<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span> return CACHE_FIXED_OVERHEAD +
ClassSize.CONCURRENT_HASHMAP<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span> + ((long) Math.ceil(maxSize *
1.2 / blockSize) * ClassSize.CONCURRENT_HASHMAP_ENTRY)<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span> + ((long) concurrency *
ClassSize.CONCURRENT_HASHMAP_SEGMENT);<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span> }<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span><a name="line.1007"></a>
+<span class="sourceLineNo">1008</span> @Override<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span> public Iterator<CachedBlock>
iterator() {<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span> final Iterator<LruCachedBlock>
iterator = map.values().iterator();<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span><a name="line.1011"></a>
+<span class="sourceLineNo">1012</span> return new
Iterator<CachedBlock>() {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span> private final long now =
System.nanoTime();<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span><a name="line.1014"></a>
+<span class="sourceLineNo">1015</span> @Override<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span> public boolean hasNext() {<a
name="line.1016"></a>
+<span class="sourceLineNo">1017</span> return iterator.hasNext();<a
name="line.1017"></a>
+<span class="sourceLineNo">1018</span> }<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span><a name="line.1019"></a>
+<span class="sourceLineNo">1020</span> @Override<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span> public CachedBlock next() {<a
name="line.1021"></a>
+<span class="sourceLineNo">1022</span> final LruCachedBlock b =
iterator.next();<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span> return new CachedBlock() {<a
name="line.1023"></a>
+<span class="sourceLineNo">1024</span> @Override<a
name="line.1024"></a>
+<span class="sourceLineNo">1025</span> public String toString() {<a
name="line.1025"></a>
+<span class="sourceLineNo">1026</span> return
BlockCacheUtil.toString(this, now);<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span> }<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span><a name="line.1028"></a>
+<span class="sourceLineNo">1029</span> @Override<a
name="line.1029"></a>
+<span class="sourceLineNo">1030</span> public BlockPriority
getBlockPriority() {<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span> return b.getPriority();<a
name="line.1031"></a>
+<span class="sourceLineNo">1032</span> }<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span><a name="line.1033"></a>
+<span class="sourceLineNo">1034</span> @Override<a
name="line.1034"></a>
+<span class="sourceLineNo">1035</span> public BlockType
getBlockType() {<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span> return
b.getBuffer().getBlockType();<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span> }<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span><a name="line.1038"></a>
+<span class="sourceLineNo">1039</span> @Override<a
name="line.1039"></a>
+<span class="sourceLineNo">1040</span> public long getOffset() {<a
name="line.1040"></a>
+<span class="sourceLineNo">1041</span> return
b.getCacheKey().getOffset();<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span> }<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span><a name="line.1043"></a>
+<span class="sourceLineNo">1044</span> @Override<a
name="line.1044"></a>
+<span class="sourceLineNo">1045</span> public long getSize() {<a
name="line.1045"></a>
+<span class="sourceLineNo">1046</span> return
b.getBuffer().heapSize();<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span> }<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span><a name="line.1048"></a>
+<span class="sourceLineNo">1049</span> @Override<a
name="line.1049"></a>
+<span class="sourceLineNo">1050</span> public long getCachedTime()
{<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span> return b.getCachedTime();<a
name="line.1051"></a>
+<span class="sourceLineNo">1052</span> }<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span><a name="line.1053"></a>
+<span class="sourceLineNo">1054</span> @Override<a
name="line.1054"></a>
+<span class="sourceLineNo">1055</span> public String getFilename()
{<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span> return
b.getCacheKey().getHfileName();<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span> }<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span><a name="line.1058"></a>
+<span class="sourceLineNo">1059</span> @Override<a
name="line.1059"></a>
+<span class="sourceLineNo">1060</span> public int
compareTo(CachedBlock other) {<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span> int diff =
this.getFilename().compareTo(other.getFilename());<a name="line.1061"></a>
<span class="sourceLineNo">1062</span> if (diff != 0) return
diff;<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span> if (other.getCachedTime()
< 0 || this.getCachedTime() < 0) {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span> throw new
IllegalStateException(this.getCachedTime() + ", " + other.getCachedTime());<a
name="line.1064"></a>
-<span class="sourceLineNo">1065</span> }<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span> return
Long.compare(other.getCachedTime(), this.getCachedTime());<a
name="line.1066"></a>
-<span class="sourceLineNo">1067</span> }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span><a name="line.1068"></a>
-<span class="sourceLineNo">1069</span> @Override<a
name="line.1069"></a>
-<span class="sourceLineNo">1070</span> public int hashCode() {<a
name="line.1070"></a>
-<span class="sourceLineNo">1071</span> return b.hashCode();<a
name="line.1071"></a>
-<span class="sourceLineNo">1072</span> }<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span><a name="line.1073"></a>
-<span class="sourceLineNo">1074</span> @Override<a
name="line.1074"></a>
-<span class="sourceLineNo">1075</span> public boolean equals(Object
obj) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span> if (obj instanceof
CachedBlock) {<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span> CachedBlock cb =
(CachedBlock)obj;<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span> return compareTo(cb) ==
0;<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span> } else {<a
name="line.1079"></a>
-<span class="sourceLineNo">1080</span> return false;<a
name="line.1080"></a>
-<span class="sourceLineNo">1081</span> }<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span> }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span> };<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span> }<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span><a name="line.1085"></a>
-<span class="sourceLineNo">1086</span> @Override<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span> public void remove() {<a
name="line.1087"></a>
-<span class="sourceLineNo">1088</span> throw new
UnsupportedOperationException();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span> }<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span> };<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span> }<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span><a name="line.1092"></a>
-<span class="sourceLineNo">1093</span> // Simple calculators of sizes given
factors and maxSize<a name="line.1093"></a>
+<span class="sourceLineNo">1063</span> diff =
Long.compare(this.getOffset(), other.getOffset());<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span> if (diff != 0) return
diff;<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span> if (other.getCachedTime()
< 0 || this.getCachedTime() < 0) {<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span> throw new
IllegalStateException(this.getCachedTime() + ", " + other.getCachedTime());<a
name="line.1066"></a>
+<span class="sourceLineNo">1067</span> }<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span> return
Long.compare(other.getCachedTime(), this.getCachedTime());<a
name="line.1068"></a>
+<span class="sourceLineNo">1069</span> }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span><a name="line.1070"></a>
+<span class="sourceLineNo">1071</span> @Override<a
name="line.1071"></a>
+<span class="sourceLineNo">1072</span> public int hashCode() {<a
name="line.1072"></a>
+<span class="sourceLineNo">1073</span> return b.hashCode();<a
name="line.1073"></a>
+<span class="sourceLineNo">1074</span> }<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span><a name="line.1075"></a>
+<span class="sourceLineNo">1076</span> @Override<a
name="line.1076"></a>
+<span class="sourceLineNo">1077</span> public boolean equals(Object
obj) {<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span> if (obj instanceof
CachedBlock) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span> CachedBlock cb =
(CachedBlock)obj;<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span> return compareTo(cb) ==
0;<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span> } else {<a
name="line.1081"></a>
+<span class="sourceLineNo">1082</span> return false;<a
name="line.1082"></a>
+<span class="sourceLineNo">1083</span> }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span> }<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span> };<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span> }<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span><a name="line.1087"></a>
+<span class="sourceLineNo">1088</span> @Override<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span> public void remove() {<a
name="line.1089"></a>
+<span class="sourceLineNo">1090</span> throw new
UnsupportedOperationException();<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span> }<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span> };<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span> }<a name="line.1093"></a>
<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span> long acceptableSize() {<a
name="line.1095"></a>
-<span class="sourceLineNo">1096</span> return (long)Math.floor(this.maxSize
* this.acceptableFactor);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span> }<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span> private long minSize() {<a
name="line.1098"></a>
-<span class="sourceLineNo">1099</span> return (long)Math.floor(this.maxSize
* this.minFactor);<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span> }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span> private long singleSize() {<a
name="line.1101"></a>
-<span class="sourceLineNo">1102</span> return (long)Math.floor(this.maxSize
* this.singleFactor * this.minFactor);<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span> }<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span> private long multiSize() {<a
name="line.1104"></a>
-<span class="sourceLineNo">1105</span> return (long)Math.floor(this.maxSize
* this.multiFactor * this.minFactor);<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span> }<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span> private long memorySize() {<a
name="line.1107"></a>
-<span class="sourceLineNo">1108</span> return (long)
Math.floor(this.maxSize * this.memoryFactor * this.minFactor);<a
name="line.1108"></a>
-<span class="sourceLineNo">1109</span> }<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span><a name="line.1110"></a>
-<span class="sourceLineNo">1111</span> public void shutdown() {<a
name="line.1111"></a>
-<span class="sourceLineNo">1112</span> if (victimHandler != null) {<a
name="line.1112"></a>
-<span class="sourceLineNo">1113</span> victimHandler.shutdown();<a
name="line.1113"></a>
-<span class="sourceLineNo">1114</span> }<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>
this.scheduleThreadPool.shutdown();<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span> for (int i = 0; i < 10; i++) {<a
name="line.1116"></a>
-<span class="sourceLineNo">1117</span> if
(!this.scheduleThreadPool.isShutdown()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span> try {<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span> Thread.sleep(10);<a
name="line.1119"></a>
-<span class="sourceLineNo">1120</span> } catch (InterruptedException e)
{<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span> LOG.warn("Interrupted while
sleeping");<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>
Thread.currentThread().interrupt();<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span> break;<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span> }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span> }<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span> }<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span><a name="line.1127"></a>
-<span class="sourceLineNo">1128</span> if
(!this.scheduleThreadPool.isShutdown()) {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span> List<Runnable> runnables =
this.scheduleThreadPool.shutdownNow();<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span> LOG.debug("Still running " +
runnables);<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span> }<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span> this.evictionThread.shutdown();<a
name="line.1132"></a>
-<span class="sourceLineNo">1133</span> }<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span><a name="line.1134"></a>
-<span class="sourceLineNo">1135</span> /** Clears the cache. Used in tests.
*/<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span> @VisibleForTesting<a
name="line.1136"></a>
-<span class="sourceLineNo">1137</span> public void clearCache() {<a
name="line.1137"></a>
-<span class="sourceLineNo">1138</span> this.map.clear();<a
name="line.1138"></a>
-<span class="sourceLineNo">1139</span> this.elements.set(0);<a
name="line.1139"></a>
-<span class="sourceLineNo">1140</span> }<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span><a name="line.1141"></a>
-<span class="sourceLineNo">1142</span> /**<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span> * Used in testing. May be very
inefficient.<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span> *<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span> * @return the set of cached file
names<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span> */<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span> @VisibleForTesting<a
name="line.1147"></a>
-<span class="sourceLineNo">1148</span> SortedSet<String>
getCachedFileNamesForTest() {<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span> SortedSet<String> fileNames =
new TreeSet<>();<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span> for (BlockCacheKey cacheKey :
map.keySet()) {<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>
fileNames.add(cacheKey.getHfileName());<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span> }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span> return fileNames;<a
name="line.1153"></a>
-<span class="sourceLineNo">1154</span> }<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span><a name="line.1155"></a>
-<span class="sourceLineNo">1156</span> @VisibleForTesting<a
name="line.1156"></a>
-<span class="sourceLineNo">1157</span> Map<BlockType, Integer>
getBlockTypeCountsForTest() {<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span> Map<BlockType, Integer> counts
= new EnumMap<>(BlockType.class);<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span> for (LruCachedBlock cb :
map.values()) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span> BlockType blockType =
cb.getBuffer().getBlockType();<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span> Integer count =
counts.get(blockType);<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span> counts.put(blockType, (count ==
null ? 0 : count) + 1);<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span> }<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span> return counts;<a
name="line.1164"></a>
-<span class="sourceLineNo">1165</span> }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span> @VisibleForTesting<a
name="line.1167"></a>
-<span class="sourceLineNo">1168</span> public Map<DataBlockEncoding,
Integer> getEncodingCountsForTest() {<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span> Map<DataBlockEncoding,
Integer> counts = new EnumMap<>(DataBlockEncoding.class);<a
name="line.1169"></a>
-<span class="sourceLineNo">1170</span> for (LruCachedBlock block :
map.values()) {<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span> DataBlockEncoding encoding =
((HFileBlock) block.getBuffer()).getDataBlockEncoding();<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span> Integer count =
counts.get(encoding);<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span> counts.put(encoding, (count ==
null ? 0 : count) + 1);<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span> }<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span> return counts;<a
name="line.1175"></a>
-<span class="sourceLineNo">1176</span> }<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span><a name="line.1177"></a>
-<span class="sourceLineNo">1178</span> public void setVictimCache(BlockCache
handler) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span> assert victimHandler == null;<a
name="line.1179"></a>
-<span class="sourceLineNo">1180</span> victimHandler = handler;<a
name="line.1180"></a>
-<span class="sourceLineNo">1181</span> }<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span><a name="line.1182"></a>
-<span class="sourceLineNo">1183</span> @VisibleForTesting<a
name="line.1183"></a>
-<span class="sourceLineNo">1184</span> Map<BlockCacheKey,
LruCachedBlock> getMapForTests() {<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span> return map;<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span> }<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span><a name="line.1187"></a>
-<span class="sourceLineNo">1188</span> BlockCache getVictimHandler() {<a
name="line.1188"></a>
-<span class="sourceLineNo">1189</span> return this.victimHandler;<a
name="line.1189"></a>
-<span class="sourceLineNo">1190</span> }<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span><a name="line.1191"></a>
-<span class="sourceLineNo">1192</span> @Override<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span> @JsonIgnore<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span> public BlockCache[] getBlockCaches()
{<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span> if (victimHandler != null)<a
name="line.1195"></a>
-<span class="sourceLineNo">1196</span> return new BlockCache[] {this,
this.victimHandler};<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span> return null;<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span> }<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span><a name="line.1199"></a>
-<span class="sourceLineNo">1200</span> @Override<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span> public void returnBlock(BlockCacheKey
cacheKey, Cacheable block) {<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span> // There is no SHARED type here in
L1. But the block might have been served from the Victim<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span> // handler L2 cache. (when the
Combined mode = false). So just try return this block to<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span> // L2 victim handler cache.<a
name="line.1204"></a>
-<span class="sourceLineNo">1205</span> // Note : In case of
CombinedBlockCache, we will have this victimHandler configured for L1<a
name="line.1205"></a>
-<span class="sourceLineNo">1206</span> // cache. But CombinedBlockCache
will only call returnBlock on L2 cache.<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span> if (this.victimHandler != null) {<a
name="line.1207"></a>
-<span class="sourceLineNo">1208</span>
this.victimHandler.returnBlock(cacheKey, block);<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span> }<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span> }<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>}<a name="line.1211"></a>
+<span class="sourceLineNo">1095</span> // Simple calculators of sizes given
factors and maxSize<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span><a name="line.1096"></a>
+<span class="sourceLineNo">1097</span> long acceptableSize() {<a
name="line.1097"></a>
+<span class="sourceLineNo">1098</span> return (long)Math.floor(this.maxSize
* this.acceptableFactor);<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span> }<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span> private long minSize() {<a
name="line.1100"></a>
+<span class="sourceLineNo">1101</span> return (long)Math.floor(this.maxSize
* this.minFactor);<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span> }<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span> private long singleSize() {<a
name="line.1103"></a>
+<span class="sourceLineNo">1104</span> return (long)Math.floor(this.maxSize
* this.singleFactor * this.minFactor);<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span> }<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span> private long multiSize() {<a
name="line.1106"></a>
+<span class="sourceLineNo">1107</span> return (long)Math.floor(this.maxSize
* this.multiFactor * this.minFactor);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span> }<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span> private long memorySize() {<a
name="line.1109"></a>
+<span class="sourceLineNo">1110</span> return (long)
Math.floor(this.maxSize * this.memoryFactor * this.minFactor);<a
name="line.1110"></a>
+<span class="sourceLineNo">1111</span> }<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span><a name="line.1112"></a>
+<span class="sourceLineNo">1113</span> public void shutdown() {<a
name="line.1113"></a>
+<span class="sourceLineNo">1114</span> if (victimHandler != null) {<a
name="line.1114"></a>
+<span class="sourceLineNo">1115</span> victimHandler.shutdown();<a
name="line.1115"></a>
+<span class="sourceLineNo">1116</span> }<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>
this.scheduleThreadPool.shutdown();<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span> for (int i = 0; i < 10; i++) {<a
name="line.1118"></a>
+<span class="sourceLineNo">1119</span> if
(!this.scheduleThreadPool.isShutdown()) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span> try {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span> Thread.sleep(10);<a
name="line.1121"></a>
+<span class="sourceLineNo">1122</span> } catch (InterruptedException e)
{<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span> LOG.warn("Interrupted while
sleeping");<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>
Thread.currentThread().interrupt();<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span> break;<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span> }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span> }<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span> }<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span><a name="line.1129"></a>
+<span class="sourceLineNo">1130</span> if
(!this.scheduleThreadPool.isShutdown()) {<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span> List<Runnable> runnables =
this.scheduleThreadPool.shutdownNow();<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span> LOG.debug("Still running " +
runnables);<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span> }<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span> this.evictionThread.shutdown();<a
name="line.1134"></a>
+<span class="sourceLineNo">1135</span> }<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span> /** Clears the cache. Used in tests.
*/<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span> @VisibleForTesting<a
name="line.1138"></a>
+<span class="sourceLineNo">1139</span> public void clearCache() {<a
name="line.1139"></a>
+<span class="sourceLineNo">1140</span> this.map.clear();<a
name="line.1140"></a>
+<span class="sourceLineNo">1141</span> this.elements.set(0);<a
name="line.1141"></a>
+<span class="sourceLineNo">1142</span> }<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span><a name="line.1143"></a>
+<span class="sourceLineNo">1144</span> /**<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span> * Used in testing. May be very
inefficient.<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span> *<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span> * @return the set of cached file
names<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span> */<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span> @VisibleForTesting<a
name="line.1149"></a>
+<span class="sourceLineNo">1150</span> SortedSet<String>
getCachedFileNamesForTest() {<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span> SortedSet<String> fileNames =
new TreeSet<>();<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span> for (BlockCacheKey cacheKey :
map.keySet()) {<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>
fileNames.add(cacheKey.getHfileName());<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span> }<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span> return fileNames;<a
name="line.1155"></a>
+<span class="sourceLineNo">1156</span> }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span><a name="line.1157"></a>
+<span class="sourceLineNo">1158</span> @VisibleForTesting<a
name="line.1158"></a>
+<span class="sourceLineNo">1159</span> Map<BlockType, Integer>
getBlockTypeCountsForTest() {<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span> Map<BlockType, Integer> counts
= new EnumMap<>(BlockType.class);<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span> for (LruCachedBlock cb :
map.values()) {<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span> BlockType blockType =
cb.getBuffer().getBlockType();<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span> Integer count =
counts.get(blockType);<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span> counts.put(blockType, (count ==
null ? 0 : count) + 1);<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span> }<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span> return counts;<a
name="line.1166"></a>
+<span class="sourceLineNo">1167</span> }<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span><a name="line.1168"></a>
+<span class="sourceLineNo">1169</span> @VisibleForTesting<a
name="line.1169"></a>
+<span class="sourceLineNo">1170</span> public Map<DataBlockEncoding,
Integer> getEncodingCountsForTest() {<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span> Map<DataBlockEncoding,
Integer> counts = new EnumMap<>(DataBlockEncoding.class);<a
name="line.1171"></a>
+<span class="sourceLineNo">1172</span> for (LruCachedBlock block :
map.values()) {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span> DataBlockEncoding encoding =
((HFileBlock) block.getBuffer()).getDataBlockEncoding();<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span> Integer count =
counts.get(encoding);<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span> counts.put(encoding, (count ==
null ? 0 : count) + 1);<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span> }<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span> return counts;<a
name="line.1177"></a>
+<span class="sourceLineNo">1178</span> }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span><a name="line.1179"></a>
+<span class="sourceLineNo">1180</span> public void setVictimCache(BlockCache
handler) {<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span> assert victimHandler == null;<a
name="line.1181"></a>
+<span class="sourceLineNo">1182</span> victimHandler = handler;<a
name="line.1182"></a>
+<span class="sourceLineNo">1183</span> }<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span><a name="line.1184"></a>
+<span class="sourceLineNo">1185</span> @VisibleForTesting<a
name="line.1185"></a>
+<span class="sourceLineNo">1186</span> Map<BlockCacheKey,
LruCachedBlock> getMapForTests() {<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span> return map;<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span> }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span> BlockCache getVictimHandler() {<a
name="line.1190"></a>
+<span class="sourceLineNo">1191</span> return this.victimHandler;<a
name="line.1191"></a>
+<span class="sourceLineNo">1192</span> }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span> @Override<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span> @JsonIgnore<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span> public BlockCache[] getBlockCaches()
{<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span> if (victimHandler != null)<a
name="line.1197"></a>
+<span class="sourceLineNo">1198</span> return new BlockCache[] {this,
this.victimHandler};<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span> return null;<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span> }<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span><a name="line.1201"></a>
+<span class="sourceLineNo">1202</span> @Override<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span> public void returnBlock(BlockCacheKey
cacheKey, Cacheable block) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span> // There is no SHARED type here in
L1. But the block might have been served from the Victim<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span> // handler L2 cache. (when the
Combined mode = false). So just try return this block to<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span> // L2 victim handler cache.<a
name="line.1206"></a>
+<span class="sourceLineNo">1207</span> // Note : In case of
CombinedBlockCache, we will have this victimHandler configured for L1<a
name="line.1207"></a>
+<span class="sourceLineNo">1208</span> // cache. But CombinedBlockCache
will only call returnBlock on L2 cache.<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span> if (this.victimHandler != null) {<a
name="line.1209"></a>
+<span class="sourceLineNo">1210</span>
this.victimHandler.returnBlock(cacheKey, block);<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span> }<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span> }<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>}<a name="line.1213"></a>