@InterfaceAudience.Private public class CombinedBlockCache extends Object implements ResizableBlockCache, HeapSize
LruBlockCache
and BucketCache
. The smaller lruCache is used
to cache bloom blocks and index blocks. The larger l2Cache is used to
cache data blocks. getBlock(BlockCacheKey, boolean, boolean, boolean)
reads
first from the smaller lruCache before looking for the block in the l2Cache. Blocks evicted
from lruCache are put into the bucket cache.
Metrics are the combined size and hits and misses of both caches.Modifier and Type | Class and Description |
---|---|
static class |
CombinedBlockCache.CombinedCacheStats |
Modifier and Type | Field and Description |
---|---|
protected CombinedBlockCache.CombinedCacheStats |
combinedCacheStats |
protected BlockCache |
l2Cache |
protected LruBlockCache |
lruCache |
Constructor and Description |
---|
CombinedBlockCache(LruBlockCache lruCache,
BlockCache l2Cache) |
Modifier and Type | Method and Description |
---|---|
void |
cacheBlock(BlockCacheKey cacheKey,
Cacheable buf)
Add block to cache (defaults to not in-memory).
|
void |
cacheBlock(BlockCacheKey cacheKey,
Cacheable buf,
boolean inMemory,
boolean cacheDataInL1)
Add block to cache.
|
boolean |
evictBlock(BlockCacheKey cacheKey)
Evict block from cache.
|
int |
evictBlocksByHfileName(String hfileName)
Evicts all blocks for the given HFile.
|
Cacheable |
getBlock(BlockCacheKey cacheKey,
boolean caching,
boolean repeat,
boolean updateCacheMetrics)
Fetch block from cache.
|
BlockCache[] |
getBlockCaches() |
long |
getBlockCount()
Returns the number of blocks currently cached in the block cache.
|
long |
getCurrentDataSize()
Returns the occupied size of data blocks, in bytes.
|
long |
getCurrentSize()
Returns the occupied size of the block cache, in bytes.
|
long |
getDataBlockCount()
Returns the number of data blocks currently cached in the block cache.
|
long |
getFreeSize()
Returns the free size of the block cache, in bytes.
|
long |
getMaxSize()
Returns the Max size of the block cache, in bytes.
|
CacheStats |
getStats()
Get the statistics for this block cache.
|
long |
heapSize() |
Iterator<CachedBlock> |
iterator() |
void |
setMaxSize(long size)
Sets the max heap size that can be used by the BlockCache.
|
void |
shutdown()
Shutdown the cache.
|
long |
size()
Returns the total size of the block cache, in bytes.
|
protected final LruBlockCache lruCache
protected final BlockCache l2Cache
protected final CombinedBlockCache.CombinedCacheStats combinedCacheStats
public CombinedBlockCache(LruBlockCache lruCache, BlockCache l2Cache)
public long heapSize()
public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory, boolean cacheDataInL1)
BlockCache
cacheBlock
in interface BlockCache
cacheKey
- The block's cache key.buf
- The block contents wrapped in a ByteBuffer.inMemory
- Whether block should be treated as in-memorycacheDataInL1
- If multi-tier block cache deploy -- i.e. has an L1 and L2 tier -- then
if this flag is true, cache data blocks up in the L1 tier (meta blocks are probably being
cached in L1 already).public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf)
BlockCache
cacheBlock
in interface BlockCache
cacheKey
- The block's cache key.buf
- The object to cache.public Cacheable getBlock(BlockCacheKey cacheKey, boolean caching, boolean repeat, boolean updateCacheMetrics)
BlockCache
getBlock
in interface BlockCache
cacheKey
- Block to fetch.caching
- Whether this request has caching enabled (used for stats)repeat
- Whether this is a repeat lookup for the same block
(used to avoid double counting cache misses when doing double-check locking)updateCacheMetrics
- Whether to update cache metrics or notpublic boolean evictBlock(BlockCacheKey cacheKey)
BlockCache
evictBlock
in interface BlockCache
cacheKey
- Block to evictpublic int evictBlocksByHfileName(String hfileName)
BlockCache
evictBlocksByHfileName
in interface BlockCache
public CacheStats getStats()
BlockCache
getStats
in interface BlockCache
public void shutdown()
BlockCache
shutdown
in interface BlockCache
public long size()
BlockCache
size
in interface BlockCache
public long getMaxSize()
BlockCache
getMaxSize
in interface BlockCache
public long getFreeSize()
BlockCache
getFreeSize
in interface BlockCache
public long getCurrentSize()
BlockCache
getCurrentSize
in interface BlockCache
public long getCurrentDataSize()
BlockCache
getCurrentDataSize
in interface BlockCache
public long getBlockCount()
BlockCache
getBlockCount
in interface BlockCache
public long getDataBlockCount()
BlockCache
getDataBlockCount
in interface BlockCache
public Iterator<CachedBlock> iterator()
iterator
in interface Iterable<CachedBlock>
iterator
in interface BlockCache
public BlockCache[] getBlockCaches()
getBlockCaches
in interface BlockCache
public void setMaxSize(long size)
ResizableBlockCache
setMaxSize
in interface ResizableBlockCache
size
- The max heap size.Copyright © 2007–2019 The Apache Software Foundation. All rights reserved.