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

initial visibility deadline insufficient

Error message

initial visibility deadline insufficient

What it means

The queue-based source's visibility task extends message visibility deadlines so long batches aren't redelivered. In `initialize`, if the first computed extension is zero (i.e. no positive visibility window can be scheduled), the task fails because waiting any amount of time would let the queue redeliver in-flight messages. It guards against a misconfigured or unsupported visibility timeout.

Source

Thrown at quickwit/quickwit-indexing/src/source/queue_sources/visibility.rs:163

            .ask_for_res(RequestLastExtension)
            .await
            .map_err(|e| anyhow!(e))?;
        Ok(())
    }
}

#[async_trait]
impl Actor for VisibilityTask {
    type ObservableState = JsonValue;

    fn name(&self) -> String {
        "QueueVisibilityTask".to_string()
    }

    async fn initialize(&mut self, ctx: &ActorContext<Self>) -> Result<(), ActorExitStatus> {
        let first_extension = self.next_extension();
        if first_extension.is_zero() {
            return Err(anyhow!("initial visibility deadline insufficient").into());
        }
        ctx.schedule_self_msg(first_extension, Loop);
        Ok(())
    }

    fn yield_after_each_message(&self) -> bool {
        false
    }

    fn observable_state(&self) -> Self::ObservableState {
        json!({
            "ack_id": self.ack_id,
            "extension_count": self.extension_count,
        })
    }
}

#[derive(Debug)]

View on GitHub (pinned to a39730c5cd)

Solutions

  1. Increase the queue's visibility timeout in the quickwit config so it exceeds the minimum extension interval.
  2. Review the queue source configuration (e.g. `visibility_timeout` under queue settings) and set a sane value (several minutes for heavy batches).
  3. If the default was overridden in config, restore the documented default value.

Example fix

// before (config)
queues:
  visibility_timeout: 0s
// after (config)
queues:
  visibility_timeout: 600s
Defensive patterns

Strategy: validation

Validate before calling

let visibility_timeout = cfg.queues.visibility_timeout;
if visibility_timeout.is_zero() {
    return Err(anyhow!("queue visibility_timeout must be > 0"));
}

Prevention

When it happens

Trigger: `self.next_extension()` returns Duration::ZERO at startup — meaning the queue's configured visibility timeout is zero or too small to be extended, so the task cannot schedule its first `Loop` message.

Common situations: Queue configured with visibility_timeout of 0 or a value below the minimum extension interval; misconfigured quickwit queue settings (e.g. `default_queue` visibility timeout) in the node config.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


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