## org.apache.cassandra.io.sstable
Class SSTableReader

    java.lang.Object
      org.apache.cassandra.io.sstable.SSTable
          org.apache.cassandra.io.sstable.SSTableReader

    public class SSTableReader

extends SSTable

SSTableReaders are open()ed by Table.onStart; after that they are created by SSTableWriter.renameAndOpen. Do not re-call open() on existing SSTable files; use the references kept by ColumnFamilyStore post-start instead.

Nested Class Summary
`static class` `SSTableReader.Operator` TODO: Move someplace reusable

Field Summary
`long` `maxDataAge` maxDataAge is a timestamp in local server time (e.g.

Fields inherited from class org.apache.cassandra.io.sstable.SSTable
`COMPONENT_DATA, COMPONENT_DIGEST, COMPONENT_FILTER, COMPONENT_INDEX, COMPONENT_STATS, components, compression, descriptor, first, last, maxTimestampComparator, metadata, partitioner, sstableComparator, sstableOrdering, TEMPFILE_MARKER`

Method Summary
`boolean` `acquireReference()`
`static boolean` `acquireReferences(java.lang.Iterable<SSTableReader> sstables)`
`static java.util.Collection<SSTableReader>` `batchOpen(java.util.Set<java.util.Map.Entry<Descriptor,java.util.Set<Component>>> entries, java.util.Set<DecoratedKey> savedKeys, DataTracker tracker, CFMetaData metadata, IPartitioner partitioner)`
`void` `cacheKey(DecoratedKey key, java.lang.Long info)`
`void` `createLinks(java.lang.String snapshotDirectoryPath)`
`static DecoratedKey` `decodeKey(IPartitioner p, Descriptor d, java.nio.ByteBuffer bytes)` Conditionally use the deprecated 'IPartitioner.convertFromDiskFormat' method.
`long` `estimatedKeys()`
`long` `estimatedKeysForRanges(java.util.Collection<Range> ranges)`
`void` `forceFilterFailures()` For testing purposes only.
`static long` `getApproximateKeyCount(java.lang.Iterable<SSTableReader> sstables)`
`Filter` `getBloomFilter()`
`long` `getBloomFilterFalsePositiveCount()`
`long` `getBloomFilterSerializedSize()`
`long` `getBloomFilterTruePositiveCount()`
`java.lang.Long` `getCachedPosition(DecoratedKey key, boolean updateStats)`
`CompressionMetadata` `getCompressionMetadata()` Returns the compression metadata for this sstable.
`double` `getCompressionRatio()`
`SSTableScanner` `getDirectScanner()` Direct I/O SSTableScanner
`SSTableScanner` `getDirectScanner(Range range)` Direct I/O SSTableScanner over a defined range of tokens.
`EstimatedHistogram` `getEstimatedColumnCount()`
`EstimatedHistogram` `getEstimatedRowSize()`
`FileDataInput` `getFileDataInput(DecoratedKey decoratedKey, int bufferSize)`
`InstrumentingCache<Pair<Descriptor,DecoratedKey>,java.lang.Long>` `getKeyCache()`
`java.util.Collection<DecoratedKey>` `getKeySamples()`
`java.lang.Iterable<DecoratedKey>` `getKeySamples(Range range)`
`long` `getMaxTimestamp()`
`long` `getPosition(DecoratedKey decoratedKey, SSTableReader.Operator op)`
`java.util.List<Pair<java.lang.Long,java.lang.Long>>` `getPositionsForRanges(java.util.Collection<Range> ranges)` Determine the minimal set of sections that can be extracted from this SSTable to cover the given ranges.
`long` `getRecentBloomFilterFalsePositiveCount()`
`long` `getRecentBloomFilterTruePositiveCount()`
`ReplayPosition` `getReplayPosition()`
`SSTableScanner` `getScanner(QueryFilter filter)`
`static void` `logOpenException(Descriptor descriptor, java.io.IOException e)`
`void` `markCompacted()` Mark the sstable as compacted.
`boolean` `newSince(long age)` Tests if the sstable contains data newer than the given age param (in localhost currentMilli time).
`long` `onDiskLength()`
`static SSTableReader` `open(Descriptor descriptor)`
`static SSTableReader` `open(Descriptor desc, CFMetaData metadata)`
`static SSTableReader` `open(Descriptor descriptor, java.util.Set<Component> components, CFMetaData metadata, IPartitioner partitioner)`
`static SSTableReader` `open(Descriptor descriptor, java.util.Set<Component> components, java.util.Set<DecoratedKey> savedKeys, DataTracker tracker, CFMetaData metadata, IPartitioner partitioner)`
`RandomAccessReader` `openDataReader(boolean skipIOCache)`
`static long` `readRowSize(java.io.DataInput in, Descriptor d)`
`void` `releaseReference()`
`static void` `releaseReferences(java.lang.Iterable<SSTableReader> sstables)`
`void` `setTrackedBy(DataTracker tracker)`
`long` `uncompressedLength()`

Methods inherited from class org.apache.cassandra.io.sstable.SSTable
`bytesOnDisk, delete, getColumnFamilyName, getFilename, getMinimalKey, getTableName, getTotalBytes, toString, tryComponentFromFilename`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Field Detail

### maxDataAge

    public final long maxDataAge

  maxDataAge is a timestamp in local server time (e.g. System.currentTimeMilli) which represents an uppper bound to the newest piece of data stored in the sstable. In other words, this sstable does not contain items created later than maxDataAge. The field is not serialized to disk, so relying on it for more than what truncate does is not advised. When a new sstable is flushed, maxDataAge is set to the time of creation. When a sstable is created from compaction, maxDataAge is set to max of all merged tables. The age is in milliseconds since epoc and is local to this host.

Method Detail

### getApproximateKeyCount

    public static long getApproximateKeyCount(java.lang.Iterable<SSTableReader> sstables)

### open

    public static SSTableReader open(Descriptor descriptor)
                              throws java.io.IOException

  Throws:
    `java.io.IOException`

### open

    public static SSTableReader open(Descriptor desc,
                                     CFMetaData metadata)
                              throws java.io.IOException

  Throws:
    `java.io.IOException`

### open

    public static SSTableReader open(Descriptor descriptor,
                                     java.util.Set<Component> components,
                                     CFMetaData metadata,
                                     IPartitioner partitioner)
                              throws java.io.IOException

  Throws:
    `java.io.IOException`

### open

    public static SSTableReader open(Descriptor descriptor,
                                     java.util.Set<Component> components,
                                     java.util.Set<DecoratedKey> savedKeys,
                                     DataTracker tracker,
                                     CFMetaData metadata,
                                     IPartitioner partitioner)
                              throws java.io.IOException

  Throws:
    `java.io.IOException`

### logOpenException

    public static void logOpenException(Descriptor descriptor,
                                        java.io.IOException e)

### batchOpen

    public static java.util.Collection<SSTableReader> batchOpen(java.util.Set<java.util.Map.Entry<Descriptor,java.util.Set<Component>>> entries,
                                                                java.util.Set<DecoratedKey> savedKeys,
                                                                DataTracker tracker,
                                                                CFMetaData metadata,
                                                                IPartitioner partitioner)

### setTrackedBy

    public void setTrackedBy(DataTracker tracker)

### getCompressionMetadata

    public CompressionMetadata getCompressionMetadata()

  Returns the compression metadata for this sstable.

  Throws:
    `java.lang.IllegalStateException` - if the sstable is not compressed

### forceFilterFailures

    public void forceFilterFailures()

  For testing purposes only.

### getBloomFilter

    public Filter getBloomFilter()

### getBloomFilterSerializedSize

    public long getBloomFilterSerializedSize()

### estimatedKeys

    public long estimatedKeys()

  Returns:
    An estimate of the number of keys in this SSTable.

### estimatedKeysForRanges

    public long estimatedKeysForRanges(java.util.Collection<Range> ranges)

  Parameters:
    `ranges` -
  Returns:
    An estimate of the number of keys for given ranges in this SSTable.

### getKeySamples

    public java.util.Collection<DecoratedKey> getKeySamples()

  Returns:
    Approximately 1/INDEX_INTERVALth of the keys in this SSTable.

### getKeySamples

    public java.lang.Iterable<DecoratedKey> getKeySamples(Range range)

### getPositionsForRanges

    public java.util.List<Pair<java.lang.Long,java.lang.Long>> getPositionsForRanges(java.util.Collection<Range> ranges)

  Determine the minimal set of sections that can be extracted from this SSTable to cover the given ranges.

  Returns:
    A sorted list of (offset,end) pairs that cover the given ranges in the datafile for this SSTable.

### cacheKey

    public void cacheKey(DecoratedKey key,
                         java.lang.Long info)

### getCachedPosition

    public java.lang.Long getCachedPosition(DecoratedKey key,
                                            boolean updateStats)

### getPosition

    public long getPosition(DecoratedKey decoratedKey,
                            SSTableReader.Operator op)

  Parameters:
    `decoratedKey` - The key to apply as the rhs to the given Operator.
    `op` - The Operator defining matching keys: the nearest key to the target matching the operator wins.
  Returns:
    The position in the data file to find the key, or -1 if the key is not present

### uncompressedLength

    public long uncompressedLength()

  Returns:
    The length in bytes of the data for this SSTable. For compressed files, this is not the same thing as the on disk size (see onDiskLength())

### onDiskLength

    public long onDiskLength()

  Returns:
    The length in bytes of the on disk size for this SSTable. For compressed files, this is not the same thing as the data length (see length())

### acquireReference

    public boolean acquireReference()

### releaseReference

    public void releaseReference()

### markCompacted

    public void markCompacted()

  Mark the sstable as compacted. When calling this function, the caller must ensure that the SSTableReader is not referenced anywhere except for threads holding a reference.

### getScanner

    public SSTableScanner getScanner(QueryFilter filter)

  Parameters:
    `filter` - filter to use when reading the columns
  Returns:
    A Scanner for seeking over the rows of the SSTable.

### getDirectScanner

    public SSTableScanner getDirectScanner()

  Direct I/O SSTableScanner

  Returns:
    A Scanner for seeking over the rows of the SSTable.

### getDirectScanner

    public SSTableScanner getDirectScanner(Range range)

  Direct I/O SSTableScanner over a defined range of tokens.

  Parameters:
    `range` - the range of keys to cover
  Returns:
    A Scanner for seeking over the rows of the SSTable.

### getFileDataInput

    public FileDataInput getFileDataInput(DecoratedKey decoratedKey,
                                          int bufferSize)

### newSince

    public boolean newSince(long age)

  Tests if the sstable contains data newer than the given age param (in localhost currentMilli time). This works in conjunction with maxDataAge which is an upper bound on the create of data in this sstable.

  Parameters:
    `age` - The age to compare the maxDataAre of this sstable. Measured in millisec since epoc on this host
  Returns:
    True iff this sstable contains data that's newer than the given age parameter.

### readRowSize

    public static long readRowSize(java.io.DataInput in,
                                   Descriptor d)
                            throws java.io.IOException

  Throws:
    `java.io.IOException`

### createLinks

    public void createLinks(java.lang.String snapshotDirectoryPath)
                     throws java.io.IOException

  Throws:
    `java.io.IOException`

### decodeKey

    public static DecoratedKey decodeKey(IPartitioner p,
                                         Descriptor d,
                                         java.nio.ByteBuffer bytes)

  Conditionally use the deprecated 'IPartitioner.convertFromDiskFormat' method.

### getBloomFilterFalsePositiveCount

    public long getBloomFilterFalsePositiveCount()

### getRecentBloomFilterFalsePositiveCount

    public long getRecentBloomFilterFalsePositiveCount()

### getBloomFilterTruePositiveCount

    public long getBloomFilterTruePositiveCount()

### getRecentBloomFilterTruePositiveCount

    public long getRecentBloomFilterTruePositiveCount()

### getKeyCache

    public InstrumentingCache<Pair<Descriptor,DecoratedKey>,java.lang.Long> getKeyCache()

### getEstimatedRowSize

    public EstimatedHistogram getEstimatedRowSize()

### getEstimatedColumnCount

    public EstimatedHistogram getEstimatedColumnCount()

### getCompressionRatio

    public double getCompressionRatio()

### getReplayPosition

    public ReplayPosition getReplayPosition()

### getMaxTimestamp

    public long getMaxTimestamp()

### openDataReader

    public RandomAccessReader openDataReader(boolean skipIOCache)
                                      throws java.io.IOException

  Throws:
    `java.io.IOException`

### acquireReferences

    public static boolean acquireReferences(java.lang.Iterable<SSTableReader> sstables)

  Parameters:
    `sstables` -
  Returns:
    true if all desired references were acquired. Otherwise, it will unreference any partial acquisition, and return false.

### releaseReferences

    public static void releaseReferences(java.lang.Iterable<SSTableReader> sstables)

Copyright © 2012 The Apache Software Foundation