## org.apache.cassandra.db.index
Class SecondaryIndex

    java.lang.Object
      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`

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()`
`abstract ColumnFamilyStore` `getIndexCfs()` Allow access to the underlying column family store if there is one
`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
`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(java.nio.ByteBuffer columnName)`
`void` `setIndexRemoved(java.nio.ByteBuffer columnName)`
`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

### 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 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()
                         throws java.io.IOException

  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

  Throws:
    `java.io.IOException`

### 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(java.nio.ByteBuffer columnName)

### setIndexRemoved

    public void setIndexRemoved(java.nio.ByteBuffer columnName)

### 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()
                                     throws java.io.IOException

  Forces this indexes in memory data to disk

  Throws:
    `java.io.IOException`

### 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)
                              throws java.io.IOException

  Delete all files and references to this index

  Parameters:
    `columnName` - the indexed column to remove
  Throws:
    `java.io.IOException`

### 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()
                               throws java.io.IOException

  Builds the index using the data in the underlying CFS Blocks till it's complete

  Throws:
    `java.io.IOException`

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

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

Copyright © 2013 The Apache Software Foundation