{"record":{"id":"14251c296f9d0230","repo":"apache/cassandra","slug":"missing-directive-partitioner","errorCode":null,"errorMessage":"Missing directive: partitioner","messagePattern":"Missing directive: partitioner","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"critical","filePath":"src/java/org/apache/cassandra/config/DatabaseDescriptor.java","lineNumber":1837,"sourceCode":"    public static void applyLocator()\n    {\n        initializationLocator = new Locator(RegistrationStatus.instance,\n                                            FBUtilities.getBroadcastAddressAndPort(),\n                                            initialLocationProvider);\n    }\n\n    // definitely not safe for tools + clients - implicitly instantiates schema\n    public static void applyPartitioner()\n    {\n        applyPartitioner(conf);\n    }\n\n    public static void applyPartitioner(Config conf)\n    {\n        /* Hashing strategy */\n        if (conf.partitioner == null)\n        {\n            throw new ConfigurationException(\"Missing directive: partitioner\", false);\n        }\n        String name = conf.partitioner;\n        try\n        {\n            name = PARTITIONER.getString(conf.partitioner);\n            partitioner = FBUtilities.newPartitioner(name);\n        }\n        catch (Exception e)\n        {\n            throw new ConfigurationException(\"Invalid partitioner class \" + name, e);\n        }\n\n        partitionerName = partitioner.getClass().getCanonicalName();\n    }\n\n    private static Pair<DiskAccessMode, Boolean> resolveCommitLogWriteDiskAccessMode(DiskAccessMode providedDiskAccessMode)\n    {\n        boolean compressOrEncrypt = getCommitLogCompression() != null || (getEncryptionContext() != null && getEncryptionContext().isEnabled());","sourceCodeStart":1819,"sourceCodeEnd":1855,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L1819-L1855","documentation":"DatabaseDescriptor.applyPartitioner() requires cassandra.yaml to name a partitioner class (e.g. Murmur3Partitioner) because every token and row key hash depends on it. A null conf.partitioner is a fatal ConfigurationException; the node cannot start without knowing how to hash partition keys.","triggerScenarios":"cassandra.yaml omits the partitioner directive or sets partitioner: (empty), so conf.partitioner == null when applyPartitioner runs at startup.","commonSituations":"Hand-trimmed or auto-generated cassandra.yaml missing the partitioner line; environment variable/config substitution wiping the value; copying a minimal yaml that assumes defaults.","solutions":["Add partitioner: org.apache.cassandra.dht.Murmur3Partitioner to cassandra.yaml (the standard choice)","If a tool generates your yaml, ensure the partitioner key is emitted; re-add it if stripped","Check that any ${...} substitution in the yaml actually resolves to a non-empty value"],"exampleFix":"# before (cassandra.yaml)\n# partitioner line missing\n# after\npartitioner: org.apache.cassandra.dht.Murmur3Partitioner","handlingStrategy":"validation","validationCode":"if (yaml.get(\"partitioner\") == null || String.valueOf(yaml.get(\"partitioner\")).isBlank())\n    throw new IllegalStateException(\"cassandra.yaml must set partitioner, e.g. org.apache.cassandra.dht.Murmur3Partitioner\");","typeGuard":null,"tryCatchPattern":"try {\n    DatabaseDescriptor.applyPartitioner(conf);\n} catch (ConfigurationException e) {\n    if (e.getMessage().equals(\"Missing directive: partitioner\")) {\n        // add partitioner: org.apache.cassandra.dht.Murmur3Partitioner to cassandra.yaml\n    } else throw e;\n}","preventionTips":["Always include partitioner: org.apache.cassandra.dht.Murmur3Partitioner in every yaml","Never change the partitioner value on an existing cluster — verify it matches your data","Run config linters on generated/templated yaml to catch dropped keys"],"tags":["configuration","partitioner","startup"],"backgroundTag":"missing-required-config-field","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}