@InterfaceAudience.Private public final class TinyLfuBlockCache extends Object implements FirstLevelBlockCache
HeapSize
, memory bounded using the W-TinyLFU
eviction algorithm, and concurrent. This implementation delegates to a Caffeine cache to provide
O(1) read and write operations.
Modifier and Type | Class and Description |
---|---|
private static class |
TinyLfuBlockCache.CachedBlockView |
private class |
TinyLfuBlockCache.EvictionListener
A removal listener to asynchronously record evictions and populate the victim cache.
|
Modifier and Type | Field and Description |
---|---|
(package private) com.github.benmanes.caffeine.cache.Cache<BlockCacheKey,Cacheable> |
cache |
private static long |
DEFAULT_MAX_BLOCK_SIZE |
private static org.slf4j.Logger |
LOG |
private static String |
MAX_BLOCK_SIZE |
private long |
maxBlockSize |
private com.github.benmanes.caffeine.cache.Policy.Eviction<BlockCacheKey,Cacheable> |
policy |
private static int |
STAT_THREAD_PERIOD_SECONDS |
private CacheStats |
stats |
private ScheduledExecutorService |
statsThreadPool |
private BlockCache |
victimCache |
Constructor and Description |
---|
TinyLfuBlockCache(long maximumSizeInBytes,
long avgBlockSize,
Executor executor,
org.apache.hadoop.conf.Configuration conf)
Creates a block cache.
|
TinyLfuBlockCache(long maximumSizeInBytes,
long avgBlockSize,
long maxBlockSize,
Executor executor)
Creates a block cache.
|
Modifier and Type | Method and Description |
---|---|
void |
cacheBlock(BlockCacheKey key,
Cacheable value)
Add block to cache (defaults to not in-memory).
|
void |
cacheBlock(BlockCacheKey cacheKey,
Cacheable value,
boolean inMemory)
Add block to cache.
|
boolean |
containsBlock(BlockCacheKey cacheKey)
Whether the cache contains the block with specified cacheKey
|
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() |
private void |
logStats() |
private void |
recordEviction()
Records an eviction.
|
void |
setMaxSize(long size)
Sets the max heap size that can be used by the BlockCache.
|
void |
setVictimCache(BlockCache victimCache)
Specifies the secondary cache.
|
void |
shutdown()
Shutdown the cache.
|
long |
size()
Returns the total size of the block cache, in bytes.
|
String |
toString() |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
forEach, spliterator
private static final org.slf4j.Logger LOG
private static final String MAX_BLOCK_SIZE
private static final long DEFAULT_MAX_BLOCK_SIZE
private static final int STAT_THREAD_PERIOD_SECONDS
private final com.github.benmanes.caffeine.cache.Policy.Eviction<BlockCacheKey,Cacheable> policy
private final ScheduledExecutorService statsThreadPool
private final long maxBlockSize
private final CacheStats stats
private BlockCache victimCache
final com.github.benmanes.caffeine.cache.Cache<BlockCacheKey,Cacheable> cache
public TinyLfuBlockCache(long maximumSizeInBytes, long avgBlockSize, Executor executor, org.apache.hadoop.conf.Configuration conf)
maximumSizeInBytes
- maximum size of this cache, in bytesavgBlockSize
- expected average size of blocks, in bytesexecutor
- the cache's executorconf
- additional configurationpublic TinyLfuBlockCache(long maximumSizeInBytes, long avgBlockSize, long maxBlockSize, Executor executor)
maximumSizeInBytes
- maximum size of this cache, in bytesavgBlockSize
- expected average size of blocks, in bytesmaxBlockSize
- maximum size of a block, in bytesexecutor
- the cache's executorpublic void setVictimCache(BlockCache victimCache)
FirstLevelBlockCache
setVictimCache
in interface FirstLevelBlockCache
victimCache
- the second level cachepublic long size()
BlockCache
size
in interface BlockCache
public long getFreeSize()
BlockCache
getFreeSize
in interface BlockCache
public long getCurrentSize()
BlockCache
getCurrentSize
in interface BlockCache
public long getBlockCount()
BlockCache
getBlockCount
in interface BlockCache
public long heapSize()
public void setMaxSize(long size)
ResizableBlockCache
setMaxSize
in interface ResizableBlockCache
size
- The max heap size.public boolean containsBlock(BlockCacheKey cacheKey)
FirstLevelBlockCache
containsBlock
in interface FirstLevelBlockCache
cacheKey
- cache key for the blockpublic 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 void cacheBlock(BlockCacheKey cacheKey, Cacheable value, boolean inMemory)
BlockCache
cacheBlock
in interface BlockCache
cacheKey
- The block's cache key.value
- The block contents wrapped in a ByteBuffer.inMemory
- Whether block should be treated as in-memorypublic void cacheBlock(BlockCacheKey key, Cacheable value)
BlockCache
cacheBlock
in interface BlockCache
key
- The block's cache key.value
- The object to cache.public 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 BlockCache[] getBlockCaches()
getBlockCaches
in interface BlockCache
public Iterator<CachedBlock> iterator()
iterator
in interface Iterable<CachedBlock>
iterator
in interface BlockCache
private void logStats()
private void recordEviction()
public long getMaxSize()
BlockCache
getMaxSize
in interface BlockCache
public long getCurrentDataSize()
BlockCache
getCurrentDataSize
in interface BlockCache
public long getDataBlockCount()
BlockCache
getDataBlockCount
in interface BlockCache
Copyright © 2007–2020 The Apache Software Foundation. All rights reserved.