Package org.apache.cassandra.io.sstable
Class SSTable
- java.lang.Object
-
- org.apache.cassandra.io.sstable.SSTable
-
- Direct Known Subclasses:
BigTableZeroCopyWriter
,SSTableReader
,SSTableWriter
public abstract class SSTable extends java.lang.Object
This class is built on top of the SequenceFile. It stores data on disk in sorted fashion. However the sorting is upto the application. This class expects keys to be handed to it in sorted order. A separate index file is maintained as well, containing the SSTable keys and the offset into the SSTable at which they are found. Every 1/indexInterval key is read into memory when the SSTable is opened. Finally, a bloom filter file is also kept for the keys in each SSTable.
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Set<Component>
components
boolean
compression
Descriptor
descriptor
DecoratedKey
first
DecoratedKey
last
protected TableMetadataRef
metadata
protected DiskOptimizationStrategy
optimizationStrategy
static int
TOMBSTONE_HISTOGRAM_BIN_SIZE
static int
TOMBSTONE_HISTOGRAM_SPOOL_SIZE
static int
TOMBSTONE_HISTOGRAM_TTL_ROUND_SECONDS
-
Constructor Summary
Constructors Modifier Constructor Description protected
SSTable(Descriptor descriptor, java.util.Set<Component> components, TableMetadataRef metadata, DiskOptimizationStrategy optimizationStrategy)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addComponents(java.util.Collection<Component> newComponents)
Registers new custom components.protected static void
appendTOC(Descriptor descriptor, java.util.Collection<Component> components)
Appends new component names to the TOC component.long
bytesOnDisk()
static java.util.Set<Component>
componentsFor(Descriptor desc)
Discovers existing components for the descriptor.DecoratedKey
decorateKey(java.nio.ByteBuffer key)
static boolean
delete(Descriptor desc, java.util.Set<Component> components)
We use a ReferenceQueue to manage deleting files that have been compacted and for which no more SSTable references exist.static java.util.Set<Component>
discoverComponentsFor(Descriptor desc)
static long
estimateRowsFromIndex(RandomAccessReader ifile, Descriptor descriptor)
java.util.List<java.lang.String>
getAllFilePaths()
AbstractBounds<Token>
getBounds()
java.lang.String
getColumnFamilyName()
java.lang.String
getFilename()
java.lang.String
getIndexFilename()
java.lang.String
getKeyspaceName()
static DecoratedKey
getMinimalKey(DecoratedKey key)
If the given @param key occupies only part of a larger buffer, allocate a new buffer that is only as large as necessary.IPartitioner
getPartitioner()
TableMetadata
metadata()
protected static java.util.Set<Component>
readTOC(Descriptor descriptor)
Reads the list of components from the TOC component.protected static java.util.Set<Component>
readTOC(Descriptor descriptor, boolean skipMissing)
Reads the list of components from the TOC component.java.lang.String
toString()
static Pair<Descriptor,Component>
tryComponentFromFilename(java.io.File file)
Parse a sstable filename into both aDescriptor
andComponent
object.static Descriptor
tryDescriptorFromFilename(java.io.File file)
Parse a sstable filename into aDescriptor
object.static void
validateRepairedMetadata(long repairedAt, java.util.UUID pendingRepair, boolean isTransient)
-
-
-
Field Detail
-
TOMBSTONE_HISTOGRAM_BIN_SIZE
public static final int TOMBSTONE_HISTOGRAM_BIN_SIZE
- See Also:
- Constant Field Values
-
TOMBSTONE_HISTOGRAM_SPOOL_SIZE
public static final int TOMBSTONE_HISTOGRAM_SPOOL_SIZE
- See Also:
- Constant Field Values
-
TOMBSTONE_HISTOGRAM_TTL_ROUND_SECONDS
public static final int TOMBSTONE_HISTOGRAM_TTL_ROUND_SECONDS
-
descriptor
public final Descriptor descriptor
-
components
protected final java.util.Set<Component> components
-
compression
public final boolean compression
-
first
public DecoratedKey first
-
last
public DecoratedKey last
-
optimizationStrategy
protected final DiskOptimizationStrategy optimizationStrategy
-
metadata
protected final TableMetadataRef metadata
-
-
Constructor Detail
-
SSTable
protected SSTable(Descriptor descriptor, java.util.Set<Component> components, TableMetadataRef metadata, DiskOptimizationStrategy optimizationStrategy)
-
-
Method Detail
-
delete
public static boolean delete(Descriptor desc, java.util.Set<Component> components)
We use a ReferenceQueue to manage deleting files that have been compacted and for which no more SSTable references exist. But this is not guaranteed to run for each such file because of the semantics of the JVM gc. So, we write a marker to `compactedFilename` when a file is compacted; if such a marker exists on startup, the file should be removed. This method will also remove SSTables that are marked as temporary.- Returns:
- true if the file was deleted
-
metadata
public TableMetadata metadata()
-
getPartitioner
public IPartitioner getPartitioner()
-
decorateKey
public DecoratedKey decorateKey(java.nio.ByteBuffer key)
-
getMinimalKey
public static DecoratedKey getMinimalKey(DecoratedKey key)
If the given @param key occupies only part of a larger buffer, allocate a new buffer that is only as large as necessary.
-
getFilename
public java.lang.String getFilename()
-
getIndexFilename
public java.lang.String getIndexFilename()
-
getColumnFamilyName
public java.lang.String getColumnFamilyName()
-
getKeyspaceName
public java.lang.String getKeyspaceName()
-
getAllFilePaths
public java.util.List<java.lang.String> getAllFilePaths()
-
tryComponentFromFilename
public static Pair<Descriptor,Component> tryComponentFromFilename(java.io.File file)
Parse a sstable filename into both aDescriptor
andComponent
object.- Parameters:
file
- the filename to parse.- Returns:
- a pair of the
Descriptor
andComponent
corresponding tofile
if it corresponds to a valid and supported sstable filename,null
otherwise. Note that components of an unknown type will be returned as CUSTOM ones.
-
tryDescriptorFromFilename
public static Descriptor tryDescriptorFromFilename(java.io.File file)
Parse a sstable filename into aDescriptor
object.Note that this method ignores the component part of the filename; if this is not what you want, use
tryComponentFromFilename(java.io.File)
instead.- Parameters:
file
- the filename to parse.- Returns:
- the
Descriptor
corresponding tofile
if it corresponds to a valid and supported sstable filename,null
otherwise.
-
componentsFor
public static java.util.Set<Component> componentsFor(Descriptor desc)
Discovers existing components for the descriptor. Slow: only intended for use outside the critical path.
-
discoverComponentsFor
public static java.util.Set<Component> discoverComponentsFor(Descriptor desc)
-
estimateRowsFromIndex
public static long estimateRowsFromIndex(RandomAccessReader ifile, Descriptor descriptor) throws java.io.IOException
- Returns:
- An estimate of the number of keys contained in the given index file.
- Throws:
java.io.IOException
-
bytesOnDisk
public long bytesOnDisk()
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
readTOC
protected static java.util.Set<Component> readTOC(Descriptor descriptor) throws java.io.IOException
Reads the list of components from the TOC component.- Returns:
- set of components found in the TOC
- Throws:
java.io.IOException
-
readTOC
protected static java.util.Set<Component> readTOC(Descriptor descriptor, boolean skipMissing) throws java.io.IOException
Reads the list of components from the TOC component.- Parameters:
skipMissing
- , skip adding the component to the returned set if the corresponding file is missing.- Returns:
- set of components found in the TOC
- Throws:
java.io.IOException
-
appendTOC
protected static void appendTOC(Descriptor descriptor, java.util.Collection<Component> components)
Appends new component names to the TOC component.
-
addComponents
public void addComponents(java.util.Collection<Component> newComponents)
Registers new custom components. Used by custom compaction strategies. Adding a component for the second time is a no-op. Don't remove this - this method is a part of the public API, intended for use by custom compaction strategies.- Parameters:
newComponents
- collection of components to be added
-
getBounds
public AbstractBounds<Token> getBounds()
-
validateRepairedMetadata
public static void validateRepairedMetadata(long repairedAt, java.util.UUID pendingRepair, boolean isTransient)
-
-