influxdata/influxdb · error · std::io::Error

multi-thread-alt runtime requires `tokio_unstable`

Error message

multi-thread-alt runtime requires `tokio_unstable`

What it means

influxdb3's CLI blocks expose a runtime-type option; multi-thread-alt selects tokio's experimental alternate multi-thread scheduler. That scheduler is only compiled when tokio is built with RUSTFLAGS="--cfg tokio_unstable"; on ordinary builds (including official releases) the matching cfg arm returns this io::Error at startup, before any runtime is constructed, so the process refuses to start.

Source

Thrown at influxdb3_clap_blocks/src/tokio.rs:172

                }

                /// Creates the tokio runtime builder.
                pub fn builder_with_name(&self, name: &str) -> Result<::tokio::runtime::Builder, std::io::Error> {
                    // NOTE: no log macros will work here!
                    //
                    // That means use eprintln!() instead of error!() and so on. The log emitter
                    // requires a running tokio runtime and is initialised after this function.

                    let mut builder = match self.runtime_type {
                        TokioRuntimeType::MultiThread => tokio::runtime::Builder::new_multi_thread(),
                        TokioRuntimeType::MultiThreadAlt => {
                            #[cfg(tokio_unstable)]
                            {
                                tokio::runtime::Builder::new_multi_thread()
                            }
                            #[cfg(not(tokio_unstable))]
                            {
                                return Err(std::io::Error::new(
                                    std::io::ErrorKind::Other,
                                    "multi-thread-alt runtime requires `tokio_unstable`",
                                ));
                            }
                        }
                    };

                    // enable subsystems
                    // - always enable timers
                    builder.enable_time();
                    builder.enable_io();

                    // set up proper thread names
                    let thread_counter = Arc::new(AtomicUsize::new(1));
                    let name = name.to_owned();
                    builder.thread_name_fn(move || {
                        format!("InfluxDB 3 Core Tokio {} {}", name, thread_counter.fetch_add(1, Ordering::SeqCst))
                    });

View on GitHub (pinned to d28e26e048)

Solutions

  1. Remove the option or set runtime type back to the default multi-thread
  2. If you genuinely need the alt scheduler, rebuild from source with RUSTFLAGS="--cfg tokio_unstable" cargo build --release (experimental, unsupported)
  3. Check the flag's help text on your binary for the supported values

Example fix

# before
influxdb3 serve --runtime-type multi-thread-alt ...

# after
influxdb3 serve ...
Defensive patterns

Strategy: validation

Validate before calling

# only use experimental schedulers on builds that support them
if [ "$RUNTIME_TYPE" = "multi-thread-alt" ]; then
  # official builds are not compiled with tokio_unstable
  echo "unsupported runtime type on this build; falling back" >&2
  RUNTIME_TYPE="multi-thread"
fi

Prevention

When it happens

Trigger: Passing --runtime-type multi-thread-alt (or the equivalent config/env setting) to an influxdb3 binary compiled without the tokio_unstable cfg.

Common situations: Copying performance-tuning flags from internal or experimental documentation into a stock release config; upgrading influxdb3 while keeping an experimental flag that the new build does not support.

Related errors


AI-assisted analysis of influxdata/influxdb@d28e26e048 (2026-08-16). Data as JSON: /api/errors/73594126c0803446. Report an issue: GitHub.