Class LeveledCompactionStrategy
- java.lang.Object
-
- org.apache.cassandra.db.compaction.AbstractCompactionStrategy
-
- org.apache.cassandra.db.compaction.LeveledCompactionStrategy
-
public class LeveledCompactionStrategy extends AbstractCompactionStrategy
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.cassandra.db.compaction.AbstractCompactionStrategy
AbstractCompactionStrategy.ScannerList
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_LEVEL_FANOUT_SIZE
-
Fields inherited from class org.apache.cassandra.db.compaction.AbstractCompactionStrategy
cfs, COMPACTION_ENABLED, DEFAULT_LOG_ALL_OPTION, DEFAULT_TOMBSTONE_COMPACTION_INTERVAL, DEFAULT_TOMBSTONE_THRESHOLD, DEFAULT_UNCHECKED_TOMBSTONE_COMPACTION_OPTION, disableTombstoneCompactions, isActive, LOG_ALL_OPTION, logAll, ONLY_PURGE_REPAIRED_TOMBSTONES, options, TOMBSTONE_COMPACTION_INTERVAL_OPTION, TOMBSTONE_THRESHOLD_OPTION, tombstoneCompactionInterval, tombstoneThreshold, UNCHECKED_TOMBSTONE_COMPACTION_OPTION, uncheckedTombstoneCompaction
-
-
Constructor Summary
Constructors Constructor Description LeveledCompactionStrategy(ColumnFamilyStore cfs, java.util.Map<java.lang.String,java.lang.String> options)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addSSTable(SSTableReader added)
Adds sstable, note that implementations must handle duplicate notifications here (added already being in the compaction strategy)void
addSSTables(java.lang.Iterable<SSTableReader> sstables)
Adds sstables, note that implementations must handle duplicate notifications here (added already being in the compaction strategy)int[]
getAllLevelSize()
long[]
getAllLevelSizeBytes()
AbstractCompactionTask
getCompactionTask(LifecycleTransaction txn, long gcBefore, long maxSSTableBytes)
int
getEstimatedRemainingTasks()
int
getLevelFanoutSize()
int
getLevelSize(int i)
java.util.Collection<AbstractCompactionTask>
getMaximalTask(long gcBefore, boolean splitOutput)
long
getMaxSSTableBytes()
AbstractCompactionTask
getNextBackgroundTask(long gcBefore)
the only difference between background and maximal in LCS is that maximal is still allowed (by explicit user request) even when compaction is disabled.AbstractCompactionStrategy.ScannerList
getScanners(java.util.Collection<SSTableReader> sstables, java.util.Collection<Range<Token>> ranges)
Returns a list of KeyScanners given sstables and a range on which to scan.protected java.util.Set<SSTableReader>
getSSTables()
Returns the sstables managed by this strategy instanceAbstractCompactionTask
getUserDefinedTask(java.util.Collection<SSTableReader> sstables, long gcBefore)
java.util.Collection<java.util.Collection<SSTableReader>>
groupSSTablesForAntiCompaction(java.util.Collection<SSTableReader> ssTablesToGroup)
Leveled compaction strategy has guarantees on the data contained within each level so we have to make sure we only create groups of SSTables with members from the same level.void
metadataChanged(StatsMetadata oldMetadata, SSTableReader sstable)
Called when the metadata has changed for an sstable - for example if the level changed Not called when repair status changes (which is also metadata), because this results in the sstable getting removed from the compaction strategy instance.void
removeSSTable(SSTableReader sstable)
Removes sstable from the strategy, implementations must be able to handle the sstable having already been removed.void
replaceSSTables(java.util.Collection<SSTableReader> removed, java.util.Collection<SSTableReader> added)
Replaces sstables in the compaction strategy Note that implementations must be able to handle duplicate notifications here (that removed are already gone and added have already been added)void
startup()
Performs any extra initialization requiredCompactionLogger.Strategy
strategyLogger()
java.lang.String
toString()
static java.util.Map<java.lang.String,java.lang.String>
validateOptions(java.util.Map<java.lang.String,java.lang.String> options)
-
Methods inherited from class org.apache.cassandra.db.compaction.AbstractCompactionStrategy
createSSTableMultiWriter, filterSuspectSSTables, getDirectories, getName, getScanners, getScanners, pause, removeSSTables, resume, shutdown, supportsEarlyOpen, worthDroppingTombstones
-
-
-
-
Field Detail
-
DEFAULT_LEVEL_FANOUT_SIZE
public static final int DEFAULT_LEVEL_FANOUT_SIZE
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
LeveledCompactionStrategy
public LeveledCompactionStrategy(ColumnFamilyStore cfs, java.util.Map<java.lang.String,java.lang.String> options)
-
-
Method Detail
-
getLevelSize
public int getLevelSize(int i)
-
getAllLevelSize
public int[] getAllLevelSize()
-
getAllLevelSizeBytes
public long[] getAllLevelSizeBytes()
-
startup
public void startup()
Description copied from class:AbstractCompactionStrategy
Performs any extra initialization required- Overrides:
startup
in classAbstractCompactionStrategy
-
getNextBackgroundTask
public AbstractCompactionTask getNextBackgroundTask(long gcBefore)
the only difference between background and maximal in LCS is that maximal is still allowed (by explicit user request) even when compaction is disabled.- Specified by:
getNextBackgroundTask
in classAbstractCompactionStrategy
- Parameters:
gcBefore
- throw away tombstones older than this- Returns:
- the next background/minor compaction task to run; null if nothing to do. Is responsible for marking its sstables as compaction-pending.
-
getMaximalTask
public java.util.Collection<AbstractCompactionTask> getMaximalTask(long gcBefore, boolean splitOutput)
- Specified by:
getMaximalTask
in classAbstractCompactionStrategy
- Parameters:
gcBefore
- throw away tombstones older than this- Returns:
- a compaction task that should be run to compact this columnfamilystore as much as possible. Null if nothing to do. Is responsible for marking its sstables as compaction-pending.
-
getUserDefinedTask
public AbstractCompactionTask getUserDefinedTask(java.util.Collection<SSTableReader> sstables, long gcBefore)
- Specified by:
getUserDefinedTask
in classAbstractCompactionStrategy
- Parameters:
sstables
- SSTables to compact. Must be marked as compacting.gcBefore
- throw away tombstones older than this- Returns:
- a compaction task corresponding to the requested sstables. Will not be null. (Will throw if user requests an invalid compaction.) Is responsible for marking its sstables as compaction-pending.
-
getCompactionTask
public AbstractCompactionTask getCompactionTask(LifecycleTransaction txn, long gcBefore, long maxSSTableBytes)
- Overrides:
getCompactionTask
in classAbstractCompactionStrategy
-
groupSSTablesForAntiCompaction
public java.util.Collection<java.util.Collection<SSTableReader>> groupSSTablesForAntiCompaction(java.util.Collection<SSTableReader> ssTablesToGroup)
Leveled compaction strategy has guarantees on the data contained within each level so we have to make sure we only create groups of SSTables with members from the same level. This way we won't end up creating invalid sstables during anti-compaction.- Overrides:
groupSSTablesForAntiCompaction
in classAbstractCompactionStrategy
- Parameters:
ssTablesToGroup
-- Returns:
- Groups of sstables from the same level
-
getEstimatedRemainingTasks
public int getEstimatedRemainingTasks()
- Specified by:
getEstimatedRemainingTasks
in classAbstractCompactionStrategy
- Returns:
- the number of background tasks estimated to still be needed for this columnfamilystore
-
getMaxSSTableBytes
public long getMaxSSTableBytes()
- Specified by:
getMaxSSTableBytes
in classAbstractCompactionStrategy
- Returns:
- size in bytes of the largest sstables for this strategy
-
getLevelFanoutSize
public int getLevelFanoutSize()
-
getScanners
public AbstractCompactionStrategy.ScannerList getScanners(java.util.Collection<SSTableReader> sstables, java.util.Collection<Range<Token>> ranges)
Description copied from class:AbstractCompactionStrategy
Returns a list of KeyScanners given sstables and a range on which to scan. The default implementation simply grab one SSTableScanner per-sstable, but overriding this method allow for a more memory efficient solution if we know the sstable don't overlap (see LeveledCompactionStrategy for instance).- Overrides:
getScanners
in classAbstractCompactionStrategy
-
replaceSSTables
public void replaceSSTables(java.util.Collection<SSTableReader> removed, java.util.Collection<SSTableReader> added)
Description copied from class:AbstractCompactionStrategy
Replaces sstables in the compaction strategy Note that implementations must be able to handle duplicate notifications here (that removed are already gone and added have already been added)- Overrides:
replaceSSTables
in classAbstractCompactionStrategy
-
metadataChanged
public void metadataChanged(StatsMetadata oldMetadata, SSTableReader sstable)
Description copied from class:AbstractCompactionStrategy
Called when the metadata has changed for an sstable - for example if the level changed Not called when repair status changes (which is also metadata), because this results in the sstable getting removed from the compaction strategy instance.- Overrides:
metadataChanged
in classAbstractCompactionStrategy
-
addSSTables
public void addSSTables(java.lang.Iterable<SSTableReader> sstables)
Description copied from class:AbstractCompactionStrategy
Adds sstables, note that implementations must handle duplicate notifications here (added already being in the compaction strategy)- Overrides:
addSSTables
in classAbstractCompactionStrategy
-
addSSTable
public void addSSTable(SSTableReader added)
Description copied from class:AbstractCompactionStrategy
Adds sstable, note that implementations must handle duplicate notifications here (added already being in the compaction strategy)- Specified by:
addSSTable
in classAbstractCompactionStrategy
-
removeSSTable
public void removeSSTable(SSTableReader sstable)
Description copied from class:AbstractCompactionStrategy
Removes sstable from the strategy, implementations must be able to handle the sstable having already been removed.- Specified by:
removeSSTable
in classAbstractCompactionStrategy
-
getSSTables
protected java.util.Set<SSTableReader> getSSTables()
Description copied from class:AbstractCompactionStrategy
Returns the sstables managed by this strategy instance- Specified by:
getSSTables
in classAbstractCompactionStrategy
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
strategyLogger
public CompactionLogger.Strategy strategyLogger()
- Overrides:
strategyLogger
in classAbstractCompactionStrategy
-
validateOptions
public static java.util.Map<java.lang.String,java.lang.String> validateOptions(java.util.Map<java.lang.String,java.lang.String> options) throws ConfigurationException
- Throws:
ConfigurationException
-
-