org.apache.cassandra.db.index
Class SecondaryIndex

java.lang.Object
  extended by org.apache.cassandra.db.index.SecondaryIndex
Direct Known Subclasses:
PerColumnSecondaryIndex, PerRowSecondaryIndex

public abstract class SecondaryIndex
extends java.lang.Object

Abstract base class for different types of secondary indexes. Do not extend this directly, please pick from PerColumnSecondaryIndex or PerRowSecondaryIndex


Field Summary
protected  ColumnFamilyStore baseCfs
          Base CF that has many indexes
protected  java.util.Set<ColumnDefinition> columnDefs
          The column definitions which this index is responsible for
static java.lang.String CUSTOM_INDEX_OPTION_NAME
           
protected static org.slf4j.Logger logger
           
 
Constructor Summary
SecondaryIndex()
           
 
Method Summary
 java.util.concurrent.Future<?> buildIndexAsync()
          Builds the index using the data in the underlying CF, non blocking
protected  void buildIndexBlocking()
          Builds the index using the data in the underlying CFS Blocks till it's complete
static SecondaryIndex createInstance(ColumnFamilyStore baseCfs, ColumnDefinition cdef)
          This is the primary way to create a secondary index instance for a CF column.
protected abstract  SecondaryIndexSearcher createSecondaryIndexSearcher(java.util.Set<java.nio.ByteBuffer> columns)
          Called at query time Creates a implementation specific searcher instance for this index type
abstract  void forceBlockingFlush()
          Forces this indexes in memory data to disk
 ColumnFamilyStore getBaseCfs()
           
 java.util.Set<ColumnDefinition> getColumnDefs()
           
abstract  ColumnFamilyStore getIndexCfs()
          Allow access to the underlying column family store if there is one
static AbstractType<?> getIndexComparator(CFMetaData baseMetadata, ColumnDefinition cdef)
          Returns the index comparator for index backed by CFS, or null.
 DecoratedKey getIndexKeyFor(java.nio.ByteBuffer value)
          Returns the decoratedKey for a column value
abstract  java.lang.String getIndexName()
           
abstract  long getLiveSize()
          Get current amount of memory this index is consuming (in bytes)
abstract  java.lang.String getNameForSystemTable(java.nio.ByteBuffer columnName)
          Return the unique name for this index and column to be stored in the SystemTable that tracks if each column is built
 boolean indexes(java.nio.ByteBuffer name)
          Returns true if the provided column name is indexed by this secondary index.
abstract  void init()
          Perform any initialization work
abstract  void invalidate()
          Remove the index and unregisters this index's mbean if one exists
 boolean isIndexBuilt(java.nio.ByteBuffer columnName)
          Checks if the index for specified column is fully built
abstract  void reload()
          Reload an existing index following a change to its configuration, or that of the indexed column(s).
abstract  void removeIndex(java.nio.ByteBuffer columnName)
          Delete all files and references to this index
 void setIndexBuilt()
           
 void setIndexRemoved()
           
abstract  void truncate(long truncatedAt)
          Truncate all the data from the current index
abstract  boolean validate(Column column)
           
abstract  void validateOptions()
          Validates the index_options passed in the ColumnDef
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

protected static final org.slf4j.Logger logger

CUSTOM_INDEX_OPTION_NAME

public static final java.lang.String CUSTOM_INDEX_OPTION_NAME
See Also:
Constant Field Values

baseCfs

protected ColumnFamilyStore baseCfs
Base CF that has many indexes


columnDefs

protected final java.util.Set<ColumnDefinition> columnDefs
The column definitions which this index is responsible for

Constructor Detail

SecondaryIndex

public SecondaryIndex()
Method Detail

init

public abstract void init()
Perform any initialization work


reload

public abstract void reload()
Reload an existing index following a change to its configuration, or that of the indexed column(s). Differs from init() in that we expect expect new resources (such as CFS for a KEYS index) to be created by init() but not here


validateOptions

public abstract void validateOptions()
                              throws ConfigurationException
Validates the index_options passed in the ColumnDef

Throws:
ConfigurationException

getIndexName

public abstract java.lang.String getIndexName()
Returns:
The name of the index

getNameForSystemTable

public abstract java.lang.String getNameForSystemTable(java.nio.ByteBuffer columnName)
Return the unique name for this index and column to be stored in the SystemTable that tracks if each column is built

Parameters:
columnName - the name of the column
Returns:
the unique name

isIndexBuilt

public boolean isIndexBuilt(java.nio.ByteBuffer columnName)
Checks if the index for specified column is fully built

Parameters:
columnName - the column
Returns:
true if the index is fully built

setIndexBuilt

public void setIndexBuilt()

setIndexRemoved

public void setIndexRemoved()

createSecondaryIndexSearcher

protected abstract SecondaryIndexSearcher createSecondaryIndexSearcher(java.util.Set<java.nio.ByteBuffer> columns)
Called at query time Creates a implementation specific searcher instance for this index type

Parameters:
columns - the list of columns which belong to this index type
Returns:
the secondary index search impl

forceBlockingFlush

public abstract void forceBlockingFlush()
Forces this indexes in memory data to disk


getLiveSize

public abstract long getLiveSize()
Get current amount of memory this index is consuming (in bytes)


getIndexCfs

public abstract ColumnFamilyStore getIndexCfs()
Allow access to the underlying column family store if there is one

Returns:
the underlying column family store or null

removeIndex

public abstract void removeIndex(java.nio.ByteBuffer columnName)
Delete all files and references to this index

Parameters:
columnName - the indexed column to remove

invalidate

public abstract void invalidate()
Remove the index and unregisters this index's mbean if one exists


truncate

public abstract void truncate(long truncatedAt)
Truncate all the data from the current index

Parameters:
truncatedAt - The truncation timestamp, all data before that timestamp should be rejected.

buildIndexBlocking

protected void buildIndexBlocking()
Builds the index using the data in the underlying CFS Blocks till it's complete


buildIndexAsync

public java.util.concurrent.Future<?> buildIndexAsync()
Builds the index using the data in the underlying CF, non blocking

Returns:
A future object which the caller can block on (optional)

getBaseCfs

public ColumnFamilyStore getBaseCfs()

getColumnDefs

public java.util.Set<ColumnDefinition> getColumnDefs()

getIndexKeyFor

public DecoratedKey getIndexKeyFor(java.nio.ByteBuffer value)
Returns the decoratedKey for a column value

Parameters:
value - column value
Returns:
decorated key

indexes

public boolean indexes(java.nio.ByteBuffer name)
Returns true if the provided column name is indexed by this secondary index. The default implement checks whether the name is one the columnDef name, but this should be overriden but subclass if needed.


createInstance

public static SecondaryIndex createInstance(ColumnFamilyStore baseCfs,
                                            ColumnDefinition cdef)
                                     throws ConfigurationException
This is the primary way to create a secondary index instance for a CF column. It will validate the index_options before initializing.

Parameters:
baseCfs - the source of data for the Index
cdef - the meta information about this column (index_type, index_options, name, etc...)
Returns:
The secondary index instance for this column
Throws:
ConfigurationException

validate

public abstract boolean validate(Column column)

getIndexComparator

public static AbstractType<?> getIndexComparator(CFMetaData baseMetadata,
                                                 ColumnDefinition cdef)
Returns the index comparator for index backed by CFS, or null. Note: it would be cleaner to have this be a member method. However we need this when opening indexes sstables, but by then the CFS won't be fully initiated, so the SecondaryIndex object won't be accessible.



Copyright © 2013 The Apache Software Foundation