apache/cassandra · error · ConfigurationException
SASI only supports Murmur3Partitioner.
Error message
SASI only supports Murmur3Partitioner.
What it means
SASIIndex.validateOptions is invoked when creating a SASI index. SASI's on-disk formats and tokenizers are implemented only for Murmur3Partitioner, so if the table uses any other partitioner (e.g. ByteOrderedPartitioner, RandomPartitioner) it throws ConfigurationException("SASI only supports Murmur3Partitioner.").
Source
Thrown at src/java/org/apache/cassandra/index/sasi/SASIIndex.java:157
for (SSTableReader sstable : index.init(tracker.getView().liveSSTables()))
{
Map<ColumnMetadata, ColumnIndex> perSSTable = toRebuild.get(sstable);
if (perSSTable == null)
toRebuild.put(sstable, (perSSTable = new HashMap<>()));
perSSTable.put(index.getDefinition(), index);
}
CompactionManager.instance.submitIndexBuild(new SASIIndexBuilder(baseCfs, toRebuild));
}
/**
* Called via reflection at {@link IndexMetadata#validateCustomIndexOptions}
*/
public static Map<String, String> validateOptions(Map<String, String> options, TableMetadata metadata)
{
if (!(metadata.partitioner instanceof Murmur3Partitioner))
throw new ConfigurationException("SASI only supports Murmur3Partitioner.");
String targetColumn = options.get("target");
if (targetColumn == null)
throw new ConfigurationException("unknown target column");
Pair<ColumnMetadata, IndexTarget.Type> target = TargetParser.parse(metadata, targetColumn);
if (target == null)
throw new ConfigurationException("failed to retrieve target column for: " + targetColumn);
if (target.left.isComplex())
throw new ConfigurationException("complex columns are not yet supported by SASI");
if (target.left.isPartitionKey())
throw new ConfigurationException("partition key columns are not yet supported by SASI");
IndexMode.validateAnalyzer(options, target.left);
IndexMode mode = IndexMode.getMode(target.left, options);View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Recreate the keyspace/table with Murmur3Partitioner (the default) before creating SASI indexes
- Use SAI or legacy secondary indexes instead if the partitioner cannot change
- Verify partitioner in system.local or cassandra.yaml before creating indexes
Example fix
// before CREATE KEYSPACE ks WITH partitioner = 'org.apache.cassandra.dht.ByteOrderedPartitioner' ...; CREATE CUSTOM INDEX idx ON ks.t (col) USING 'org.apache.cassandra.index.sasi.SASIIndex'; // after CREATE KEYSPACE ks WITH partitioner = 'org.apache.cassandra.dht.Murmur3Partitioner' ...; CREATE CUSTOM INDEX idx ON ks.t (col) USING 'org.apache.cassandra.index.sasi.SASIIndex';
Defensive patterns
Strategy: validation
Validate before calling
Row r = session.execute("SELECT partitioner FROM system.local").one();
if (!r.getString("partitioner").endsWith("Murmur3Partitioner"))
throw new IllegalStateException("SASI requires Murmur3Partitioner"); Try / catch
try {
session.execute(createIndexCql);
} catch (ConfigurationException e) {
if (e.getMessage().contains("Murmur3Partitioner")) {
// recreate keyspace with default partitioner or choose a different index
}
} Prevention
- Always use the default Murmur3Partitioner for new keyspaces
- Check partitioner before choosing SASI
- Prefer SAI on newer versions; SASI is legacy
When it happens
Trigger: CREATE CUSTOM INDEX ... USING 'org.apache.cassandra.index.sasi.SASIIndex' on a table whose keyspace was created with a non-Murmur3 partitioner.
Common situations: Legacy clusters migrated from RandomPartitioner/ByteOrderedPartitioner; copied keyspaces using non-default partitioners; misconfigured cassandra.yaml partitioner when creating the schema.
Related errors
- Missing directive: partitioner
- Invalid partitioner class
- Token must be >= 0 and <= 2**127
- case_sensitive option cannot be specified together with eith
- Unable to initialize analyzer class option specified [%s]
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/ebd5fed176dec390.
Report an issue: GitHub.