{"record":{"id":"ffe3e754928fe9d9","repo":"quickwit-oss/quickwit","slug":"initial-visibility-deadline-insufficient","errorCode":null,"errorMessage":"initial visibility deadline insufficient","messagePattern":"initial visibility deadline insufficient","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-indexing/src/source/queue_sources/visibility.rs","lineNumber":163,"sourceCode":"            .ask_for_res(RequestLastExtension)\n            .await\n            .map_err(|e| anyhow!(e))?;\n        Ok(())\n    }\n}\n\n#[async_trait]\nimpl Actor for VisibilityTask {\n    type ObservableState = JsonValue;\n\n    fn name(&self) -> String {\n        \"QueueVisibilityTask\".to_string()\n    }\n\n    async fn initialize(&mut self, ctx: &ActorContext<Self>) -> Result<(), ActorExitStatus> {\n        let first_extension = self.next_extension();\n        if first_extension.is_zero() {\n            return Err(anyhow!(\"initial visibility deadline insufficient\").into());\n        }\n        ctx.schedule_self_msg(first_extension, Loop);\n        Ok(())\n    }\n\n    fn yield_after_each_message(&self) -> bool {\n        false\n    }\n\n    fn observable_state(&self) -> Self::ObservableState {\n        json!({\n            \"ack_id\": self.ack_id,\n            \"extension_count\": self.extension_count,\n        })\n    }\n}\n\n#[derive(Debug)]","sourceCodeStart":145,"sourceCodeEnd":181,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-indexing/src/source/queue_sources/visibility.rs#L145-L181","documentation":"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.","triggerScenarios":"`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.","commonSituations":"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.","solutions":["Increase the queue's visibility timeout in the quickwit config so it exceeds the minimum extension interval.","Review the queue source configuration (e.g. `visibility_timeout` under queue settings) and set a sane value (several minutes for heavy batches).","If the default was overridden in config, restore the documented default value."],"exampleFix":"// before (config)\nqueues:\n  visibility_timeout: 0s\n// after (config)\nqueues:\n  visibility_timeout: 600s","handlingStrategy":"validation","validationCode":"let visibility_timeout = cfg.queues.visibility_timeout;\nif visibility_timeout.is_zero() {\n    return Err(anyhow!(\"queue visibility_timeout must be > 0\"));\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always configure a positive visibility timeout (several minutes for large batches).","Validate queue config at startup, before the visibility task is spawned.","Avoid overriding default queue settings without reading the documented minimums."],"tags":["queue","visibility-timeout","config","scheduling"],"backgroundTag":"invalid-config-value","analyzedSha":"a39730c5cdcd1a4fe798403737ae293999ea21f8","analyzedAt":"2026-09-08T13:19:37.784Z","contentChangedAt":"2026-09-08T13:19:37.784Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}