Index: src/main/java/org/apache/hadoop/hbase/io/hfile/CacheConfig.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/io/hfile/CacheConfig.java (revision 7615) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/CacheConfig.java (revision 7652) @@ -344,7 +344,7 @@ StringUtils.humanReadableInt(cacheSize)); if (offHeapCacheSize <= 0) { globalBlockCache = new LruBlockCache(cacheSize, - StoreFile.DEFAULT_BLOCKSIZE_SMALL); + StoreFile.DEFAULT_BLOCKSIZE_SMALL, conf); } else { globalBlockCache = new DoubleBlockCache(cacheSize, offHeapCacheSize, StoreFile.DEFAULT_BLOCKSIZE_SMALL, blockSize, conf); Index: src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java (revision 7615) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java (revision 7652) @@ -97,14 +97,16 @@ static final Log LOG = LogFactory.getLog(LruBlockCache.class); /** Default Configuration Parameters*/ + static final String LRU_DEFAULT_MIN_FACTOR = "hbase.lru.blockcache.default.min.factor"; + /** Backing Concurrent Map Configuration */ static final float DEFAULT_LOAD_FACTOR = 0.75f; static final int DEFAULT_CONCURRENCY_LEVEL = 16; /** Eviction thresholds */ - static final float DEFAULT_MIN_FACTOR = 0.75f; - static final float DEFAULT_ACCEPTABLE_FACTOR = 0.85f; + static final float DEFAULT_MIN_FACTOR = 0.95f; + static final float DEFAULT_ACCEPTABLE_FACTOR = 0.99f; /** Priority buckets */ static final float DEFAULT_SINGLE_FACTOR = 0.25f; @@ -194,6 +196,22 @@ DEFAULT_SINGLE_FACTOR, DEFAULT_MULTI_FACTOR, DEFAULT_MEMORY_FACTOR); } + + public LruBlockCache(long maxSize, long blockSize, boolean evictionThread, Configuration conf) { + this(maxSize, blockSize, evictionThread, + (int)Math.ceil(1.2*maxSize/blockSize), + DEFAULT_LOAD_FACTOR, + DEFAULT_CONCURRENCY_LEVEL, + conf.getFloat(LRU_DEFAULT_MIN_FACTOR, DEFAULT_MIN_FACTOR), + DEFAULT_ACCEPTABLE_FACTOR, + DEFAULT_SINGLE_FACTOR, + DEFAULT_MULTI_FACTOR, + DEFAULT_MEMORY_FACTOR); + } + + public LruBlockCache(long maxSize, long blockSize, Configuration conf) { + this(maxSize, blockSize, true, conf); + } /** * Configurable constructor. Use this constructor if not using defaults. Index: src/main/java/org/apache/hadoop/hbase/io/hfile/DoubleBlockCache.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/io/hfile/DoubleBlockCache.java (revision 7615) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/DoubleBlockCache.java (revision 7652) @@ -65,7 +65,7 @@ + StringUtils.humanReadableInt(onHeapSize) + "bytes with an average block size of " + StringUtils.humanReadableInt(onHeapBlockSize) + " bytes."); - onHeapCache = new LruBlockCache(onHeapSize, onHeapBlockSize); + onHeapCache = new LruBlockCache(onHeapSize, onHeapBlockSize, conf); LOG.info("Creating off-heap cache of size " + StringUtils.humanReadableInt(offHeapSize)