influxdata/influxdb · error · GrpcTimeoutParseError

The value contained an unrecognized suffic of

Error message

The value contained an unrecognized suffic of {0:?}

What it means

Fired when parsing the gRPC `grpc-timeout` header: the numeric prefix parsed fine but the trailing unit suffix is not one of the gRPC spec's recognized duration units (H, M, S, m, u, n). This is a validation guard over the header string; the offending input is the unrecognized suffix carried in the error payload. Happens for clients emitting non-spec timeout units.

Solutions

  1. Use one of the valid suffixes: H (hours), M (minutes), S (seconds), m (millis), u (micros), n (nanos)
  2. Fix the client/intermediary that is emitting a non-standard unit
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at core/data_types/src/lib.rs:2437 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of influxdata/influxdb@06200ef96b (2026-09-19). Data as JSON: /api/errors/cea37c66494f0b8a. Report an issue: GitHub.

Appendix: source

Thrown at core/data_types/src/lib.rs:2437

    EmptyValue,
    /// There were too many digits in the header before the suffix - the grpc spec specifies that
    /// there must be no more than 8.
    #[error(
        "The provided value contained too many digits in the prefix; expected a maximum of 8 but got {0}"
    )]
    TooManyDigits(usize),
    /// The value (number before the suffix) couldn't be parsed to a u64
    #[error(
        "Failed to parse the value; provided {value:?} and encountered the following error: {err}"
    )]
    UnparseableValue {
        /// The value which we couldn't parse
        value: String,
        /// The error arising from the failure to parse
        err: <u64 as FromStr>::Err,
    },
    /// The suffix which specifies the time base (e.g. seconds, hours, milliseconds, etc)
    #[error("The value contained an unrecognized suffic of {0:?}")]
    UnrecognizedSuffix(String),
}

impl FromStr for GrpcTimeoutDuration {
    type Err = GrpcTimeoutParseError;
    fn from_str(val: &str) -> Result<Self, Self::Err> {
        if val.is_empty() {
            return Err(GrpcTimeoutParseError::EmptyValue);
        }

        let (timeout_value, timeout_unit) = val
            // `HeaderValue::to_str` only returns `Ok` if the header contains ASCII so this
            // `split_at` will never panic from trying to split in the middle of a character.
            // See https://docs.rs/http/1/http/header/struct.HeaderValue.html#method.to_str
            //
            // `len - 1` also wont panic since we just checked `s.is_empty`.
            .split_at(val.len() - 1);

View on GitHub (pinned to 06200ef96b)