quickwit-oss/quickwit · error · anyhow::Error

max_num_concurrent_split_searches

Error message

max_num_concurrent_split_searches ({}) must be lower or equal to split_cache.max_file_descriptors ({})

What it means

SearcherConfig validation found that `searcher.max_num_concurrent_split_searches` exceeds `searcher.split_cache.max_file_descriptors`. Each concurrent split search needs a file descriptor from the split cache's budget, so a higher concurrency than the fd limit can never be satisfied.

Solutions

  1. Lower `max_num_concurrent_split_searches` to at most `split_cache.max_file_descriptors`
  2. Raise `split_cache.max_file_descriptors` if the OS fd limit allows
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at quickwit/quickwit-config/src/node_config/mod.rs:699 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of quickwit-oss/quickwit@a39730c5cd (2026-09-08). Data as JSON: /api/errors/93ab2ff8e4df8517. Report an issue: GitHub.

Appendix: source

Thrown at quickwit/quickwit-config/src/node_config/mod.rs:699

impl SearcherConfig {
    /// The timeout applied at the gRPC layer for search requests
    pub fn request_timeout(&self) -> Duration {
        Duration::from_secs(self.request_timeout_secs.get())
    }
    /// The timeout applied at the leaf search layer
    pub fn leaf_request_timeout(&self) -> Duration {
        Duration::from_secs(self.leaf_request_timeout_secs.get())
    }
    fn default_request_timeout_secs() -> NonZeroU64 {
        NonZeroU64::new(30).unwrap()
    }
    fn validate(&self) -> anyhow::Result<()> {
        if let Some(split_cache_limits) = self.split_cache {
            if self.max_num_concurrent_split_searches
                > split_cache_limits.max_file_descriptors.get() as usize
            {
                anyhow::bail!(
                    "max_num_concurrent_split_searches ({}) must be lower or equal to \
                     split_cache.max_file_descriptors ({})",
                    self.max_num_concurrent_split_searches,
                    split_cache_limits.max_file_descriptors
                );
            }
            if self.warmup_single_split_initial_allocation > self.warmup_memory_budget {
                anyhow::bail!(
                    "warmup_single_split_initial_allocation ({}) must be lower or equal to \
                     warmup_memory_budget ({})",
                    self.warmup_single_split_initial_allocation,
                    self.warmup_memory_budget
                );
            }
        }
        Ok(())
    }
}

View on GitHub (pinned to a39730c5cd)