{"record":{"id":"6eada8996848f364","repo":"apache/cassandra","slug":"s-value-s-is-less-than-or-equal-to-the-s-valu","errorCode":null,"errorMessage":"%s value (%s) is less than or equal to the %s value (%s)","messagePattern":"(.+?) value \\((.+?)\\) is less than or equal to the (.+?) value \\((.+?)\\)","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategyOptions.java","lineNumber":87,"sourceCode":"        String optionValue = options.get(MIN_SSTABLE_SIZE_KEY);\n        try\n        {\n            long minSSTableSize = optionValue == null ? DEFAULT_MIN_SSTABLE_SIZE : Long.parseLong(optionValue);\n            if (minSSTableSize < 0)\n            {\n                throw new ConfigurationException(String.format(\"%s must be non negative: %d\", MIN_SSTABLE_SIZE_KEY, minSSTableSize));\n            }\n        }\n        catch (NumberFormatException e)\n        {\n            throw new ConfigurationException(String.format(\"%s is not a parsable int (base10) for %s\", optionValue, MIN_SSTABLE_SIZE_KEY), e);\n        }\n\n        double bucketLow = parseDouble(options, BUCKET_LOW_KEY, DEFAULT_BUCKET_LOW);\n        double bucketHigh = parseDouble(options, BUCKET_HIGH_KEY, DEFAULT_BUCKET_HIGH);\n        if (bucketHigh <= bucketLow)\n        {\n            throw new ConfigurationException(String.format(\"%s value (%s) is less than or equal to the %s value (%s)\",\n                                                           BUCKET_HIGH_KEY, bucketHigh, BUCKET_LOW_KEY, bucketLow));\n        }\n\n        uncheckedOptions.remove(MIN_SSTABLE_SIZE_KEY);\n        uncheckedOptions.remove(BUCKET_LOW_KEY);\n        uncheckedOptions.remove(BUCKET_HIGH_KEY);\n\n        return uncheckedOptions;\n    }\n\n    @Override\n    public String toString()\n    {\n        return String.format(\"Min sstable size: %d, bucket low: %f, bucket high: %f\", minSSTableSize, bucketLow, bucketHigh);\n    }\n\n}\n","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategyOptions.java#L69-L105","documentation":"ConfigurationException thrown when the size-tiered bucketing bounds are inverted: bucket_high must be strictly greater than bucket_low. These multipliers define the size range for grouping similarly sized SSTables, so high <= low makes bucketing undefined and is rejected during option validation.","triggerScenarios":"CREATE/ALTER TABLE with bucket_high <= bucket_low, e.g. {'bucket_low':'1.5','bucket_high':'1.5'} or {'bucket_low':'1.5','bucket_high':'0.5'}.","commonSituations":"Copy-paste swapping the two keys; automated tuning experiments writing values that converge to equality; misunderstanding that these are ratios, not absolute sizes.","solutions":["Set bucket_high strictly greater than bucket_low (defaults: bucket_low='0.5', bucket_high='1.5').","Remove both options to revert to defaults.","Add validation in any auto-tuning tool that enforces bucket_high > bucket_low before applying."],"exampleFix":"// before\n{'bucket_low':'1.5','bucket_high':'1.5'}\n// after\n{'bucket_low':'0.5','bucket_high':'1.5'}","handlingStrategy":"validation","validationCode":"double low = Double.parseDouble(opts.getOrDefault(\"bucket_low\", \"0.5\"));\ndouble high = Double.parseDouble(opts.getOrDefault(\"bucket_high\", \"1.5\"));\nif (high <= low) throw new IllegalArgumentException(\"bucket_high must be > bucket_low\");","typeGuard":null,"tryCatchPattern":"try { schema.alterTable(cql); } catch (ConfigurationException e) { if (e.getMessage().contains(\"less than or equal to\")) { /* swap/correct bounds and retry */ } else throw e; }","preventionTips":["Keep defaults 0.5/1.5 unless you have measured reason to change them.","In auto-tuning tools, enforce high > low before writing options.","Verify key order when copy-pasting bucket_low/bucket_high pairs."],"tags":["compaction","configuration","validation"],"backgroundTag":"conflicting-config-options","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"}