apache/cassandra · error · ConfigurationException

To set concurrent_validations > concurrent_compactors, set t

Error message

To set concurrent_validations > concurrent_compactors, set the system property -Dcassandra.allow_unlimited_concurrent_validations=true

What it means

DatabaseDescriptor caps concurrent_validations at concurrent_compactors unless the system property cassandra.allow_unlimited_concurrent_validations=true is set. Setting more validations than compactors without the flag fails startup with this ConfigurationException.

Source

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

            throw new ConfigurationException("Invalid value of entire_sstable_inter_dc_stream_throughput_outbound: " + conf.entire_sstable_inter_dc_stream_throughput_outbound.toString(), false);
        }

        if (conf.compaction_throughput.toMebibytesPerSecond() >= Integer.MAX_VALUE)
        {
            throw new ConfigurationException("Invalid value of compaction_throughput: " + conf.compaction_throughput.toString(), false);
        }
    }

    @VisibleForTesting
    static void applyConcurrentValidations(Config config)
    {
        if (config.concurrent_validations < 1)
        {
            config.concurrent_validations = config.concurrent_compactors;
        }
        else if (config.concurrent_validations > config.concurrent_compactors && !allowUnlimitedConcurrentValidations)
        {
            throw new ConfigurationException("To set concurrent_validations > concurrent_compactors, " +
                                             "set the system property -D" + ALLOW_UNLIMITED_CONCURRENT_VALIDATIONS.getKey() + "=true");
        }
    }

    @VisibleForTesting
    static void applyRepairCommandPoolSize(Config config)
    {
        if (config.repair_command_pool_size < 1)
            config.repair_command_pool_size = config.concurrent_validations;
    }

    @VisibleForTesting
    static void applyThresholdsValidations(Config config)
    {
        // Validate read thresholds
        validateReadThresholds("coordinator_read_size", config.coordinator_read_size_warn_threshold, config.coordinator_read_size_fail_threshold);
        validateReadThresholds("local_read_size", config.local_read_size_warn_threshold, config.local_read_size_fail_threshold);
        validateReadThresholds("row_index_read_size", config.row_index_read_size_warn_threshold, config.row_index_read_size_fail_threshold);

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Start the JVM with -Dcassandra.allow_unlimited_concurrent_validations=true in jvm-server.options
  2. Lower concurrent_validations to <= concurrent_compactors
  3. Raise concurrent_compactors so it is >= concurrent_validations
  4. Confirm the property is in the correct options file actually used at startup

Example fix

// before (cassandra.yaml)
concurrent_validations: 8
concurrent_compactors: 4
// after (either)
concurrent_validations: 4
// or add to jvm-server.options:
-Dcassandra.allow_unlimited_concurrent_validations=true
Defensive patterns

Strategy: validation

Validate before calling

Config c = DatabaseDescriptor.getRawConfig();
if (c.concurrent_validations > c.concurrent_compactors
    && !Boolean.getBoolean("cassandra.allow_unlimited_concurrent_validations"))
    throw new IllegalArgumentException("concurrent_validations exceeds concurrent_compactors");

Try / catch

try { DatabaseDescriptor.daemonInitialization(); } catch (ConfigurationException e) { LOG.error("Validation/compactor mismatch: " + e.getMessage()); System.exit(1); }

Prevention

When it happens

Trigger: cassandra.yaml (or runtime setconcurrentvalidations path) with concurrent_validations > concurrent_compactors while system property cassandra.allow_unlimited_concurrent_validations is not true, during applyConcurrentValidations.

Common situations: Tuning anti-entropy repair validation concurrency upward without realizing the compactor cap; properties set in the wrong JVM/startup context so the flag is not visible; default concurrent_compactors lower than expected on the node.

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/d9843860651168be. Report an issue: GitHub.