apache/cassandra · critical · ConfigurationException
DiskAccessMode '%s' is not supported
Error message
DiskAccessMode '%s' is not supported
What it means
DiskAccessMode.direct (io_uring-style direct I/O access) is not a supported value for disk_access_mode in this Cassandra build. applySimpleConfig rejects it outright (only auto/mmap/standard are accepted), so a node configured with direct fails at startup with this ConfigurationException.
Source
Thrown at src/java/org/apache/cassandra/config/DatabaseDescriptor.java:696
}
if (conf.accord.durability_flush_interval == null)
conf.accord.durability_flush_interval = conf.accord.shard_durability_cycle;
/* evaluate the DiskAccessMode Config directive, which also affects indexAccessMode selection */
if (conf.disk_access_mode == DiskAccessMode.auto || conf.disk_access_mode == DiskAccessMode.mmap_index_only)
{
conf.disk_access_mode = DiskAccessMode.standard;
indexAccessMode = DiskAccessMode.mmap;
}
else if (conf.disk_access_mode == DiskAccessMode.legacy)
{
conf.disk_access_mode = hasLargeAddressSpace() ? DiskAccessMode.mmap : DiskAccessMode.standard;
indexAccessMode = conf.disk_access_mode;
}
else if (conf.disk_access_mode == DiskAccessMode.direct)
{
throw new ConfigurationException(String.format("DiskAccessMode '%s' is not supported", DiskAccessMode.direct));
}
else
{
indexAccessMode = conf.disk_access_mode;
}
logger.info("DiskAccessMode is {}, indexAccessMode is {}", conf.disk_access_mode, indexAccessMode);
if (DiskAccessMode.auto == conf.compaction_read_disk_access_mode)
{
compactionReadDiskAccessMode = conf.disk_access_mode;
}
else if (DiskAccessMode.direct == conf.compaction_read_disk_access_mode)
{
compactionReadDiskAccessMode = DiskAccessMode.direct;
}
else
{
throw new IllegalArgumentException("Unsupported disk access mode for compaction_read_disk_access_mode " +View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Set `disk_access_mode: auto` and let Cassandra pick mmap vs standard based on address space.
- Use `disk_access_mode: mmap` on 64-bit hosts with sufficient address space, or `standard` otherwise.
- Upgrade to a Cassandra version that actually supports direct if direct I/O is a hard requirement.
Example fix
// before (cassandra.yaml) disk_access_mode: direct // after (cassandra.yaml) disk_access_mode: auto
Defensive patterns
Strategy: validation
Validate before calling
// Java, before toolInitialization()
String mode = System.getProperty("cassandra.config"); // or parse your yaml
Set<String> allowed = Set.of("auto", "mmap", "standard");
// if parsed disk_access_mode not in allowed -> fail fast with a clear message Prevention
- Only use values documented for your exact Cassandra version; `direct` is rejected in this build.
- Prefer `auto` unless you have a measured reason to pin mmap vs standard.
- Grep shared config templates for disk_access_mode when onboarding a new cluster.
When it happens
Trigger: Setting `disk_access_mode: direct` in cassandra.yaml (or via Config programmatically) before DatabaseDescriptor.toolInitialization/applyAll.
Common situations: Operators copying disk_access_mode: direct from newer experimental docs or other storage engines; trying to enable direct I/O on old ext4 setups; config templates shared across Cassandra versions where direct is accepted upstream but not in this build.
Related errors
- Configured ${configName} "${intf}" could not be found
- Configured ${configName} "${intf}" was found, but had no add
- Missing required directive CommitLogSync
- Missing value for commitlog_sync_group_window.
- Group sync specified, but commitlog_sync_period found. Only
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/2dd29a17f958d31e.
Report an issue: GitHub.