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

disabling LIFO slot requires `tokio_unstable`

Error message

disabling LIFO slot requires `tokio_unstable`

What it means

The tokio runtime builder block in influxdb3_clap_blocks maps the disable-lifo option to builder.disable_lifo_slot(), which only exists when tokio is compiled with RUSTFLAGS="--cfg tokio_unstable". On a normal build the cfg(not(tokio_unstable)) arm returns this io::Error during runtime construction, so startup fails before the server runs.

Source

Thrown at influxdb3_clap_blocks/src/tokio.rs:207

                        format!("InfluxDB 3 Core Tokio {} {}", name, thread_counter.fetch_add(1, Ordering::SeqCst))
                    });

                    // worker thread count
                    let num_threads = match self.num_threads {
                        None => std::thread::available_parallelism()
                            .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?,
                        Some(n) => n,
                    };
                    builder.worker_threads(num_threads.get());

                    if self.disable_lifo == Some(true) {
                        #[cfg(tokio_unstable)]
                        {
                            builder.disable_lifo_slot();
                        }
                        #[cfg(not(tokio_unstable))]
                        {
                            return Err(std::io::Error::new(
                                std::io::ErrorKind::Other,
                                "disabling LIFO slot requires `tokio_unstable`",
                            ));
                        }
                    }

                    if let Some(x) = self.event_interval {
                        builder.event_interval(x.get());
                    }

                    if let Some(x) = self.global_queue_interval {
                        builder.global_queue_interval(x.get());
                    }

                    if let Some(x) = self.max_blocking_threads {
                        builder.max_blocking_threads(x.get());
                    }

View on GitHub (pinned to d28e26e048)

Solutions

  1. Remove the disable-lifo option from the command line/config
  2. If you need it, rebuild from source with RUSTFLAGS="--cfg tokio_unstable" cargo build --release (experimental, unsupported)
  3. Prefer supported tuning knobs (worker-threads, event-interval, global-queue-interval) instead

Example fix

# before
influxdb3 serve --disable-lifo-slot ...

# after
influxdb3 serve ...
Defensive patterns

Strategy: validation

Validate before calling

# reject experimental tokio knobs unless the build supports them
if [ "$DISABLE_LIFO" = "true" ]; then
  echo "--disable-lifo-slot requires a tokio_unstable build; ignoring" >&2
  DISABLE_LIFO=""
fi

Prevention

When it happens

Trigger: Passing --disable-lifo-slot (or setting disable_lifo=true in config/env) on an influxdb3 binary compiled without the tokio_unstable cfg.

Common situations: Latency-tuning flags carried over from an internal benchmark build; release binaries that never enable unstable tokio features.

Related errors


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