{"record":{"id":"ebd5fed176dec390","repo":"apache/cassandra","slug":"sasi-only-supports-murmur3partitioner","errorCode":null,"errorMessage":"SASI only supports Murmur3Partitioner.","messagePattern":"SASI only supports Murmur3Partitioner\\.","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/index/sasi/SASIIndex.java","lineNumber":157,"sourceCode":"        for (SSTableReader sstable : index.init(tracker.getView().liveSSTables()))\n        {\n            Map<ColumnMetadata, ColumnIndex> perSSTable = toRebuild.get(sstable);\n            if (perSSTable == null)\n                toRebuild.put(sstable, (perSSTable = new HashMap<>()));\n\n            perSSTable.put(index.getDefinition(), index);\n        }\n\n        CompactionManager.instance.submitIndexBuild(new SASIIndexBuilder(baseCfs, toRebuild));\n    }\n\n    /**\n     * Called via reflection at {@link IndexMetadata#validateCustomIndexOptions}\n     */\n    public static Map<String, String> validateOptions(Map<String, String> options, TableMetadata metadata)\n    {\n        if (!(metadata.partitioner instanceof Murmur3Partitioner))\n            throw new ConfigurationException(\"SASI only supports Murmur3Partitioner.\");\n\n        String targetColumn = options.get(\"target\");\n        if (targetColumn == null)\n            throw new ConfigurationException(\"unknown target column\");\n\n        Pair<ColumnMetadata, IndexTarget.Type> target = TargetParser.parse(metadata, targetColumn);\n        if (target == null)\n            throw new ConfigurationException(\"failed to retrieve target column for: \" + targetColumn);\n\n        if (target.left.isComplex())\n            throw new ConfigurationException(\"complex columns are not yet supported by SASI\");\n\n        if (target.left.isPartitionKey())\n            throw new ConfigurationException(\"partition key columns are not yet supported by SASI\");\n\n        IndexMode.validateAnalyzer(options, target.left);\n\n        IndexMode mode = IndexMode.getMode(target.left, options);","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/index/sasi/SASIIndex.java#L139-L175","documentation":"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.\").","triggerScenarios":"CREATE CUSTOM INDEX ... USING 'org.apache.cassandra.index.sasi.SASIIndex' on a table whose keyspace was created with a non-Murmur3 partitioner.","commonSituations":"Legacy clusters migrated from RandomPartitioner/ByteOrderedPartitioner; copied keyspaces using non-default partitioners; misconfigured cassandra.yaml partitioner when creating the schema.","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"],"exampleFix":"// before\nCREATE KEYSPACE ks WITH partitioner = 'org.apache.cassandra.dht.ByteOrderedPartitioner' ...;\nCREATE CUSTOM INDEX idx ON ks.t (col) USING 'org.apache.cassandra.index.sasi.SASIIndex';\n// after\nCREATE KEYSPACE ks WITH partitioner = 'org.apache.cassandra.dht.Murmur3Partitioner' ...;\nCREATE CUSTOM INDEX idx ON ks.t (col) USING 'org.apache.cassandra.index.sasi.SASIIndex';","handlingStrategy":"validation","validationCode":"Row r = session.execute(\"SELECT partitioner FROM system.local\").one();\nif (!r.getString(\"partitioner\").endsWith(\"Murmur3Partitioner\"))\n    throw new IllegalStateException(\"SASI requires Murmur3Partitioner\");","typeGuard":null,"tryCatchPattern":"try {\n    session.execute(createIndexCql);\n} catch (ConfigurationException e) {\n    if (e.getMessage().contains(\"Murmur3Partitioner\")) {\n        // recreate keyspace with default partitioner or choose a different index\n    }\n}","preventionTips":["Always use the default Murmur3Partitioner for new keyspaces","Check partitioner before choosing SASI","Prefer SAI on newer versions; SASI is legacy"],"tags":["sasi","configuration","partitioner","index-creation"],"backgroundTag":"unsupported-config-value","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}