apache/cassandra · warning

Accord journal is configured in periodic mode, while Cassand

Error message

Accord journal is configured in periodic mode, while Cassandra commit log is configured in {} mode

What it means

During config application in DatabaseDescriptor, the Accord journal flush mode is PERIODIC while the Cassandra commit log sync period is 0 (i.e. commitlog_sync is a synchronous mode like 'batch' with no periodic flush). Since the journal cannot inherit a zero-length flush period from the commit log, Cassandra logs this warning and falls back to accord.journal.periodic_flush_lag_block as the flush period. This is a configuration-consistency warning, not a fatal error.

Source

Thrown at src/java/org/apache/cassandra/config/DatabaseDescriptor.java:675

                throw new ConfigurationException("Group sync specified, but commitlog_sync_period found. Only specify commitlog_sync_group_window when using group sync", false);
            }
            logger.debug("Syncing log with a group window of {}", conf.commitlog_sync_period.toString());
        }
        else
        {
            if (conf.commitlog_sync_period.toMilliseconds() == 0)
            {
                throw new ConfigurationException("Missing value for commitlog_sync_period.", false);
            }
            logger.debug("Syncing log with a period of {}", conf.commitlog_sync_period.toString());
        }

        if (conf.accord.journal.flushPeriod == null)
        {
            conf.accord.journal.flushPeriod = conf.commitlog_sync_period;
            if (conf.accord.journal.flushMode == PERIODIC && conf.commitlog_sync_period.toMilliseconds() == 0)
            {
                logger.warn("Accord journal is configured in periodic mode, while Cassandra commit log is configured in {} mode", conf.commitlog_sync);
                conf.accord.journal.flushPeriod = conf.accord.journal.periodicFlushLagBlock;
            }
        }

        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;
        }

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Set an explicit accord.journal.flush_period in cassandra.yaml so it does not depend on commitlog_sync_period
  2. Switch commitlog_sync to 'periodic' with a nonzero commitlog_sync_period_in_ms, or accept the warning and verify accord.journal.periodic_flush_lag_block is sane
  3. If truly synchronous durability is required, configure the Accord journal flush mode explicitly rather than leaving it PERIODIC

Example fix

# before
cassandra.yaml:
  commitlog_sync: batch
  accord:
    journal:
      flush_mode: PERIODIC
# after
cassandra.yaml:
  commitlog_sync: batch
  accord:
    journal:
      flush_mode: PERIODIC
      flush_period: 500ms
Defensive patterns

Strategy: validation

Validate before calling

Config config = DatabaseDescriptor.loadConfig();
if (config.accord.journal.flush_period == null
    && config.accord.journal.flush_mode == Config.Accord.Journal.FlushMode.PERIODIC
    && config.commitlog_sync_period.toMilliseconds() == 0) {
    // journal will fall back to periodic_flush_lag_block; set flush_period explicitly
}

Try / catch

try { DatabaseDescriptor.applySimpleConfig(conf); } catch (ConfigurationException e) { /* handle config errors */ }

Prevention

When it happens

Trigger: cassandra.yaml sets accord.journal.flush_mode: PERIODIC, accord.journal.flush_period is unset, and conf.commitlog_sync_period resolves to 0 (typically commitlog_sync: batch). applySimpleConfig then cannot copy commitlog_sync_period into the journal flush period.

Common situations: Operators switching commitlog_sync from 'periodic' to 'batch' while also enabling Accord, or fresh Accord-enabled clusters where the journal flush period was left unset expecting it to follow the commit log.

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/e45717f700cedb98. Report an issue: GitHub.