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
- Remove the option or set runtime type back to the default multi-thread
- If you genuinely need the alt scheduler, rebuild from source with RUSTFLAGS="--cfg tokio_unstable" cargo build --release (experimental, unsupported)
- 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
- Do not carry experimental runtime flags into production configs
- Keep deployment configs version-pinned and review them after influxdb3 upgrades
- If you build from source and need alt scheduling, set RUSTFLAGS="--cfg tokio_unstable" consistently in CI
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
- disabling LIFO slot requires `tokio_unstable`
- You've incorrectly specified a cluster-id for InfluxDB 3 Cor
- must be formatted as "key=value"
- request trigger execution cancelled
- num_columns_in_parallel should be above zero
AI-assisted analysis of influxdata/influxdb@d28e26e048 (2026-08-16).
Data as JSON: /api/errors/73594126c0803446.
Report an issue: GitHub.