Index: src/main/java/org/apache/hadoop/hbase/io/hfile/CacheConfig.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/io/hfile/CacheConfig.java (revision 7645) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/CacheConfig.java (revision 7646) @@ -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 7645) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java (revision 7646) @@ -97,7 +97,14 @@ static final Log LOG = LogFactory.getLog(LruBlockCache.class); /** Default Configuration Parameters*/ - + static final String LRU_DEFAULT_LOAD_FACTOR = "hbase.lru.blockcache.default.load.factor"; + static final String LRU_DEFAULT_CONCURRENCY_LEVEL = "hbase.lru.blcokcache.default.concurrency.level"; + static final String LRU_DEFAULT_MIN_FACTOR = "hbase.lru.blockcache.default.min.factor"; + static final String LRU_DEFAULT_ACCEPTABLE_FACTOR = "hbase.lru.blockcache.default.acceptable.factor"; + static final String LRU_DEFAULT_SINGLE_FACTOR = "hbase.lru.blockcache.default.single.factor"; + static final String LRU_DEFAULT_MULTI_FACTOR = "hbase.lru.blockcache.default.multi.factor"; + static final String LRU_DEFAULT_MEMORY_FACTOR = "hbase.lru.blockcache.default.memory.factor"; + /** Backing Concurrent Map Configuration */ static final float DEFAULT_LOAD_FACTOR = 0.75f; static final int DEFAULT_CONCURRENCY_LEVEL = 16; @@ -194,6 +201,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), + conf.getFloat(LRU_DEFAULT_LOAD_FACTOR, DEFAULT_LOAD_FACTOR), + conf.getInt(LRU_DEFAULT_CONCURRENCY_LEVEL, DEFAULT_CONCURRENCY_LEVEL), + conf.getFloat(LRU_DEFAULT_MIN_FACTOR, DEFAULT_MIN_FACTOR), + conf.getFloat(LRU_DEFAULT_ACCEPTABLE_FACTOR, DEFAULT_ACCEPTABLE_FACTOR), + conf.getFloat(LRU_DEFAULT_SINGLE_FACTOR, DEFAULT_SINGLE_FACTOR), + conf.getFloat(LRU_DEFAULT_MULTI_FACTOR, DEFAULT_MULTI_FACTOR), + conf.getFloat(LRU_DEFAULT_MEMORY_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 7645) +++ src/main/java/org/apache/hadoop/hbase/io/hfile/DoubleBlockCache.java (revision 7646) @@ -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)