{"record":{"id":"a899e458274b01af","repo":"apache/cassandra","slug":"unknown-compression-options-since-no-compressio","errorCode":null,"errorMessage":"Unknown compression options () since no compression class found","messagePattern":"Unknown compression options \\(\\) since no compression class found","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/schema/CompressionParams.java","lineNumber":329,"sourceCode":"        className = className.contains(\".\") ? className : \"org.apache.cassandra.io.compress.\" + className;\n        try\n        {\n            return FBUtilities.classForNameWithoutInitialization(className, \"compression\", ICompressor.class);\n        }\n        catch (ConfigurationException e)\n        {\n            if (e.getCause() instanceof ClassNotFoundException || e.getCause() instanceof NoClassDefFoundError)\n                throw new ConfigurationException(\"Could not create Compression for type \" + className, e);\n            throw e;\n        }\n    }\n\n    private static ICompressor createCompressor(Class<? extends ICompressor> compressorClass, Map<String, String> compressionOptions) throws ConfigurationException\n    {\n        if (compressorClass == null)\n        {\n            if (!compressionOptions.isEmpty())\n                throw new ConfigurationException(\"Unknown compression options (\" + compressionOptions.keySet() + \") since no compression class found\");\n            return null;\n        }\n\n        return registry.getCompressor(compressorClass, compressionOptions);\n    }\n\n    public static ICompressor createCompressor(ParameterizedClass compression) throws ConfigurationException\n    {\n        return createCompressor(parseCompressorClass(compression.class_name), copyOptions(compression.parameters));\n    }\n\n    private static Map<String, String> copyOptions(Map<? extends CharSequence, ? extends CharSequence> co)\n    {\n        if (co == null || co.isEmpty())\n            return Collections.emptyMap();\n\n        Map<String, String> compressionOptions = new HashMap<>();\n        for (Map.Entry<? extends CharSequence, ? extends CharSequence> entry : co.entrySet())","sourceCodeStart":311,"sourceCodeEnd":347,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/schema/CompressionParams.java#L311-L347","documentation":"In createCompressor, if no compression class was resolved (compressorClass == null) yet leftover compression options remain, Cassandra throws ConfigurationException 'Unknown compression options (...) since no compression class found' — the options cannot be interpreted without a class.","triggerScenarios":"A compression options map containing unrecognized keys but no resolvable 'class'; calling createCompressor with a null class and non-empty compressionOptions.","commonSituations":"Misspelled 'class' key (e.g. 'compression_class') so the class lookup yields null while other keys remain; merged maps from configs that dropped the class entry.","solutions":["Ensure the map contains a valid 'class' key naming a known ICompressor implementation","Remove unknown/stale keys from the compression options map","Fix key-name typos so the class is actually recognized"],"exampleFix":"// before\ncompression = {'compression_class': 'LZ4Compressor', 'chunk_length_in_kb': '16'}\n// after\ncompression = {'class': 'LZ4Compressor', 'chunk_length_in_kb': '16'}","handlingStrategy":"validation","validationCode":"if (!opts.containsKey(\"class\") && opts.size() > 0)\n    throw new IllegalArgumentException(\"Compression options given without a 'class' key: \" + opts.keySet());","typeGuard":null,"tryCatchPattern":"try { compressionParams = CompressionParams.fromMap(opts); } catch (ConfigurationException e) { if (e.getMessage().contains(\"since no compression class found\")) { /* fix class key name */ } throw e; }","preventionTips":["Check the exact key name is 'class' (not class_name/compression_class)","Strip unknown keys from compression maps before submission","Keep a whitelist of allowed compression sub-options in tooling"],"tags":["cassandra","compression","configuration"],"backgroundTag":"missing-required-option","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"}