flippercloud/flipper · error · ArgumentError
:max_timeout_ms must be >= 0 but was #{@max_timeout_ms.inspe
Error message
:max_timeout_ms must be >= 0 but was #{@max_timeout_ms.inspect} What it means
Error ":max_timeout_ms must be >= 0 but was #{@max_timeout_ms.inspect}" thrown in flippercloud/flipper.
Source
Thrown at lib/flipper/cloud/telemetry/backoff_policy.rb:53
@min_timeout_ms = options.fetch(:min_timeout_ms) {
ENV.fetch("FLIPPER_BACKOFF_MIN_TIMEOUT_MS", MIN_TIMEOUT_MS).to_i
}
@max_timeout_ms = options.fetch(:max_timeout_ms) {
ENV.fetch("FLIPPER_BACKOFF_MAX_TIMEOUT_MS", MAX_TIMEOUT_MS).to_i
}
@multiplier = options.fetch(:multiplier) {
ENV.fetch("FLIPPER_BACKOFF_MULTIPLIER", MULTIPLIER).to_f
}
@randomization_factor = options.fetch(:randomization_factor) {
ENV.fetch("FLIPPER_BACKOFF_RANDOMIZATION_FACTOR", RANDOMIZATION_FACTOR).to_f
}
unless @min_timeout_ms >= 0
raise ArgumentError, ":min_timeout_ms must be >= 0 but was #{@min_timeout_ms.inspect}"
end
unless @max_timeout_ms >= 0
raise ArgumentError, ":max_timeout_ms must be >= 0 but was #{@max_timeout_ms.inspect}"
end
unless @min_timeout_ms <= max_timeout_ms
raise ArgumentError, ":min_timeout_ms (#{@min_timeout_ms.inspect}) must be <= :max_timeout_ms (#{@max_timeout_ms.inspect})"
end
@attempts = 0
end
# Public: Returns the next backoff interval in milliseconds.
def next_interval
interval = @min_timeout_ms * (@multiplier**@attempts)
interval = add_jitter(interval, @randomization_factor)
@attempts += 1
# cap the interval to the max timeout
result = [interval, @max_timeout_ms].minView on GitHub (pinned to 1f86de3ec9)
Solutions
- Pass max_timeout_ms as a non-negative number (>= 0)
- Remove the option to use the default backoff policy values
- Fix the configuration value; a negative or nil max_timeout_ms is invalid
When it happens
Trigger: Thrown at lib/flipper/cloud/telemetry/backoff_policy.rb:53 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
AI-assisted analysis of flippercloud/flipper@1f86de3ec9 (2026-08-23).
Data as JSON: /api/errors/0232e08370dc38e6.
Report an issue: GitHub.