apache/cassandra · error · ConfigurationException

be positive

Error message

 be positive

What it means

native_transport_min_backoff_on_queue_overload must be a positive duration. DatabaseDescriptor throws this (notably terse, malformed) ConfigurationException ' be positive' when the minimum backoff is zero or negative.

Source

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

        conf.sai_options.validate();

        List<ConsistencyLevel> progressBarrierCLsArr = Arrays.asList(ALL, EACH_QUORUM, LOCAL_QUORUM, QUORUM, ONE, NODE_LOCAL);
        Set<ConsistencyLevel> progressBarrierCls = new HashSet<>(progressBarrierCLsArr);
        if (!progressBarrierCls.contains(conf.progress_barrier_min_consistency_level))
        {
            throw new ConfigurationException(String.format("Invalid value for progress_barrier_min_consistency_level %s. Allowed values: %s",
                                                           conf.progress_barrier_min_consistency_level, progressBarrierCLsArr));
        }

        if (!progressBarrierCls.contains(conf.progress_barrier_default_consistency_level))
        {
            throw new ConfigurationException(String.format("Invalid value for.progress_barrier_default_consistency_level %s. Allowed values: %s",
                                                           conf.progress_barrier_default_consistency_level, progressBarrierCLsArr));
        }

        if (conf.native_transport_min_backoff_on_queue_overload.toMilliseconds() <= 0)
            throw new ConfigurationException(" be positive");

        if (conf.native_transport_min_backoff_on_queue_overload.toMilliseconds() >= conf.native_transport_max_backoff_on_queue_overload.toMilliseconds())
            throw new ConfigurationException(String.format("native_transport_min_backoff_on_queue_overload should be strictly less than native_transport_max_backoff_on_queue_overload, but %s >= %s",
                                                           conf.native_transport_min_backoff_on_queue_overload,
                                                           conf.native_transport_max_backoff_on_queue_overload));

        if (conf.use_deterministic_table_id)
            logger.warn("use_deterministic_table_id is no longer supported and should be removed from cassandra.yaml.");

        // run audit logging options through sanitation and validation
        if (conf.audit_logging_options != null)
            setAuditLoggingOptions(conf.audit_logging_options);

        try
        {
            // Run through the validation by setting current values back to their setters, so we are sure that their values are valid.
            // We are catching IllegalArgumentException and translating it to ConfigurationException to comply with
            // rest of the logic in this method. These setters are also called in GCInspectorMXBean were IllegalArgumentException

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Set native_transport_min_backoff_on_queue_overload to a positive duration, e.g. 10ms
  2. Ensure the duration unit suffix is correct (ms, s) so the value does not round to <= 0
  3. Remove the setting to use the default

Example fix

// before (cassandra.yaml)
native_transport_min_backoff_on_queue_overload: 0ms
// after
native_transport_min_backoff_on_queue_overload: 10ms
Defensive patterns

Strategy: validation

Validate before calling

if (conf.native_transport_min_backoff_on_queue_overload.toMilliseconds() <= 0) throw new IllegalArgumentException("native_transport_min_backoff_on_queue_overload must be > 0");

Try / catch

try { DatabaseDescriptor.toolInitialization(); } catch (ConfigurationException e) { log.error("Bad native transport backoff: {}", e.getMessage()); }

Prevention

When it happens

Trigger: applySimpleConfig (via toolInitialization/applyAll) with native_transport_min_backoff_on_queue_overload set to 0 or a negative duration in cassandra.yaml.

Common situations: Operator sets min backoff to 0 thinking it disables backoff; unit typo producing a sub-millisecond value that truncates to <= 0ms.

Understand the failure class

Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.

Related errors


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