influxdata/influxdb · error · GrpcTimeoutParseError

The provided value was empty

Error message

The provided value was empty

What it means

Fired when parsing the gRPC `grpc-timeout` header into a GrpcTimeoutDuration and the header value is a zero-length string. It is a validation guard at the entry point that reads the header, so it fires for requests that set the header to an empty value rather than omitting it. The at-fault input is the empty `grpc-timeout` header value.

Solutions

  1. Send a non-empty `grpc-timeout` header, e.g. `grpc-timeout: 5S` or `100m`
  2. If the client cannot control headers, drop the header entirely and use the server default timeout
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at core/data_types/src/lib.rs:2418 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/3fd9ee5ec685fbd4. Report an issue: GitHub.

Appendix: source

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

            Self {
                min: point,
                max: self.max,
                cap: self.cap - cap1,
            },
        )
    }
}

/// A duration pulled from the `grpc-timeout` header, newtype'd so we don't confuse durations at
/// some points and so that we can impl FromStr
#[derive(Debug, Copy, Clone)]
pub struct GrpcTimeoutDuration(pub Duration);

/// An error that can arise from trying to parse the `grpc-timeout` duration
#[derive(thiserror::Error, Debug)]
pub enum GrpcTimeoutParseError {
    /// The header was empty
    #[error("The provided value was empty")]
    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)

View on GitHub (pinned to 06200ef96b)