{"record":{"id":"7d35dd5fb3a28058","repo":"apache/cassandra","slug":"selected-sstable-format-s-is-not-available","errorCode":null,"errorMessage":"Selected sstable format '%s' is not available.","messagePattern":"Selected sstable format '(.+?)' is not available\\.","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/config/DatabaseDescriptor.java","lineNumber":1969,"sourceCode":"        }\n        ImmutableMap<String, Supplier<SSTableFormat<?, ?>>> providers = providersBuilder.build();\n        if (options != null)\n        {\n            Sets.SetView<String> unknownFormatNames = Sets.difference(options.keySet(), providers.keySet());\n            if (!unknownFormatNames.isEmpty())\n                throw new ConfigurationException(String.format(\"Configuration contains options of unknown sstable formats: %s\", unknownFormatNames));\n        }\n        return providers;\n    }\n\n    private static SSTableFormat<?, ?> getAndValidateWriteFormat(Map<String, SSTableFormat<?, ?>> sstableFormats, String selectedFormatName)\n    {\n        SSTableFormat<?, ?> selectedFormat;\n        if (StringUtils.isBlank(selectedFormatName))\n            selectedFormatName = BigFormat.NAME;\n        selectedFormat = sstableFormats.get(selectedFormatName);\n        if (selectedFormat == null)\n            throw new ConfigurationException(String.format(\"Selected sstable format '%s' is not available.\", selectedFormatName));\n\n        getStorageCompatibilityMode().validateSstableFormat(selectedFormat);\n\n        return selectedFormat;\n    }\n\n    private static void applyCompatibilityMode()\n    {\n        if (isClientInitialized())\n            // tools or clients should not limit the sstable formats they support\n            storageCompatibilityMode = StorageCompatibilityMode.NONE;\n        else if (conf != null && conf.storage_compatibility_mode != null)\n            storageCompatibilityMode = conf.storage_compatibility_mode;\n    }\n\n    private static void applySSTableFormats()\n    {\n        ServiceLoader<SSTableFormat.Factory> loader = ServiceLoader.load(SSTableFormat.Factory.class, DatabaseDescriptor.class.getClassLoader());","sourceCodeStart":1951,"sourceCodeEnd":1987,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L1951-L1987","documentation":"getAndValidateWriteFormat resolves the configured write format name against the registry of instantiated sstable formats; if the name is blank it defaults to BigFormat, and if the selected name has no registered format this ConfigurationException is thrown. It guarantees the node never starts with a write format that cannot be produced.","triggerScenarios":"cassandra.yaml sets sstable_formats.selected_format to a name that was not registered, e.g. 'bti' on a build where bti is absent, or a misspelled name, so sstableFormats.get(selectedFormatName) returns null.","commonSituations":"Typo in selected_format in cassandra.yaml; enabling a format in config on an edition/build that doesn't include it; storage compatibility mode interactions after upgrade where the format registry differs from config.","solutions":["Set sstable_formats.selected_format to a registered format name ('big' or 'bti'), or remove the property to default to 'big'","Check startup logs / DatabaseDescriptor's registered format list to see which formats are actually available","Verify the format's jar is on the classpath if it is a third-party format"],"exampleFix":"// before (cassandra.yaml)\nsstable_formats:\n  selected_format: btx\n// after\nsstable_formats:\n  selected_format: bti","handlingStrategy":"validation","validationCode":"String fmt = conf.sstable_formats != null ? conf.sstable_formats.selected_format : null;\nif (fmt != null && !Set.of(\"big\",\"bti\").contains(fmt))\n    throw new IllegalArgumentException(\"selected_format not available: \" + fmt);","typeGuard":null,"tryCatchPattern":"try { DatabaseDescriptor.daemonInitialization(); }\ncatch (ConfigurationException e) {\n    if (e.getMessage().contains(\"is not available\"))\n        log.error(\"Fix sstable_formats.selected_format in cassandra.yaml\");\n}","preventionTips":["Only set selected_format to names confirmed present in the target build","Remove the key to fall back to the 'big' default","Validate config in CI against the exact Cassandra version being deployed"],"tags":["configuration","sstable","cassandra-yaml"],"backgroundTag":"invalid-enum-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"}