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

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `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`
    `static java.lang.String` | `INDEX_KEYS_OPTION_NAME` The name of the option used to specify that the index is on the collection keys.
    `static java.lang.String` | `INDEX_VALUES_OPTION_NAME` The name of the option used to specify that the index is on the collection values.
    `static AbstractType<?>` | `keyComparator`
    `protected static org.slf4j.Logger` | `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `SecondaryIndex()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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 long` | `estimateResultRows()`
    `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 CellNameType` | `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 java.lang.String` | `getNameForSystemKeyspace(java.nio.ByteBuffer columnName)` Return the unique name for this index and column to be stored in the SystemKeyspace that tracks if each column is built
    `abstract boolean` | `indexes(CellName name)` Returns true if the provided cell 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()`
    `boolean` | `supportsOperator(Operator operator)` Returns true if the index supports lookups for the given operator, false otherwise.
    `java.lang.String` | `toString()`
    `abstract void` | `truncateBlocking(long truncatedAt)` Truncate all the data from the current index
    `abstract boolean` | `validate(Cell cell)`
    `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, 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

    - #### INDEX_KEYS_OPTION_NAME

          public static final java.lang.String INDEX_KEYS_OPTION_NAME

      The name of the option used to specify that the index is on the collection keys.
      See Also:
        Constant Field Values

    - #### INDEX_VALUES_OPTION_NAME

          public static final java.lang.String INDEX_VALUES_OPTION_NAME

      The name of the option used to specify that the index is on the collection values.
      See Also:
        Constant Field Values

    - #### keyComparator

          public static final AbstractType<?> keyComparator

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

    - #### getNameForSystemKeyspace

          public abstract java.lang.String getNameForSystemKeyspace(java.nio.ByteBuffer columnName)

      Return the unique name for this index and column to be stored in the SystemKeyspace 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

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

    - #### truncateBlocking

          public abstract void truncateBlocking(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()

    - #### supportsOperator

          public boolean supportsOperator(Operator operator)

      Returns true if the index supports lookups for the given operator, false otherwise.

    - #### getIndexKeyFor

          public DecoratedKey getIndexKeyFor(java.nio.ByteBuffer value)

      Returns the decoratedKey for a column value
      Parameters:
        `value` - column value
      Returns:
        decorated key

    - #### indexes

          public abstract boolean indexes(CellName name)

      Returns true if the provided cell name is indexed by this secondary index.

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

    - #### estimateResultRows

          public abstract long estimateResultRows()

    - #### getIndexComparator

          public static CellNameType 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.

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`

Copyright © 2014 The Apache Software Foundation