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
- Pass a concrete MiB/s rate below Integer.MAX_VALUE.
- Use the documented mechanism for disabling throttling instead of a sentinel.
- 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
- Never use Integer.MAX_VALUE as 'unlimited'
- Reject reserved sentinels in config-update tooling
- Use concrete rates sized to your network
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
- stream_throughput_outbound: is too large; it should be less
- inter_dc_stream_throughput_outbound: is too large; it should
- entire_sstable_inter_dc_stream_throughput_outbound: is too l
- Invalid value of stream_throughput_outbound:
- Invalid value of inter_dc_stream_throughput_outbound:
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/6d44967a9037c2e7.
Report an issue: GitHub.