@InterfaceAudience.Private public final class BucketAllocator extends Object
Modifier and Type | Class and Description |
---|---|
static class |
BucketAllocator.Bucket |
(package private) class |
BucketAllocator.BucketSizeInfo |
(package private) static class |
BucketAllocator.IndexStatistics
Statistics to give a glimpse into the distribution of BucketCache objects.
|
Modifier and Type | Field and Description |
---|---|
private int |
bigItemSize |
private long |
bucketCapacity |
private BucketAllocator.Bucket[] |
buckets |
private BucketAllocator.BucketSizeInfo[] |
bucketSizeInfos |
private int[] |
bucketSizes |
private static int[] |
DEFAULT_BUCKET_SIZES |
static int |
FEWEST_ITEMS_IN_BUCKET
So, what is the minimum amount of items we'll tolerate in a single bucket?
|
private static org.slf4j.Logger |
LOG |
private long |
totalSize |
private long |
usedSize |
Constructor and Description |
---|
BucketAllocator(long availableSpace,
int[] bucketSizes) |
BucketAllocator(long availableSpace,
int[] bucketSizes,
Map<BlockCacheKey,BucketEntry> map,
LongAdder realCacheSize)
Rebuild the allocator's data structures from a persisted map.
|
Modifier and Type | Method and Description |
---|---|
long |
allocateBlock(int blockSize)
Allocate a block with specified size.
|
int |
freeBlock(long offset,
int length)
Free a block with the offset
|
int |
getBucketIndex(long offset) |
BucketAllocator.Bucket[] |
getBuckets() |
long |
getFreeSize() |
(package private) BucketAllocator.IndexStatistics[] |
getIndexStatistics() |
(package private) BucketAllocator.IndexStatistics[] |
getIndexStatistics(BucketAllocator.IndexStatistics grandTotal) |
Set<Integer> |
getLeastFilledBuckets(Set<Integer> excludedBuckets,
int bucketCount)
Returns a set of indices of the buckets that are least filled excluding the offsets, we also
the fully free buckets for the BucketSizes where everything is empty and they only have one
completely free bucket as a reserved
|
long |
getTotalSize() |
long |
getUsedSize() |
private BucketAllocator.Bucket |
grabGlobalCompletelyFreeBucket() |
(package private) void |
logDebugStatistics() |
BucketAllocator.BucketSizeInfo |
roundUpToBucketSizeInfo(int blockSize)
Round up the given block size to bucket size, and get the corresponding BucketSizeInfo
|
int |
sizeIndexOfAllocation(long offset) |
int |
sizeOfAllocation(long offset) |
String |
toString() |
private static final org.slf4j.Logger LOG
private static final int[] DEFAULT_BUCKET_SIZES
public static final int FEWEST_ITEMS_IN_BUCKET
private final int[] bucketSizes
private final int bigItemSize
private final long bucketCapacity
private BucketAllocator.Bucket[] buckets
private BucketAllocator.BucketSizeInfo[] bucketSizeInfos
private final long totalSize
private transient long usedSize
BucketAllocator(long availableSpace, int[] bucketSizes) throws BucketAllocatorException
BucketAllocatorException
BucketAllocator(long availableSpace, int[] bucketSizes, Map<BlockCacheKey,BucketEntry> map, LongAdder realCacheSize) throws BucketAllocatorException
availableSpace
- capacity of cachemap
- A map stores the block key and BucketEntry(block's meta data like offset,
length)realCacheSize
- cached data size statistics for bucket cache nBucketAllocatorException
public BucketAllocator.BucketSizeInfo roundUpToBucketSizeInfo(int blockSize)
public long getUsedSize()
public long getFreeSize()
public long getTotalSize()
public long allocateBlock(int blockSize) throws CacheFullException, BucketAllocatorException
blockSize
- size of block nn * @return the offset in the IOEngineCacheFullException
BucketAllocatorException
private BucketAllocator.Bucket grabGlobalCompletelyFreeBucket()
public int freeBlock(long offset, int length)
offset
- block's offsetpublic int sizeIndexOfAllocation(long offset)
public int sizeOfAllocation(long offset)
public BucketAllocator.Bucket[] getBuckets()
void logDebugStatistics()
BucketAllocator.IndexStatistics[] getIndexStatistics(BucketAllocator.IndexStatistics grandTotal)
BucketAllocator.IndexStatistics[] getIndexStatistics()
public int getBucketIndex(long offset)
public Set<Integer> getLeastFilledBuckets(Set<Integer> excludedBuckets, int bucketCount)
excludedBuckets
- the buckets that need to be excluded due to currently being in usedbucketCount
- max Number of buckets to returnCopyright © 2007–2020 The Apache Software Foundation. All rights reserved.