@InterfaceAudience.Private public class CompactingMemStore extends AbstractMemStore
Modifier and Type | Class and Description |
---|---|
static class |
CompactingMemStore.IndexType
Types of indexes (part of immutable segments) to be used after flattening,
compaction, or merge are applied.
|
private class |
CompactingMemStore.InMemoryFlushRunnable
The in-memory-flusher thread performs the flush asynchronously.
|
Modifier and Type | Field and Description |
---|---|
protected AtomicBoolean |
allowCompaction |
static String |
COMPACTING_MEMSTORE_TYPE_DEFAULT |
static String |
COMPACTING_MEMSTORE_TYPE_KEY |
protected MemStoreCompactor |
compactor |
private boolean |
compositeSnapshot |
static long |
DEEP_OVERHEAD |
static int |
IN_MEMORY_CONPACTION_POOL_SIZE_DEFAULT |
static String |
IN_MEMORY_CONPACTION_POOL_SIZE_KEY |
private static double |
IN_MEMORY_FLUSH_THRESHOLD_FACTOR_DEFAULT |
static String |
IN_MEMORY_FLUSH_THRESHOLD_FACTOR_KEY |
private CompactingMemStore.IndexType |
indexType |
private AtomicBoolean |
inMemoryFlushInProgress |
private long |
inmemoryFlushSize |
private boolean |
inWalReplay |
private static org.slf4j.Logger |
LOG |
private CompactionPipeline |
pipeline |
private HStore |
store |
active, FIXED_OVERHEAD, regionServices, snapshot, snapshotId
Constructor and Description |
---|
CompactingMemStore(org.apache.hadoop.conf.Configuration conf,
CellComparator c,
HStore store,
RegionServicesForStores regionServices,
MemoryCompactionPolicy compactionPolicy) |
Modifier and Type | Method and Description |
---|---|
protected void |
checkActiveSize()
Check whether anything need to be done based on the current active set size.
|
protected List<KeyValueScanner> |
createList(int capacity) |
protected MemStoreCompactor |
createMemStoreCompactor(MemoryCompactionPolicy compactionPolicy) |
void |
debug() |
void |
flattenOneSegment(long requesterVersion,
MemStoreCompactionStrategy.Action action) |
(package private) void |
flushInMemory() |
String |
getFamilyName() |
private byte[] |
getFamilyNameInBytes() |
MemStoreSize |
getFlushableSize()
Flush will first clear out the data in snapshot if any (It will take a second flush
invocation to clear the current Cell set).
|
VersionedSegmentsList |
getImmutableSegments() |
CompactingMemStore.IndexType |
getIndexType() |
(package private) long |
getInmemoryFlushSize() |
private Segment |
getLastSegment() |
(package private) Cell |
getNextRow(Cell cell) |
private ThreadPoolExecutor |
getPool() |
private RegionServicesForStores |
getRegionServices() |
List<KeyValueScanner> |
getScanners(long readPt) |
protected List<Segment> |
getSegments() |
long |
getSmallestReadPoint() |
HStore |
getStore() |
boolean |
hasImmutableSegments() |
protected long |
heapSize() |
private void |
initInmemoryFlushSize(org.apache.hadoop.conf.Configuration conf) |
(package private) boolean |
isMemStoreFlushingInMemory() |
boolean |
isSloppy() |
protected long |
keySize() |
long |
preFlushSeqIDEstimation()
This method is called before the flush is executed.
|
protected void |
pushActiveToPipeline(MutableSegment active) |
private void |
pushPipelineToSnapshot() |
private void |
pushTailToSnapshot() |
private void |
pushToSnapshot(List<ImmutableSegment> segments) |
void |
setCompositeSnapshot(boolean useCompositeSnapshot) |
(package private) void |
setIndexType(CompactingMemStore.IndexType type) |
protected boolean |
shouldFlushInMemory() |
MemStoreSize |
size() |
MemStoreSnapshot |
snapshot()
Push the current active memstore segment into the pipeline
and create a snapshot of the tail of current compaction pipeline
Snapshot must be cleared by call to
AbstractMemStore.clearSnapshot(long) . |
void |
startReplayingFromWAL()
This message intends to inform the MemStore that next coming updates
are going to be part of the replaying edits from WAL
|
private void |
stopCompaction()
The request to cancel the compaction asynchronous task (caused by in-memory flush)
The compaction may still happen if the request was sent too late
Non-blocking request
|
void |
stopReplayingFromWAL()
This message intends to inform the MemStore that the replaying edits from WAL
are done
|
boolean |
swapCompactedSegments(VersionedSegmentsList versionedList,
ImmutableSegment result,
boolean merge) |
void |
updateLowestUnflushedSequenceIdInWAL(boolean onlyIfGreater)
Updates the wal with the lowest sequence id (oldest entry) that is still in memory
|
add, add, addToScanners, addToScanners, clearSnapshot, dump, getActive, getComparator, getConfiguration, getLowest, getNextRow, getSnapshot, getSnapshotSize, resetActive, timeOfOldestEdit, toString, upsert
public static final String COMPACTING_MEMSTORE_TYPE_KEY
public static final String COMPACTING_MEMSTORE_TYPE_DEFAULT
public static final String IN_MEMORY_FLUSH_THRESHOLD_FACTOR_KEY
private static final double IN_MEMORY_FLUSH_THRESHOLD_FACTOR_DEFAULT
public static final String IN_MEMORY_CONPACTION_POOL_SIZE_KEY
public static final int IN_MEMORY_CONPACTION_POOL_SIZE_DEFAULT
private static final org.slf4j.Logger LOG
private CompactionPipeline pipeline
protected MemStoreCompactor compactor
private long inmemoryFlushSize
private final AtomicBoolean inMemoryFlushInProgress
private boolean inWalReplay
protected final AtomicBoolean allowCompaction
private boolean compositeSnapshot
private CompactingMemStore.IndexType indexType
public static final long DEEP_OVERHEAD
public CompactingMemStore(org.apache.hadoop.conf.Configuration conf, CellComparator c, HStore store, RegionServicesForStores regionServices, MemoryCompactionPolicy compactionPolicy) throws IOException
IOException
protected MemStoreCompactor createMemStoreCompactor(MemoryCompactionPolicy compactionPolicy) throws IllegalArgumentIOException
IllegalArgumentIOException
private void initInmemoryFlushSize(org.apache.hadoop.conf.Configuration conf)
public MemStoreSize size()
public long preFlushSeqIDEstimation()
HConstants.NO_SEQNUM
.public boolean isSloppy()
public MemStoreSnapshot snapshot()
AbstractMemStore.clearSnapshot(long)
.
AbstractMemStore.clearSnapshot(long)
.MemStoreSnapshot
public MemStoreSize getFlushableSize()
MemStore
protected long keySize()
keySize
in class AbstractMemStore
protected long heapSize()
heapSize
in class AbstractMemStore
public void updateLowestUnflushedSequenceIdInWAL(boolean onlyIfGreater)
AbstractMemStore
updateLowestUnflushedSequenceIdInWAL
in class AbstractMemStore
onlyIfGreater
- a flag that marks whether to update the sequence id no matter what or
only if it is greater than the previous sequence idpublic void startReplayingFromWAL()
public void stopReplayingFromWAL()
protected List<Segment> getSegments()
getSegments
in class AbstractMemStore
public void setCompositeSnapshot(boolean useCompositeSnapshot)
public boolean swapCompactedSegments(VersionedSegmentsList versionedList, ImmutableSegment result, boolean merge)
public void flattenOneSegment(long requesterVersion, MemStoreCompactionStrategy.Action action)
requesterVersion
- The caller must hold the VersionedList of the pipeline
with version taken earlier. This version must be passed as a parameter here.
The flattening happens only if versions match.void setIndexType(CompactingMemStore.IndexType type)
public CompactingMemStore.IndexType getIndexType()
public boolean hasImmutableSegments()
public VersionedSegmentsList getImmutableSegments()
public long getSmallestReadPoint()
public String getFamilyName()
public List<KeyValueScanner> getScanners(long readPt) throws IOException
IOException
protected List<KeyValueScanner> createList(int capacity)
protected void checkActiveSize()
checkActiveSize
in class AbstractMemStore
void flushInMemory() throws IOException
IOException
private Segment getLastSegment()
private byte[] getFamilyNameInBytes()
private ThreadPoolExecutor getPool()
protected boolean shouldFlushInMemory()
private void stopCompaction()
protected void pushActiveToPipeline(MutableSegment active)
private void pushTailToSnapshot()
private void pushPipelineToSnapshot()
private void pushToSnapshot(List<ImmutableSegment> segments)
private RegionServicesForStores getRegionServices()
boolean isMemStoreFlushingInMemory()
Cell getNextRow(Cell cell)
cell
- Find the row that comes after this one. If null, we return the
first.long getInmemoryFlushSize()
public void debug()
Copyright © 2007–2019 The Apache Software Foundation. All rights reserved.