apache/cassandra · error · IllegalArgumentException

entire_sstable_stream_throughput_outbound: is too large; it

Error message

entire_sstable_stream_throughput_outbound: is too large; it should be less than 2147483647 in MiB/s

What it means

setEntireSSTableStreamThroughputOutboundMebibytesPerSec rejects exactly Integer.MAX_VALUE because that value is reserved as an internal sentinel in the DataRateSpec bound and would corrupt later unit conversions. Any other int is accepted.

Source

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

    public static void setStreamThroughputOutboundMegabitsPerSec(int value)
    {
        conf.stream_throughput_outbound = DataRateSpec.LongBytesPerSecondBound.megabitsPerSecondInBytesPerSecond(value);
    }

    public static double getEntireSSTableStreamThroughputOutboundMebibytesPerSec()
    {
        return conf.entire_sstable_stream_throughput_outbound.toMebibytesPerSecond();
    }

    public static double getEntireSSTableStreamThroughputOutboundBytesPerSec()
    {
        return conf.entire_sstable_stream_throughput_outbound.toBytesPerSecond();
    }

    public static void setEntireSSTableStreamThroughputOutboundMebibytesPerSec(int value)
    {
        if (value == Integer.MAX_VALUE)
            throw new IllegalArgumentException("entire_sstable_stream_throughput_outbound: " + value +
                                               " is too large; it should be less than " +
                                               Integer.MAX_VALUE + " in MiB/s");

        conf.entire_sstable_stream_throughput_outbound = new DataRateSpec.LongBytesPerSecondBound(value, MEBIBYTES_PER_SECOND);
    }

    public static int getInterDCStreamThroughputOutboundMegabitsPerSec()
    {
        return conf.inter_dc_stream_throughput_outbound.toMegabitsPerSecondAsInt();
    }

    public static double getInterDCStreamThroughputOutboundMegabitsPerSecAsDouble()
    {
        return conf.inter_dc_stream_throughput_outbound.toMegabitsPerSecond();
    }

    public static double getInterDCStreamThroughputOutboundMebibytesPerSec()
    {

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Pass a concrete MiB/s rate below Integer.MAX_VALUE.
  2. Use the documented mechanism for disabling throttling instead of a sentinel.
  3. Guard the call: reject value == Integer.MAX_VALUE before invoking.

Example fix

// before
DatabaseDescriptor.setEntireSSTableStreamThroughputOutboundMebibytesPerSec(Integer.MAX_VALUE);
// after
DatabaseDescriptor.setEntireSSTableStreamThroughputOutboundMebibytesPerSec(200);
Defensive patterns

Strategy: validation

Validate before calling

if (value != Integer.MAX_VALUE) DatabaseDescriptor.setEntireSSTableStreamThroughputOutboundMebibytesPerSec(value); else throw new IllegalArgumentException("Integer.MAX_VALUE is reserved");

Type guard

boolean isValidEntireSSTableStreamMib(int v) { return v != Integer.MAX_VALUE; }

Try / catch

try { DatabaseDescriptor.setEntireSSTableStreamThroughputOutboundMebibytesPerSec(v); } catch (IllegalArgumentException e) { log.error("Rejected entire_sstable stream throughput sentinel", e); }

Prevention

When it happens

Trigger: Calling DatabaseDescriptor.setEntireSSTableStreamThroughputOutboundMebibytesPerSec(Integer.MAX_VALUE), typically via nodetool/JMX with a max-int 'unlimited' sentinel.

Common situations: Operators attempting to disable entire-SSTable streaming throttling with the max int; tooling defaulting absent values to Integer.MAX_VALUE; test harnesses using sentinels.

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