{"record":{"id":"bbf00c251460b133","repo":"apache/cassandra","slug":"unsupported-disk-access-mode-for-compaction-read-d","errorCode":null,"errorMessage":"Unsupported disk access mode for compaction_read_disk_access_mode (options: direct/auto) ${conf.compaction_read_disk_access_mode}","messagePattern":"Unsupported disk access mode for compaction_read_disk_access_mode \\(options: direct/auto\\) (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"critical","filePath":"src/java/org/apache/cassandra/config/DatabaseDescriptor.java","lineNumber":714,"sourceCode":"            throw new ConfigurationException(String.format(\"DiskAccessMode '%s' is not supported\", DiskAccessMode.direct));\n        }\n        else\n        {\n            indexAccessMode = conf.disk_access_mode;\n        }\n        logger.info(\"DiskAccessMode is {}, indexAccessMode is {}\", conf.disk_access_mode, indexAccessMode);\n\n        if (DiskAccessMode.auto == conf.compaction_read_disk_access_mode)\n        {\n            compactionReadDiskAccessMode = conf.disk_access_mode;\n        }\n        else if (DiskAccessMode.direct == conf.compaction_read_disk_access_mode)\n        {\n            compactionReadDiskAccessMode = DiskAccessMode.direct;\n        }\n        else\n        {\n            throw new IllegalArgumentException(\"Unsupported disk access mode for compaction_read_disk_access_mode \" +\n                                               \"(options: direct/auto) \" + conf.compaction_read_disk_access_mode);\n        }\n        logger.info(\"compaction_read_disk_access_mode resolved to: {}\", compactionReadDiskAccessMode);\n\n        /* phi convict threshold for FailureDetector */\n        if (conf.phi_convict_threshold < 5 || conf.phi_convict_threshold > 16)\n        {\n            throw new ConfigurationException(\"phi_convict_threshold must be between 5 and 16, but was \" + conf.phi_convict_threshold, false);\n        }\n\n        /* Thread per pool */\n        if (conf.concurrent_reads < 2)\n        {\n            throw new ConfigurationException(\"concurrent_reads must be at least 2, but was \" + conf.concurrent_reads, false);\n        }\n\n        if (conf.concurrent_writes < 2 && TEST_FAIL_MV_LOCKS_COUNT.getString(\"\").isEmpty())\n        {","sourceCodeStart":696,"sourceCodeEnd":732,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L696-L732","documentation":"compaction_read_disk_access_mode accepts only 'auto' and 'direct'; any other resolved value (e.g. mmap or standard, or an unrecognized string that fails the enum parse into something unexpected) makes applySimpleConfig throw this IllegalArgumentException. The option exists so compaction reads can opt into direct I/O independently of the global disk_access_mode.","triggerScenarios":"Configuring `compaction_read_disk_access_mode` to a value other than auto/direct (e.g. mmap, standard, or a typo) and starting the node via DatabaseDescriptor.toolInitialization/applyAll.","commonSituations":"Copy-pasting the value from disk_access_mode (which allows mmap/standard); typos like 'direct-io' or 'DIRECT' handled differently by the parser; experimenting with direct-I/O tuning on compaction-heavy nodes.","solutions":["Set `compaction_read_disk_access_mode: auto` so compaction reads inherit the appropriate mode.","Set it explicitly to `direct` if compaction reads should bypass the page cache.","Remove the option entirely to use the default behavior."],"exampleFix":"// before (cassandra.yaml)\ncompaction_read_disk_access_mode: mmap\n// after (cassandra.yaml)\ncompaction_read_disk_access_mode: auto","handlingStrategy":"validation","validationCode":"// Java, before toolInitialization()\nString v = /* compaction_read_disk_access_mode from yaml */;\nif (v != null && !Set.of(\"auto\", \"direct\").contains(v.toLowerCase()))\n    throw new IllegalArgumentException(\"compaction_read_disk_access_mode must be auto or direct, got: \" + v);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Remember this option allows only auto|direct — do not copy values valid for disk_access_mode.","Lint cassandra.yaml against a per-key allowlist of enum values.","Watch for case/typo variants of 'direct' in generated configs."],"tags":["config","compaction","disk-io","invalid-enum"],"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"}