@InterfaceAudience.Private public class HStore extends Object implements Store, HeapSize, StoreConfigInformation, PropagatingConfigurationObserver
There's no reason to consider append-logging at this level; all logging and locking is handled at the HRegion level. Store just provides services to manage sets of StoreFiles. One of the most important of those services is compaction services where files are aggregated once they pass a configurable threshold.
Locking and transactions are handled at a higher level. This API should not be called directly but by an HRegion manager.
| Modifier and Type | Class and Description |
|---|---|
private static class |
HStore.StoreFileWriterCreationTracker |
private class |
HStore.StoreFlusherImpl |
NO_PRIORITY, PRIORITY_USER| Modifier | Constructor and Description |
|---|---|
protected |
HStore(HRegion region,
ColumnFamilyDescriptor family,
org.apache.hadoop.conf.Configuration confParam,
boolean warmup)
Constructor
|
| Modifier and Type | Method and Description |
|---|---|
void |
add(Cell cell,
MemStoreSizing memstoreSizing)
Adds a value to the memstore
|
void |
add(Iterable<Cell> cells,
MemStoreSizing memstoreSizing)
Adds the specified value to the memstore
|
void |
addChangedReaderObserver(ChangedReadersObserver o) |
private void |
addToCompactingFiles(Collection<HStoreFile> filesToAdd)
Adds the files to compacting files.
|
boolean |
areWritesEnabled() |
void |
assertBulkLoadHFileOk(org.apache.hadoop.fs.Path srcPath)
This throws a WrongRegionException if the HFile does not fit in this region, or an
InvalidHFileException if the HFile is not valid.
|
org.apache.hadoop.fs.Path |
bulkLoadHFile(byte[] family,
String srcPathStr,
org.apache.hadoop.fs.Path dstPath) |
private void |
bulkLoadHFile(HStoreFile sf) |
void |
bulkLoadHFile(StoreFileInfo fileInfo) |
void |
cancelRequestedCompaction(CompactionContext compaction) |
boolean |
canSplit()
Returns whether this store is splittable, i.e., no reference file in this store.
|
private static void |
clearAndClose(List<KeyValueScanner> scanners) |
private void |
clearCompactedfiles(List<HStoreFile> filesToRemove) |
org.apache.hbase.thirdparty.com.google.common.collect.ImmutableCollection<HStoreFile> |
close()
Close all the readers We don't need to worry about subsequent requests because the Region holds
a write lock that will prevent any more reads or writes.
|
void |
closeAndArchiveCompactedFiles()
Closes and archives the compacted files under this store
|
private org.apache.hbase.thirdparty.com.google.common.collect.ImmutableCollection<HStoreFile> |
closeWithoutLock() |
List<HStoreFile> |
compact(CompactionContext compaction,
ThroughputController throughputController,
User user)
Compact the StoreFiles.
|
private boolean |
completeFlush(List<HStoreFile> sfs,
long snapshotId) |
protected CacheConfig |
createCacheConf(ColumnFamilyDescriptor family)
Creates the cache config.
|
StoreFlushContext |
createFlushContext(long cacheFlushId,
FlushLifeCycleTracker tracker) |
protected KeyValueScanner |
createScanner(Scan scan,
ScanInfo scanInfo,
NavigableSet<byte[]> targetCols,
long readPt) |
protected StoreEngine<?,?,?,?> |
createStoreEngine(HStore store,
org.apache.hadoop.conf.Configuration conf,
CellComparator kvComparator)
Creates the store engine configured for the given Store.
|
void |
deleteChangedReaderObserver(ChangedReadersObserver o) |
void |
deregisterChildren(ConfigurationManager manager)
Needs to be called to deregister the children from the manager.
|
static long |
determineTTLFromFamily(ColumnFamilyDescriptor family)
Returns TTL in seconds of the specified family
|
protected List<HStoreFile> |
doCompaction(CompactionRequestImpl cr,
Collection<HStoreFile> filesToCompact,
User user,
long compactionStartTime,
List<org.apache.hadoop.fs.Path> newFiles) |
protected void |
finishCompactionRequest(CompactionRequestImpl cr) |
protected List<org.apache.hadoop.fs.Path> |
flushCache(long logCacheFlushId,
MemStoreSnapshot snapshot,
MonitoredTask status,
ThroughputController throughputController,
FlushLifeCycleTracker tracker,
Consumer<org.apache.hadoop.fs.Path> writerCreationTracker)
Write out current snapshot.
|
OptionalDouble |
getAvgStoreFileAge()
Returns Average age of store files in this store
|
long |
getBlockingFileCount()
The number of files required before flushes for this store will be blocked.
|
long |
getBloomFilterEligibleRequestsCount()
Returns count of requests which could have used bloom filters, but they weren't configured or
loaded.
|
long |
getBloomFilterNegativeResultsCount()
Returns count of negative results for bloom filter requests for this store.
|
long |
getBloomFilterRequestsCount()
Returns count of bloom filter results for this store.
|
CacheConfig |
getCacheConfig()
Used for tests.
|
ColumnFamilyDescriptor |
getColumnFamilyDescriptor() |
String |
getColumnFamilyName() |
long |
getCompactedCellsCount()
Returns The number of cells processed during minor compactions
|
long |
getCompactedCellsSize()
Returns The total amount of data processed during minor compactions, in bytes
|
Collection<HStoreFile> |
getCompactedFiles() |
int |
getCompactedFilesCount()
Returns Count of compacted store files
|
long |
getCompactionCheckMultiplier() |
double |
getCompactionPressure()
This value can represent the degree of emergency of compaction for this store.
|
CompactionProgress |
getCompactionProgress()
getter for CompactionProgress object
|
int |
getCompactPriority() |
CellComparator |
getComparator() |
RegionCoprocessorHost |
getCoprocessorHost() |
int |
getCurrentParallelPutCount() |
HFileDataBlockEncoder |
getDataBlockEncoder()
Returns the data block encoder
|
private InetSocketAddress[] |
getFavoredNodes() |
org.apache.hadoop.fs.FileSystem |
getFileSystem() |
MemStoreSize |
getFlushableSize() |
long |
getFlushedCellsCount()
Returns The number of cells flushed to disk
|
long |
getFlushedCellsSize()
Returns The total size of data flushed to disk, in bytes
|
long |
getFlushedOutputFileSize()
Returns The total size of out output files on disk, in bytes
|
long |
getHFilesSize()
Returns The size of only the store files which are HFiles, in bytes.
|
HRegion |
getHRegion() |
long |
getLastCompactSize()
Returns aggregate size of all HStores used in the last compaction
|
long |
getMajorCompactedCellsCount()
Returns The number of cells processed during major compactions
|
long |
getMajorCompactedCellsSize()
Returns The total amount of data processed during major compactions, in bytes
|
int |
getMaxCompactedStoreFileRefCount()
Returns get maximum ref count of storeFile among all compacted HStore Files for the HStore
|
OptionalLong |
getMaxMemStoreTS()
Returns The maximum memstoreTS in all store files.
|
OptionalLong |
getMaxSequenceId()
Returns The maximum sequence id in all store files.
|
OptionalLong |
getMaxStoreFileAge()
Returns Max age of store files in this store
|
private MemStore |
getMemstore()
Returns MemStore Instance to use in this store.
|
long |
getMemStoreFlushSize()
Returns Gets the Memstore flush size for the region that this store works with.
|
long |
getMemstoreOnlyRowReadsCount()
Returns the number of read requests purely from the memstore.
|
MemStoreSize |
getMemStoreSize()
Returns The size of this store's memstore.
|
OptionalLong |
getMinStoreFileAge()
Returns Min age of store files in this store
|
long |
getMixedRowReadsCount()
Returns the number of read requests from the files under this store.
|
long |
getNumHFiles()
Returns Number of HFiles in this store
|
long |
getNumReferenceFiles()
Returns Number of reference files in this store
|
protected OffPeakHours |
getOffPeakHours() |
org.apache.hadoop.conf.Configuration |
getReadOnlyConfiguration() |
HRegionFileSystem |
getRegionFileSystem() |
RegionInfo |
getRegionInfo()
Returns the parent region info hosting this store
|
ScanInfo |
getScanInfo() |
KeyValueScanner |
getScanner(Scan scan,
NavigableSet<byte[]> targetCols,
long readPt)
Return a scanner for both the memstore and the HStore files.
|
List<KeyValueScanner> |
getScanners(boolean cacheBlocks,
boolean isGet,
boolean usePread,
boolean isCompaction,
ScanQueryMatcher matcher,
byte[] startRow,
byte[] stopRow,
long readPt)
Get all scanners with no filtering based on TTL (that happens further down the line).
|
List<KeyValueScanner> |
getScanners(boolean cacheBlocks,
boolean usePread,
boolean isCompaction,
ScanQueryMatcher matcher,
byte[] startRow,
boolean includeStartRow,
byte[] stopRow,
boolean includeStopRow,
long readPt)
Get all scanners with no filtering based on TTL (that happens further down the line).
|
List<KeyValueScanner> |
getScanners(List<HStoreFile> files,
boolean cacheBlocks,
boolean isGet,
boolean usePread,
boolean isCompaction,
ScanQueryMatcher matcher,
byte[] startRow,
byte[] stopRow,
long readPt,
boolean includeMemstoreScanner)
Create scanners on the given files and if needed on the memstore with no filtering based on TTL
(that happens further down the line).
|
List<KeyValueScanner> |
getScanners(List<HStoreFile> files,
boolean cacheBlocks,
boolean usePread,
boolean isCompaction,
ScanQueryMatcher matcher,
byte[] startRow,
boolean includeStartRow,
byte[] stopRow,
boolean includeStopRow,
long readPt,
boolean includeMemstoreScanner)
Create scanners on the given files and if needed on the memstore with no filtering based on TTL
(that happens further down the line).
|
long |
getSize()
Returns aggregate size of HStore
|
long |
getSmallestReadPoint() |
MemStoreSize |
getSnapshotSize()
Returns size of the memstore snapshot
|
Optional<byte[]> |
getSplitPoint()
Determines if Store should be split.
|
(package private) StoreContext |
getStoreContext() |
StoreEngine<?,?,?,?> |
getStoreEngine()
Returns the StoreEngine that is backing this concrete implementation of Store.
|
private LongStream |
getStoreFileAgeStream() |
Collection<HStoreFile> |
getStorefiles()
Returns All store files.
|
Set<org.apache.hadoop.fs.Path> |
getStoreFilesBeingWritten()
Return the storefiles which are currently being written to.
|
int |
getStorefilesCount()
Returns Count of store files
|
private long |
getStorefilesFieldSize(ToLongFunction<StoreFileReader> f) |
(package private) long |
getStoreFileSize(HStoreFile file)
Computes the length of a store file without succumbing to any errors along the way.
|
long |
getStorefilesRootLevelIndexSize()
Returns The size of the store file root-level indexes, in bytes.
|
long |
getStorefilesSize()
Returns The size of the store files, in bytes.
|
long |
getStoreFileTtl()
Returns Gets the cf-specific time-to-live for store files.
|
int |
getStoreRefCount() |
long |
getStoreSizeUncompressed()
Returns The size of the store files, in bytes, uncompressed.
|
TableName |
getTableName() |
private long |
getTotalSize(Collection<HStoreFile> sfs) |
long |
getTotalStaticBloomSize()
Returns the total byte size of all Bloom filter bit arrays.
|
long |
getTotalStaticIndexSize()
Returns the total size of all index blocks in the data block indexes, including the root level,
intermediate levels, and the leaf level for multi-level indexes, or just the root level for
single-level indexes.
|
boolean |
hasReferences()
Returns
true if the store has any underlying reference files to older HFiles |
boolean |
hasTooManyStoreFiles()
Returns Whether this store has too many store files.
|
long |
heapSize()
Return the approximate 'exclusive deep size' of implementing object.
|
private StoreContext |
initializeStoreContext(ColumnFamilyDescriptor family) |
boolean |
isPrimaryReplicaStore() |
boolean |
isSloppyMemStore()
Returns true if the memstore may need some extra memory space
|
private void |
logCompactionEndMessage(CompactionRequestImpl cr,
List<HStoreFile> sfs,
long now,
long compactionStartTime)
Log a very elaborate compaction completion message.
|
boolean |
needsCompaction()
See if there's too much store files in this store
|
private void |
notifyChangedReadersObservers(List<HStoreFile> sfs)
Notify all observers that set of Readers has changed.
|
void |
onConfigurationChange(org.apache.hadoop.conf.Configuration conf)
This method would be called by the
ConfigurationManager object when the
Configuration object is reloaded from disk. |
private void |
postRefreshStoreFiles() |
void |
postSnapshotOperation()
Perform tasks needed after the completion of snapshot operation.
|
Pair<org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path> |
preBulkLoadHFile(String srcPathStr,
long seqNum)
This method should only be called from Region.
|
Long |
preFlushSeqIDEstimation() |
void |
preSnapshotOperation()
Sets the store up for a region level snapshot operation.
|
List<KeyValueScanner> |
recreateScanners(List<KeyValueScanner> currentFileScanners,
boolean cacheBlocks,
boolean usePread,
boolean isCompaction,
ScanQueryMatcher matcher,
byte[] startRow,
boolean includeStartRow,
byte[] stopRow,
boolean includeStopRow,
long readPt,
boolean includeMemstoreScanner)
Recreates the scanners on the current list of active store file scanners
|
void |
refreshStoreFiles()
Checks the underlying store files, and opens the files that have not been opened, and removes
the store file readers for store files no longer available.
|
void |
refreshStoreFiles(Collection<String> newFiles)
Replaces the store files that the store has with the given files.
|
protected void |
refreshStoreSizeAndTotalBytes()
Update counts.
|
void |
registerChildren(ConfigurationManager manager)
Needs to be called to register the children to the manager.
|
private void |
removeCompactedfiles(Collection<HStoreFile> compactedfiles,
boolean evictOnClose)
Archives and removes the compacted files
|
private void |
removeUnneededFiles() |
(package private) void |
replaceStoreFiles(Collection<HStoreFile> compactedFiles,
Collection<HStoreFile> result,
boolean writeCompactionMarker) |
void |
replayCompactionMarker(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor compaction,
boolean pickCompactionFiles,
boolean removeFiles)
Call to complete a compaction.
|
(package private) void |
reportArchivedFilesForQuota(List<? extends StoreFile> archivedFiles,
List<Long> fileSizes) |
Optional<CompactionContext> |
requestCompaction() |
Optional<CompactionContext> |
requestCompaction(int priority,
CompactionLifeCycleTracker tracker,
User user) |
(package private) void |
setDataBlockEncoderInTest(HFileDataBlockEncoder blockEncoder)
Should be used only in tests.
|
(package private) void |
setScanInfo(ScanInfo scanInfo)
Set scan info, used by test
|
private void |
setStoragePolicyFromFileName(List<org.apache.hadoop.fs.Path> newFiles) |
boolean |
shouldPerformMajorCompaction()
Tests whether we should run a major compaction.
|
void |
startReplayingFromWAL()
This message intends to inform the MemStore that next coming updates are going to be part of
the replaying edits from WAL
|
void |
stopReplayingFromWAL()
This message intends to inform the MemStore that the replaying edits from WAL are done
|
boolean |
throttleCompaction(long compactionSize) |
long |
timeOfOldestEdit()
When was the last edit done in the memstore
|
String |
toString() |
void |
triggerMajorCompaction() |
HStoreFile |
tryCommitRecoveredHFile(org.apache.hadoop.fs.Path path) |
void |
updateCompactedMetrics(boolean isMajor,
CompactionProgress progress) |
(package private) void |
updateMetricsStore(boolean memstoreRead) |
(package private) void |
updateSpaceQuotaAfterFileReplacement(RegionSizeStore sizeStore,
RegionInfo regionInfo,
Collection<HStoreFile> oldFiles,
Collection<HStoreFile> newFiles)
Updates the space quota usage for this region, removing the size for files compacted away and
adding in the size for new files.
|
void |
upsert(Iterable<Cell> cells,
long readpoint,
MemStoreSizing memstoreSizing)
Adds or replaces the specified KeyValues.
|
(package private) int |
versionsToReturn(int wantedVersions) |
private void |
writeCompactionWalRecord(Collection<HStoreFile> filesCompacted,
Collection<HStoreFile> newFiles)
Writes the compaction WAL record.
|
public static final String MEMSTORE_CLASS_NAME
public static final String COMPACTCHECKER_INTERVAL_MULTIPLIER_KEY
public static final String BLOCKING_STOREFILES_KEY
public static final String BLOCK_STORAGE_POLICY_KEY
public static final String DEFAULT_BLOCK_STORAGE_POLICY
public static final int DEFAULT_COMPACTCHECKER_INTERVAL_MULTIPLIER
public static final int DEFAULT_BLOCKING_STOREFILE_COUNT
private static final int SPLIT_REGION_COMPACTION_PRIORITY
private static final org.slf4j.Logger LOG
protected org.apache.hadoop.conf.Configuration conf
private long lastCompactSize
volatile boolean forceMajor
private AtomicLong storeSize
private AtomicLong totalUncompressedBytes
private LongAdder memstoreOnlyRowReadsCount
private LongAdder mixedRowReadsCount
final ReentrantLock archiveLock
private final boolean verifyBulkLoads
private final AtomicInteger currentParallelPutCount
private final int parallelPutCountPrintThreshold
private final List<HStoreFile> filesCompacting
private final Set<ChangedReadersObserver> changedReaderObservers
private HFileDataBlockEncoder dataBlockEncoder
final StoreEngine<?,?,?,?> storeEngine
private static final AtomicBoolean offPeakCompactionTracker
private volatile OffPeakHours offPeakHours
private static final int DEFAULT_FLUSH_RETRIES_NUMBER
private int flushRetriesNumber
private int pauseTime
private long blockingFileCount
private int compactionCheckMultiplier
private AtomicLong flushedCellsCount
private AtomicLong compactedCellsCount
private AtomicLong majorCompactedCellsCount
private AtomicLong flushedCellsSize
private AtomicLong flushedOutputFileSize
private AtomicLong compactedCellsSize
private AtomicLong majorCompactedCellsSize
private final StoreContext storeContext
private final Set<HStore.StoreFileWriterCreationTracker> storeFileWriterCreationTrackers
private final Supplier<HStore.StoreFileWriterCreationTracker> storeFileWriterCreationTrackerFactory
public static final long FIXED_OVERHEAD
public static final long DEEP_OVERHEAD
protected HStore(HRegion region, ColumnFamilyDescriptor family, org.apache.hadoop.conf.Configuration confParam, boolean warmup) throws IOException
family - HColumnDescriptor for this columnconfParam - configuration object failed. Can be null.IOExceptionprivate StoreContext initializeStoreContext(ColumnFamilyDescriptor family) throws IOException
IOExceptionprivate InetSocketAddress[] getFavoredNodes()
private MemStore getMemstore()
protected CacheConfig createCacheConf(ColumnFamilyDescriptor family)
family - The current column family.protected StoreEngine<?,?,?,?> createStoreEngine(HStore store, org.apache.hadoop.conf.Configuration conf, CellComparator kvComparator) throws IOException
store - The store. An unfortunate dependency needed due to it being passed to
coprocessors via the compactor.conf - Store configuration.kvComparator - KVComparator for storeFileManager.IOExceptionpublic static long determineTTLFromFamily(ColumnFamilyDescriptor family)
StoreContext getStoreContext()
public String getColumnFamilyName()
getColumnFamilyName in interface StoregetColumnFamilyName in interface StoreConfigInformationpublic TableName getTableName()
getTableName in interface Storepublic org.apache.hadoop.fs.FileSystem getFileSystem()
getFileSystem in interface Storepublic HRegionFileSystem getRegionFileSystem()
public long getStoreFileTtl()
StoreConfigInformationgetStoreFileTtl in interface StoreConfigInformationpublic long getMemStoreFlushSize()
StoreConfigInformationgetMemStoreFlushSize in interface StoreConfigInformationpublic MemStoreSize getFlushableSize()
getFlushableSize in interface StoreStore.getMemStoreSize() unless we are carrying snapshots and then it will be the
size of outstanding snapshots.public MemStoreSize getSnapshotSize()
StoregetSnapshotSize in interface Storepublic long getCompactionCheckMultiplier()
getCompactionCheckMultiplier in interface StoreConfigInformationpublic long getBlockingFileCount()
StoreConfigInformationgetBlockingFileCount in interface StoreConfigInformationpublic ColumnFamilyDescriptor getColumnFamilyDescriptor()
getColumnFamilyDescriptor in interface Storepublic OptionalLong getMaxSequenceId()
StoregetMaxSequenceId in interface Storepublic OptionalLong getMaxMemStoreTS()
StoregetMaxMemStoreTS in interface Storepublic HFileDataBlockEncoder getDataBlockEncoder()
void setDataBlockEncoderInTest(HFileDataBlockEncoder blockEncoder)
blockEncoder - the block delta encoder to useprivate void postRefreshStoreFiles() throws IOException
IOExceptionpublic void refreshStoreFiles() throws IOException
StorerefreshStoreFiles in interface StoreIOExceptionpublic void refreshStoreFiles(Collection<String> newFiles) throws IOException
IOExceptionpublic void startReplayingFromWAL()
public void stopReplayingFromWAL()
public void add(Cell cell, MemStoreSizing memstoreSizing)
public void add(Iterable<Cell> cells, MemStoreSizing memstoreSizing)
public long timeOfOldestEdit()
StoretimeOfOldestEdit in interface Storepublic Collection<HStoreFile> getStorefiles()
getStorefiles in interface Storepublic Collection<HStoreFile> getCompactedFiles()
getCompactedFiles in interface Storepublic void assertBulkLoadHFileOk(org.apache.hadoop.fs.Path srcPath) throws IOException
IOExceptionpublic Pair<org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path> preBulkLoadHFile(String srcPathStr, long seqNum) throws IOException
seqNum - sequence Id associated with the HFileIOExceptionpublic org.apache.hadoop.fs.Path bulkLoadHFile(byte[] family, String srcPathStr, org.apache.hadoop.fs.Path dstPath) throws IOException
IOExceptionpublic void bulkLoadHFile(StoreFileInfo fileInfo) throws IOException
IOExceptionprivate void bulkLoadHFile(HStoreFile sf) throws IOException
IOExceptionprivate org.apache.hbase.thirdparty.com.google.common.collect.ImmutableCollection<HStoreFile> closeWithoutLock() throws IOException
IOExceptionpublic org.apache.hbase.thirdparty.com.google.common.collect.ImmutableCollection<HStoreFile> close() throws IOException
StoreFiles that were previously being used.IOException - on failureprotected List<org.apache.hadoop.fs.Path> flushCache(long logCacheFlushId, MemStoreSnapshot snapshot, MonitoredTask status, ThroughputController throughputController, FlushLifeCycleTracker tracker, Consumer<org.apache.hadoop.fs.Path> writerCreationTracker) throws IOException
StoreFlusherImpl.prepare() has been called
previously.logCacheFlushId - flush sequence numberIOException - if exception occurs during processpublic HStoreFile tryCommitRecoveredHFile(org.apache.hadoop.fs.Path path) throws IOException
IOExceptionprivate long getTotalSize(Collection<HStoreFile> sfs)
private boolean completeFlush(List<HStoreFile> sfs, long snapshotId) throws IOException
IOExceptionprivate void notifyChangedReadersObservers(List<HStoreFile> sfs) throws IOException
IOExceptionpublic List<KeyValueScanner> getScanners(boolean cacheBlocks, boolean isGet, boolean usePread, boolean isCompaction, ScanQueryMatcher matcher, byte[] startRow, byte[] stopRow, long readPt) throws IOException
cacheBlocks - cache the blocks or notusePread - true to use pread, false if notisCompaction - true if the scanner is created for compactionmatcher - the scan query matcherstartRow - the start rowstopRow - the stop rowreadPt - the read point of the current scanIOExceptionpublic List<KeyValueScanner> getScanners(boolean cacheBlocks, boolean usePread, boolean isCompaction, ScanQueryMatcher matcher, byte[] startRow, boolean includeStartRow, byte[] stopRow, boolean includeStopRow, long readPt) throws IOException
cacheBlocks - cache the blocks or notusePread - true to use pread, false if notisCompaction - true if the scanner is created for compactionmatcher - the scan query matcherstartRow - the start rowincludeStartRow - true to include start row, false if notstopRow - the stop rowincludeStopRow - true to include stop row, false if notreadPt - the read point of the current scanIOExceptionprivate static void clearAndClose(List<KeyValueScanner> scanners)
public List<KeyValueScanner> getScanners(List<HStoreFile> files, boolean cacheBlocks, boolean isGet, boolean usePread, boolean isCompaction, ScanQueryMatcher matcher, byte[] startRow, byte[] stopRow, long readPt, boolean includeMemstoreScanner) throws IOException
files - the list of files on which the scanners has to be createdcacheBlocks - cache the blocks or notusePread - true to use pread, false if notisCompaction - true if the scanner is created for compactionmatcher - the scan query matcherstartRow - the start rowstopRow - the stop rowreadPt - the read point of the current scanincludeMemstoreScanner - true if memstore has to be includedIOExceptionpublic List<KeyValueScanner> getScanners(List<HStoreFile> files, boolean cacheBlocks, boolean usePread, boolean isCompaction, ScanQueryMatcher matcher, byte[] startRow, boolean includeStartRow, byte[] stopRow, boolean includeStopRow, long readPt, boolean includeMemstoreScanner) throws IOException
files - the list of files on which the scanners has to be createdcacheBlocks - ache the blocks or notusePread - true to use pread, false if notisCompaction - true if the scanner is created for compactionmatcher - the scan query matcherstartRow - the start rowincludeStartRow - true to include start row, false if notstopRow - the stop rowincludeStopRow - true to include stop row, false if notreadPt - the read point of the current scanincludeMemstoreScanner - true if memstore has to be includedIOExceptionpublic void addChangedReaderObserver(ChangedReadersObserver o)
o - Observer who wants to know about changes in set of Readerspublic void deleteChangedReaderObserver(ChangedReadersObserver o)
o - Observer no longer interested in changes in set of Readers.public List<HStoreFile> compact(CompactionContext compaction, ThroughputController throughputController, User user) throws IOException
During this time, the Store can work as usual, getting values from StoreFiles and writing new StoreFiles from the memstore. Existing StoreFiles are not destroyed until the new compacted StoreFile is completely written-out to disk.
The compactLock prevents multiple simultaneous compactions. The structureLock prevents us from interfering with other write operations.
We don't want to hold the structureLock for the whole time, as a compact() can be lengthy and we want to allow cache-flushes during this period.
Compaction event should be idempotent, since there is no IO Fencing for the region directory in hdfs. A region server might still try to complete the compaction after it lost the region. That is why the following events are carefully ordered for a compaction: 1. Compaction writes new files under region/.tmp directory (compaction output) 2. Compaction atomically moves the temporary file under region directory 3. Compaction appends a WAL edit containing the compaction input and output files. Forces sync on WAL. 4. Compaction deletes the input files from the region directory. Failure conditions are handled like this: - If RS fails before 2, compaction wont complete. Even if RS lives on and finishes the compaction later, it will only write the new data file to the region directory. Since we already have this data, this will be idempotent but we will have a redundant copy of the data. - If RS fails between 2 and 3, the region will have a redundant copy of the data. The RS that failed won't be able to finish sync() for WAL because of lease recovery in WAL. - If RS fails after 3, the region region server who opens the region will pick up the the compaction marker from the WAL and replay it by removing the compaction input files. Failed RS can also attempt to delete those files, but the operation will be idempotent See HBASE-2231 for details.
compaction - compaction details obtained from requestCompaction()IOExceptionprotected List<HStoreFile> doCompaction(CompactionRequestImpl cr, Collection<HStoreFile> filesToCompact, User user, long compactionStartTime, List<org.apache.hadoop.fs.Path> newFiles) throws IOException
IOExceptionprivate void setStoragePolicyFromFileName(List<org.apache.hadoop.fs.Path> newFiles) throws IOException
IOExceptionprivate void writeCompactionWalRecord(Collection<HStoreFile> filesCompacted, Collection<HStoreFile> newFiles) throws IOException
filesCompacted - Files compacted (input).newFiles - Files from compaction.IOExceptionvoid replaceStoreFiles(Collection<HStoreFile> compactedFiles, Collection<HStoreFile> result, boolean writeCompactionMarker) throws IOException
IOExceptionvoid updateSpaceQuotaAfterFileReplacement(RegionSizeStore sizeStore, RegionInfo regionInfo, Collection<HStoreFile> oldFiles, Collection<HStoreFile> newFiles)
sizeStore - The object tracking changes in region size for space quotas.regionInfo - The identifier for the region whose size is being updated.oldFiles - Files removed from this store's region.newFiles - Files added to this store's region.private void logCompactionEndMessage(CompactionRequestImpl cr, List<HStoreFile> sfs, long now, long compactionStartTime)
cr - Request.sfs - Resulting files.compactionStartTime - Start time.public void replayCompactionMarker(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor compaction, boolean pickCompactionFiles, boolean removeFiles) throws IOException
IOExceptionpublic boolean hasReferences()
Storetrue if the store has any underlying reference files to older HFileshasReferences in interface Storepublic CompactionProgress getCompactionProgress()
public boolean shouldPerformMajorCompaction() throws IOException
StoreshouldPerformMajorCompaction in interface StoreIOExceptionpublic Optional<CompactionContext> requestCompaction() throws IOException
IOExceptionpublic Optional<CompactionContext> requestCompaction(int priority, CompactionLifeCycleTracker tracker, User user) throws IOException
IOExceptionprivate void addToCompactingFiles(Collection<HStoreFile> filesToAdd)
private void removeUnneededFiles() throws IOException
IOExceptionpublic void cancelRequestedCompaction(CompactionContext compaction)
protected void finishCompactionRequest(CompactionRequestImpl cr)
protected void refreshStoreSizeAndTotalBytes() throws IOException
IOExceptionint versionsToReturn(int wantedVersions)
public boolean canSplit()
Storepublic Optional<byte[]> getSplitPoint()
public long getLastCompactSize()
StoregetLastCompactSize in interface Storepublic long getSize()
Storepublic void triggerMajorCompaction()
public KeyValueScanner getScanner(Scan scan, NavigableSet<byte[]> targetCols, long readPt) throws IOException
scan - Scan to apply when scanning the storestargetCols - columns to scanIOException - on failureprotected KeyValueScanner createScanner(Scan scan, ScanInfo scanInfo, NavigableSet<byte[]> targetCols, long readPt) throws IOException
IOExceptionpublic List<KeyValueScanner> recreateScanners(List<KeyValueScanner> currentFileScanners, boolean cacheBlocks, boolean usePread, boolean isCompaction, ScanQueryMatcher matcher, byte[] startRow, boolean includeStartRow, byte[] stopRow, boolean includeStopRow, long readPt, boolean includeMemstoreScanner) throws IOException
currentFileScanners - the current set of active store file scannerscacheBlocks - cache the blocks or notusePread - use pread or notisCompaction - is the scanner for compactionmatcher - the scan query matcherstartRow - the scan's start rowincludeStartRow - should the scan include the start rowstopRow - the scan's stop rowincludeStopRow - should the scan include the stop rowreadPt - the read point of the current scaneincludeMemstoreScanner - whether the current scanner should include memstorescannerIOExceptionpublic int getStorefilesCount()
StoregetStorefilesCount in interface Storepublic int getCompactedFilesCount()
StoregetCompactedFilesCount in interface Storeprivate LongStream getStoreFileAgeStream()
public OptionalLong getMaxStoreFileAge()
StoregetMaxStoreFileAge in interface Storepublic OptionalLong getMinStoreFileAge()
StoregetMinStoreFileAge in interface Storepublic OptionalDouble getAvgStoreFileAge()
StoregetAvgStoreFileAge in interface Storepublic long getNumReferenceFiles()
StoregetNumReferenceFiles in interface Storepublic long getNumHFiles()
StoregetNumHFiles in interface Storepublic long getStoreSizeUncompressed()
StoregetStoreSizeUncompressed in interface Storepublic long getStorefilesSize()
StoregetStorefilesSize in interface Storepublic long getHFilesSize()
StoregetHFilesSize in interface Storeprivate long getStorefilesFieldSize(ToLongFunction<StoreFileReader> f)
public long getStorefilesRootLevelIndexSize()
StoregetStorefilesRootLevelIndexSize in interface Storepublic long getTotalStaticIndexSize()
StoregetTotalStaticIndexSize in interface Storepublic long getTotalStaticBloomSize()
StoregetTotalStaticBloomSize in interface Storepublic MemStoreSize getMemStoreSize()
StoregetMemStoreSize in interface Storepublic int getCompactPriority()
getCompactPriority in interface Storepublic boolean throttleCompaction(long compactionSize)
public HRegion getHRegion()
public RegionCoprocessorHost getCoprocessorHost()
public RegionInfo getRegionInfo()
StoregetRegionInfo in interface StoregetRegionInfo in interface StoreConfigInformationpublic boolean areWritesEnabled()
areWritesEnabled in interface Storepublic long getSmallestReadPoint()
getSmallestReadPoint in interface Storepublic void upsert(Iterable<Cell> cells, long readpoint, MemStoreSizing memstoreSizing) throws IOException
For each KeyValue specified, if a cell with the same row, family, and qualifier exists in MemStore, it will be replaced. Otherwise, it will just be inserted to MemStore.
This operation is atomic on each KeyValue (row/family/qualifier) but not necessarily atomic across all of them.
readpoint - readpoint below which we can safely remove duplicate KVsIOExceptionpublic StoreFlushContext createFlushContext(long cacheFlushId, FlushLifeCycleTracker tracker)
public boolean needsCompaction()
StoreneedsCompaction in interface Storetrue if number of store files is greater than the number defined in
minFilesToCompactpublic CacheConfig getCacheConfig()
public long heapSize()
HeapSizepublic CellComparator getComparator()
getComparator in interface Storepublic ScanInfo getScanInfo()
void setScanInfo(ScanInfo scanInfo)
scanInfo - new scan info to use for testpublic boolean hasTooManyStoreFiles()
StorehasTooManyStoreFiles in interface Storepublic long getFlushedCellsCount()
StoregetFlushedCellsCount in interface Storepublic long getFlushedCellsSize()
StoregetFlushedCellsSize in interface Storepublic long getFlushedOutputFileSize()
StoregetFlushedOutputFileSize in interface Storepublic long getCompactedCellsCount()
StoregetCompactedCellsCount in interface Storepublic long getCompactedCellsSize()
StoregetCompactedCellsSize in interface Storepublic long getMajorCompactedCellsCount()
StoregetMajorCompactedCellsCount in interface Storepublic long getMajorCompactedCellsSize()
StoregetMajorCompactedCellsSize in interface Storepublic void updateCompactedMetrics(boolean isMajor, CompactionProgress progress)
public StoreEngine<?,?,?,?> getStoreEngine()
StoreEngine object used internally inside this HStore object.protected OffPeakHours getOffPeakHours()
public void onConfigurationChange(org.apache.hadoop.conf.Configuration conf)
ConfigurationObserverConfigurationManager object when the
Configuration object is reloaded from disk.onConfigurationChange in interface ConfigurationObserverpublic void registerChildren(ConfigurationManager manager)
registerChildren in interface PropagatingConfigurationObservermanager - : to register topublic void deregisterChildren(ConfigurationManager manager)
deregisterChildren in interface PropagatingConfigurationObservermanager - : to deregister frompublic double getCompactionPressure()
StoreAnd for striped stores, we should calculate this value by the files in each stripe separately and return the maximum value.
It is similar to Store.getCompactPriority() except that it is more suitable to use in a
linear formula.
getCompactionPressure in interface Storepublic boolean isPrimaryReplicaStore()
isPrimaryReplicaStore in interface Storepublic void preSnapshotOperation()
postSnapshotOperation()public void postSnapshotOperation()
preSnapshotOperation()public void closeAndArchiveCompactedFiles() throws IOException
IOExceptionprivate void removeCompactedfiles(Collection<HStoreFile> compactedfiles, boolean evictOnClose) throws IOException
compactedfiles - The compacted files in this store that are not active in readsevictOnClose - true if blocks should be evicted from the cache when an HFile reader is
closed, false if notIOExceptionlong getStoreFileSize(HStoreFile file)
0 instead of the actual size.file - The file to compute the size of.file.public Long preFlushSeqIDEstimation()
public boolean isSloppyMemStore()
StoreisSloppyMemStore in interface Storeprivate void clearCompactedfiles(List<HStoreFile> filesToRemove) throws IOException
IOExceptionpublic int getCurrentParallelPutCount()
getCurrentParallelPutCount in interface Storepublic int getStoreRefCount()
public int getMaxCompactedStoreFileRefCount()
void reportArchivedFilesForQuota(List<? extends StoreFile> archivedFiles, List<Long> fileSizes)
public long getMemstoreOnlyRowReadsCount()
StoregetMemstoreOnlyRowReadsCount in interface Storepublic long getMixedRowReadsCount()
StoregetMixedRowReadsCount in interface Storepublic org.apache.hadoop.conf.Configuration getReadOnlyConfiguration()
getReadOnlyConfiguration in interface StoreUnsupportedOperationException
if you try to set a configuration.void updateMetricsStore(boolean memstoreRead)
public Set<org.apache.hadoop.fs.Path> getStoreFilesBeingWritten()
BrokenStoreFileCleaner to prevent deleting the these files as they are not present in
SFT yet.public long getBloomFilterRequestsCount()
StoregetBloomFilterRequestsCount in interface Storepublic long getBloomFilterNegativeResultsCount()
StoregetBloomFilterNegativeResultsCount in interface Storepublic long getBloomFilterEligibleRequestsCount()
StoregetBloomFilterEligibleRequestsCount in interface StoreCopyright © 2007–2020 The Apache Software Foundation. All rights reserved.