{"record":{"id":"edcb6abac955290f","repo":"apache/cassandra","slug":"configuration-contains-options-of-unknown-sstable","errorCode":null,"errorMessage":"Configuration contains options of unknown sstable formats: %s","messagePattern":"Configuration contains options of unknown sstable formats: (.+?)","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/config/DatabaseDescriptor.java","lineNumber":1957,"sourceCode":"        }\n    }\n\n    private static ImmutableMap<String, Supplier<SSTableFormat<?, ?>>> validateAndMatchSSTableFormatOptions(Iterable<SSTableFormat.Factory> factories, Map<String, Map<String, String>> options)\n    {\n        ImmutableMap.Builder<String, Supplier<SSTableFormat<?, ?>>> providersBuilder = ImmutableMap.builder();\n        if (options == null)\n            options = ImmutableMap.of();\n        for (SSTableFormat.Factory factory : factories)\n        {\n            Map<String, String> formatOptions = options.getOrDefault(factory.name(), ImmutableMap.of());\n            providersBuilder.put(factory.name(), () -> factory.getInstance(ImmutableMap.copyOf(formatOptions)));\n        }\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","sourceCodeStart":1939,"sourceCodeEnd":1975,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L1939-L1975","documentation":"validateAndMatchSSTableFormatOptions compares the sstable format option keys in cassandra.yaml against the names of registered format providers; any key with no matching provider causes this ConfigurationException. Cassandra requires every format listed in the options map to correspond to a factory that was actually registered.","triggerScenarios":"cassandra.yaml contains an sstable_formats.options entry keyed by a format name that is not registered, e.g. options for a custom format whose jar was removed, or a typo in the format key, after downgrading from a version that shipped an extra format.","commonSituations":"Downgrade/upgrade across Cassandra versions where a format was removed; typo in the format key under sstable_formats options; custom format jar missing from the classpath while its config options remain in cassandra.yaml.","solutions":["Remove the unknown format's entry from sstable_formats.options in cassandra.yaml","Correct the format-name key so it matches a registered format (e.g. 'big' or 'bti')","Restore the format-provider jar to the classpath if the format is still wanted"],"exampleFix":"// before (cassandra.yaml)\nsstable_formats:\n  options:\n    btx:\n      some_option: 1\n// after\nsstable_formats:\n  options:\n    bti:\n      some_option: 1","handlingStrategy":"validation","validationCode":"Set<String> registered = Set.of(\"big\", \"bti\");\nSet<String> configured = yamlSstableFormatOptions.keySet();\nif (!registered.containsAll(configured))\n    throw new IllegalArgumentException(\"Unknown sstable formats: \" + Sets.difference(configured, registered));","typeGuard":null,"tryCatchPattern":"try { DatabaseDescriptor.daemonInitialization(); }\ncatch (ConfigurationException e) {\n    if (e.getMessage().startsWith(\"Configuration contains options of unknown sstable formats\"))\n        fixYamlOptions();\n}","preventionTips":["After version upgrades, diff cassandra.yaml against the new version's supported format keys","Never leave options for a removed custom format in cassandra.yaml","Copy format keys exactly as registered (lowercase names)"],"tags":["configuration","sstable","cassandra-yaml"],"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"}