org.apache.cassandra.io.sstable
Class SSTableReader

java.lang.Object
  extended by org.apache.cassandra.io.sstable.SSTable
      extended by 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_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 getBloomFilterTruePositiveCount()
           
 java.lang.Long getCachedPosition(DecoratedKey key, boolean updateStats)
           
 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 desc)
           
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 desc)
                          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)

forceFilterFailures

public void forceFilterFailures()
For testing purposes only.


getBloomFilter

public Filter getBloomFilter()

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()

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 © 2011 The Apache Software Foundation