quickwit-oss/quickwit · error

fd_semaphore acquire failed. please report

Error message

fd_semaphore acquire failed. please report

What it means

`FileDescriptorCache::get_or_open_split_file` tried to acquire the file-descriptor semaphore guarding concurrent split file opens, and the acquire failed. Since the semaphore has no closure path in normal operation, this only happens if it was closed by shutdown — the `.expect` marks it as an internal invariant breach ('please report') rather than a user error.

Source

Thrown at quickwit/quickwit-storage/src/file_descriptor_cache.rs:137

            .inc_by(split_ids.len() as u64);
    }

    pub async fn get_or_open_split_file(
        &self,
        root_path: &Path,
        split_id: SplitId,
        num_bytes: u64,
    ) -> std::io::Result<SplitFile> {
        if let Some(split_file) = self.get_split_file(&split_id) {
            self.fd_cache_metrics.hits_num_items.inc();
            return Ok(split_file);
        } else {
            self.fd_cache_metrics.misses_num_items.inc();
        }
        let split_path = get_split_file_path(root_path, &split_id);
        let fd_semaphore_guard = Semaphore::acquire_owned(self.fd_semaphore.clone())
            .await
            .expect("fd_semaphore acquire failed. please report");
        let file: File = tokio::task::spawn_blocking(move || std::fs::File::open(split_path))
            .await
            .map_err(|join_error| {
                io::Error::other(format!("failed to open file: {join_error:?}"))
            })??;
        let split_file = SplitFile(Arc::new(SplitFileInner {
            num_bytes,
            file,
            _fd_semaphore_guard: fd_semaphore_guard,
        }));
        self.put_split_file(split_id, split_file.clone());
        Ok(split_file)
    }
}

impl SplitFile {
    pub async fn get_range(&self, range: Range<usize>) -> io::Result<OwnedBytes> {
        use std::os::unix::fs::FileExt;

View on GitHub (pinned to a39730c5cd)

Solutions

  1. Check whether the searcher node was shutting down while splits were still being opened
  2. Inspect logs for the component closing the fd semaphore early
  3. Report the issue to Quickwit maintainers with logs, as the message requests
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at quickwit/quickwit-storage/src/file_descriptor_cache.rs:137 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/a9dd69939efcc966. Report an issue: GitHub.