apache/cassandra · critical · ConfigurationException
accord.journal_directory must be specified
Error message
accord.journal_directory must be specified
What it means
createAllDirectories requires conf.accord.journal_directory to be configured; Accord (transactional) needs a durable journal location, so a null value aborts startup with this ConfigurationException. It is part of the mandatory directory-creation sequence alongside commitlog and hints directories.
Solutions
- Add accord.journal_directory to cassandra.yaml (e.g. /var/lib/cassandra/accord)
- Place it on durable storage comparable to the commitlog disk
- In programmatic Config use, set config.accord.journal_directory before DatabaseDescriptor init
Example fix
// before (cassandra.yaml) accord: # journal_directory not set // after accord: journal_directory: /var/lib/cassandra/accord
Defensive patterns
Strategy: validation
Validate before calling
if (conf.accord == null || conf.accord.journal_directory == null)
throw new IllegalArgumentException("accord.journal_directory is required"); Try / catch
try { DatabaseDescriptor.daemonInitialization(); }
catch (ConfigurationException e) {
if (e.getMessage().contains("accord.journal_directory must be specified"))
addAccordDirectoryAndRestart();
} Prevention
- When merging configs across upgrades, include newly required keys (accord.*)
- Track upgrade NEWS.txt for new mandatory settings
- Render accord.journal_directory in all environment config templates
When it happens
Trigger: Starting a node whose cassandra.yaml has no accord.journal_directory entry (or an accord section stripped), so conf.accord.journal_directory is null when createAllDirectories executes.
Common situations: Upgrading an older cassandra.yaml that predates the accord settings and merging without adding the new key; hand-minimized configs used in CI/test clusters; environments where the accord section was commented out.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- accord.cache_size option was set incorrectly to
- accord.journal_directory must not be the same as any…
- At least one DataFileDirectory must be specified
- Cannot change transactional mode to
- Cannot create table . with transactional mode with…
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/7d30d68f797506a4.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/config/DatabaseDescriptor.java:2422
public static void createAllDirectories()
{
try
{
if (conf.data_file_directories.length == 0)
throw new ConfigurationException("At least one DataFileDirectory must be specified", false);
for (String dataFileDirectory : conf.data_file_directories)
FileUtils.createDirectory(dataFileDirectory);
if (conf.local_system_data_file_directory != null)
FileUtils.createDirectory(conf.local_system_data_file_directory);
if (conf.commitlog_directory == null)
throw new ConfigurationException("commitlog_directory must be specified", false);
FileUtils.createDirectory(conf.commitlog_directory);
if (conf.accord.journal_directory == null)
throw new ConfigurationException("accord.journal_directory must be specified", false);
FileUtils.createDirectory(conf.accord.journal_directory);
if (conf.hints_directory == null)
throw new ConfigurationException("hints_directory must be specified", false);
FileUtils.createDirectory(conf.hints_directory);
if (conf.saved_caches_directory == null)
throw new ConfigurationException("saved_caches_directory must be specified", false);
FileUtils.createDirectory(conf.saved_caches_directory);
if (conf.cdc_enabled)
{
if (conf.cdc_raw_directory == null)
throw new ConfigurationException("cdc_raw_directory must be specified", false);
FileUtils.createDirectory(conf.cdc_raw_directory);
}
boolean created = maybeCreateHeapDumpPath();View on GitHub (pinned to 88fd0f6a0e)