public class CompactionStrategyManager extends java.lang.Object implements INotificationConsumer
ReentrantReadWriteLock. This lock performs mutual exclusion on
reads and writes to the following variables: this#repaired, this#unrepaired, this#isActive,
this#params, this#currentBoundaries. Whenever performing reads on these variables,
the this#readLock should be acquired. Likewise, updates to these variables should be guarded by
this#writeLock.
Whenever the DiskBoundaries change, the compaction strategies must be reloaded, so in order to ensure
the compaction strategy placement reflect most up-to-date disk boundaries, call this#maybeReloadDiskBoundaries()
before acquiring the read lock to acess the strategies.| Modifier and Type | Field and Description |
|---|---|
CompactionLogger |
compactionLogger |
| Constructor and Description |
|---|
CompactionStrategyManager(ColumnFamilyStore cfs) |
CompactionStrategyManager(ColumnFamilyStore cfs,
java.util.function.Supplier<DiskBoundaries> boundariesSupplier,
boolean partitionSSTablesByTokenRange) |
| Modifier and Type | Method and Description |
|---|---|
protected AbstractCompactionStrategy |
compactionStrategyFor(SSTableReader sstable) |
protected int |
compactionStrategyIndexFor(SSTableReader sstable)
Get the correct compaction strategy for the given sstable.
|
SSTableMultiWriter |
createSSTableMultiWriter(Descriptor descriptor,
long keyCount,
long repairedAt,
MetadataCollector collector,
SerializationHeader header,
java.util.Collection<Index> indexes,
LifecycleTransaction txn) |
void |
disable() |
void |
enable() |
CompactionParams |
getCompactionParams() |
protected AbstractCompactionStrategy |
getCompactionStrategyFor(SSTableReader sstable)
return the compaction strategy for the given sstable
returns differently based on the repaired status and which vnode the compaction strategy belongs to
|
AbstractCompactionTask |
getCompactionTask(LifecycleTransaction txn,
int gcBefore,
long maxSSTableBytes) |
Directories |
getDirectories() |
int |
getEstimatedRemainingTasks() |
int |
getLevelFanoutSize() |
java.util.Collection<AbstractCompactionTask> |
getMaximalTasks(int gcBefore,
boolean splitOutput) |
long |
getMaxSSTableBytes() |
java.lang.String |
getName() |
AbstractCompactionTask |
getNextBackgroundTask(int gcBefore)
Return the next background task
Returns a task for the compaction strategy that needs it the most (most estimated remaining tasks)
|
AbstractCompactionStrategy.ScannerList |
getScanners(java.util.Collection<SSTableReader> sstables) |
AbstractCompactionStrategy.ScannerList |
getScanners(java.util.Collection<SSTableReader> sstables,
java.util.Collection<Range<Token>> ranges)
Create ISSTableScanners from the given sstables
Delegates the call to the compaction strategies to allow LCS to create a scanner
|
int[] |
getSSTableCountPerLevel() |
java.util.List<java.util.List<AbstractCompactionStrategy>> |
getStrategies() |
java.util.List<java.lang.String> |
getStrategyFolders(AbstractCompactionStrategy strategy) |
int |
getUnleveledSSTables() |
AbstractCompactionTask |
getUserDefinedTask(java.util.Collection<SSTableReader> sstables,
int gcBefore)
Deprecated.
use
getUserDefinedTasks(Collection, int) instead. |
java.util.List<AbstractCompactionTask> |
getUserDefinedTasks(java.util.Collection<SSTableReader> sstables,
int gcBefore)
Return a list of compaction tasks corresponding to the sstables requested.
|
java.util.List<AbstractCompactionTask> |
getUserDefinedTasks(java.util.Collection<SSTableReader> sstables,
int gcBefore,
boolean validateForCompaction) |
java.util.Collection<java.util.Collection<SSTableReader>> |
groupSSTablesForAntiCompaction(java.util.Collection<SSTableReader> sstablesToGroup) |
void |
handleNotification(INotification notification,
java.lang.Object sender) |
boolean |
isActive() |
boolean |
isEnabled() |
boolean |
isRepaired(AbstractCompactionStrategy strategy) |
void |
maybeReload(CFMetaData metadata) |
protected boolean |
maybeReloadDiskBoundaries()
Checks if the disk boundaries changed and reloads the compaction strategies
to reflect the most up-to-date disk boundaries.
|
boolean |
onlyPurgeRepairedTombstones() |
void |
pause()
pause compaction while we cancel all ongoing compactions
Separate call from enable/disable to not have to save the enabled-state externally
|
void |
replaceFlushed(Memtable memtable,
java.util.Collection<SSTableReader> sstables) |
void |
resume() |
void |
setNewLocalCompactionStrategy(CompactionParams params) |
boolean |
shouldBeEnabled() |
boolean |
shouldDefragment() |
void |
shutdown() |
boolean |
supportsEarlyOpen() |
public final CompactionLogger compactionLogger
public CompactionStrategyManager(ColumnFamilyStore cfs)
public CompactionStrategyManager(ColumnFamilyStore cfs, java.util.function.Supplier<DiskBoundaries> boundariesSupplier, boolean partitionSSTablesByTokenRange)
public AbstractCompactionTask getNextBackgroundTask(int gcBefore)
public boolean isEnabled()
public boolean isActive()
public void resume()
public void pause()
protected AbstractCompactionStrategy getCompactionStrategyFor(SSTableReader sstable)
sstable - protected AbstractCompactionStrategy compactionStrategyFor(SSTableReader sstable)
protected int compactionStrategyIndexFor(SSTableReader sstable)
sstable - public void shutdown()
public void maybeReload(CFMetaData metadata)
protected boolean maybeReloadDiskBoundaries()
this#readLock to ensure the most up-to-date
disk locations and boundaries are used.
This should *never* be called inside by a thread holding the this#readLock, since it
will potentially acquire the this#writeLock to update the compaction strategies
what can cause a deadlock.public void replaceFlushed(Memtable memtable, java.util.Collection<SSTableReader> sstables)
public int getUnleveledSSTables()
public int getLevelFanoutSize()
public int[] getSSTableCountPerLevel()
public boolean shouldDefragment()
public Directories getDirectories()
public void handleNotification(INotification notification, java.lang.Object sender)
handleNotification in interface INotificationConsumerpublic void enable()
public void disable()
public AbstractCompactionStrategy.ScannerList getScanners(java.util.Collection<SSTableReader> sstables, java.util.Collection<Range<Token>> ranges)
sstables - ranges - public AbstractCompactionStrategy.ScannerList getScanners(java.util.Collection<SSTableReader> sstables)
public java.util.Collection<java.util.Collection<SSTableReader>> groupSSTablesForAntiCompaction(java.util.Collection<SSTableReader> sstablesToGroup)
public long getMaxSSTableBytes()
public AbstractCompactionTask getCompactionTask(LifecycleTransaction txn, int gcBefore, long maxSSTableBytes)
public java.util.Collection<AbstractCompactionTask> getMaximalTasks(int gcBefore, boolean splitOutput)
public java.util.List<AbstractCompactionTask> getUserDefinedTasks(java.util.Collection<SSTableReader> sstables, int gcBefore)
sstables - the sstables to compactgcBefore - gc grace period, throw away tombstones older than thispublic java.util.List<AbstractCompactionTask> getUserDefinedTasks(java.util.Collection<SSTableReader> sstables, int gcBefore, boolean validateForCompaction)
@Deprecated public AbstractCompactionTask getUserDefinedTask(java.util.Collection<SSTableReader> sstables, int gcBefore)
getUserDefinedTasks(Collection, int) instead.public int getEstimatedRemainingTasks()
public boolean shouldBeEnabled()
public java.lang.String getName()
public java.util.List<java.util.List<AbstractCompactionStrategy>> getStrategies()
public void setNewLocalCompactionStrategy(CompactionParams params)
public CompactionParams getCompactionParams()
public boolean onlyPurgeRepairedTombstones()
public SSTableMultiWriter createSSTableMultiWriter(Descriptor descriptor, long keyCount, long repairedAt, MetadataCollector collector, SerializationHeader header, java.util.Collection<Index> indexes, LifecycleTransaction txn)
public boolean isRepaired(AbstractCompactionStrategy strategy)
public java.util.List<java.lang.String> getStrategyFolders(AbstractCompactionStrategy strategy)
public boolean supportsEarlyOpen()
Copyright © 2018 The Apache Software Foundation