{"record":{"id":"a2a3ed98f02fdedd","repo":"apache/cassandra","slug":"unknown-compression-options-s","errorCode":null,"errorMessage":"Unknown compression options %s","messagePattern":"Unknown compression options (.+?)","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/io/compress/DefaultCompressionProvider.java","lineNumber":71,"sourceCode":"    /**\n     * Creates a new compressor instance with the given compression parameters.\n     *\n     * @param compressionOptions Configuration options for the compressor\n     * @return A new ICompressor instance\n     * @throws ConfigurationException if the compressor class does not have a valid create method,\n     * if there are unknown compression options, or if the compressor creation fails\n     */\n    @Override\n    public ICompressor createCompressor(Class<?> compressorClass, Map<String, String> compressionOptions) throws IllegalStateException\n    {\n        try\n        {\n            Method method = compressorClass.getMethod(\"create\", Map.class);\n            ICompressor compressor = (ICompressor)method.invoke(null, compressionOptions);\n            // Check for unknown options\n            for (String provided : compressionOptions.keySet())\n                if (!compressor.supportedOptions().contains(provided))\n                    throw new ConfigurationException(\"Unknown compression options \" + provided);\n            return compressor;\n        }\n        catch (NoSuchMethodException e)\n        {\n            throw new ConfigurationException(\"create method not found\", e);\n        }\n        catch (SecurityException e)\n        {\n            throw new ConfigurationException(\"Access forbidden\", e);\n        }\n        catch (IllegalAccessException e)\n        {\n            throw new ConfigurationException(\"Cannot access method create in \" + compressorClass.getName(), e);\n        }\n        catch (InvocationTargetException e)\n        {\n            if (e.getTargetException() instanceof ConfigurationException)\n                throw (ConfigurationException) e.getTargetException();","sourceCodeStart":53,"sourceCodeEnd":89,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/io/compress/DefaultCompressionProvider.java#L53-L89","documentation":"DefaultCompressionProvider.createCompressor() invokes the compressor class's static create(Map) method, then verifies every user-supplied option is in compressor.supportedOptions(). Any option name not recognized by the algorithm (e.g. 'chunk_length_kb' misspelled, or an option belonging to a different algorithm) triggers this ConfigurationException. This guards against silently ignoring compression settings that would not take effect.","triggerScenarios":"Creating a table with compression options containing a key not in the target compressor's supportedOptions() — e.g. compression: {'sstable_compression': 'LZ4Compressor', 'crc_check_chance_extra': '1.0'} or passing an unknown map entry directly to getCompressor().","commonSituations":"Typos in cassandra.yaml compression options; copying options between algorithms (Deflate has no lz4 chunk checksum option); old option names removed in a Cassandra upgrade; case mismatches in option keys.","solutions":["Remove or correct the unknown option in the compression map; check the valid names with the compressor's supportedOptions() (e.g. chunk_length_kb, crc_check_chance).","Cross-check option names against the Cassandra version in use; some options were added/renamed across releases.","Use DESCRIBE on a known-good table or the documentation of the specific compressor class to list valid options."],"exampleFix":"// before\nCREATE TABLE t (k int PRIMARY KEY) WITH compression = {'sstable_compression':'LZ4Compressor','lz4_chunk_lenght_kb':'64'};\n// after\nCREATE TABLE t (k int PRIMARY KEY) WITH compression = {'sstable_compression':'LZ4Compressor','chunk_length_kb':'64'};","handlingStrategy":"validation","validationCode":"ICompressor probe = LZ4Compressor.create(Collections.emptyMap());\nSet<String> supported = probe.supportedOptions();\nfor (String key : myOptions.keySet())\n    if (!supported.contains(key)) throw new IllegalArgumentException(\"Unknown option '\" + key + \"'; supported: \" + supported);","typeGuard":null,"tryCatchPattern":"try {\n    registry.getCompressor(LZ4Compressor.class, options);\n} catch (ConfigurationException e) {\n    if (e.getMessage().startsWith(\"Unknown compression options\")) log.error(\"Invalid option: {}\", e.getMessage());\n    throw e;\n}","preventionTips":["Cross-check compression option names against the compressor's supportedOptions() for your Cassandra version","Watch for typos and case-sensitivity in option keys","Do not copy options between different compression algorithms","Use schema from a known-good table as a template"],"tags":["compression","configuration","validation"],"backgroundTag":"invalid-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"}