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

  1. Add accord.journal_directory to cassandra.yaml (e.g. /var/lib/cassandra/accord)
  2. Place it on durable storage comparable to the commitlog disk
  3. 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 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


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)