{"record":{"id":"6b7cae7ee1cb9856","repo":"quickwit-oss/quickwit","slug":"not-found-in-storage","errorCode":null,"errorMessage":"`{}` not found in storage","messagePattern":"`(.+?)` not found in storage","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-storage/src/bundle_storage.rs","lineNumber":478,"sourceCode":"        self.files.get(path).cloned()\n    }\n\n    /// Returns whether the bundle contains a file at the given path.\n    pub fn exists(&self, path: &Path) -> bool {\n        self.files.contains_key(path)\n    }\n}\n\n#[async_trait]\nimpl Storage for BundleStorage {\n    async fn check_connectivity(&self) -> anyhow::Result<()> {\n        if !self\n            .storage\n            .exists(&self.bundle_filepath)\n            .await\n            .unwrap_or(false)\n        {\n            bail!(\"`{}` not found in storage\", self.bundle_filepath.display())\n        }\n        Ok(())\n    }\n\n    async fn put(\n        &self,\n        path: &Path,\n        _payload: Box<dyn crate::PutPayload>,\n    ) -> crate::StorageResult<()> {\n        Err(unsupported_operation(&[path]))\n    }\n\n    async fn copy_to(\n        &self,\n        path: &Path,\n        output: &mut dyn SendableAsync,\n    ) -> crate::StorageResult<()> {\n        let file_len = self.file_num_bytes(path).await? as usize;","sourceCodeStart":460,"sourceCodeEnd":496,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-storage/src/bundle_storage.rs#L460-L496","documentation":"`check_connectivity` on the bundle storage verifies that the underlying bundle file actually exists in the backing storage before further operations. If `storage.exists(bundle_filepath)` returns false (or errors, mapped to false), the check bails with the display path in the message. It is an existence precondition, not a permission or read failure.","triggerScenarios":"Any operation that constructs a BundleStorage over a `.bundle` filepath not present in the configured storage (wrong index/uri, deleted split, bucket misconfiguration) and then runs connectivity checks.","commonSituations":"Pointing quickwit at a wrong S3 bucket/prefix; split deleted by retention while still referenced; typo in the storage URI; object removed by a concurrent process.","solutions":["Verify the storage URI/bucket and prefix in the index config actually contain the bundle file.","Check whether the split was deleted (retention policy, GC) and remove stale references or restore the object.","Confirm credentials/permissions so `exists` isn't failing silently (exists errors are swallowed to false here)."],"exampleFix":"// before\nlet storage = StorageResolver::uri(\"s3://wrong-bucket/\")?;\n// after\nlet storage = StorageResolver::uri(\"s3://quickwit-bucket/indexes/my-index/\")?;","handlingStrategy":"validation","validationCode":"if !storage.exists(&bundle_filepath).await? {\n    return Err(anyhow!(\"bundle {} missing; fix storage uri or restore object\", bundle_filepath.display()));\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Verify storage URI/prefix before deployment.","Ensure retention/GC does not delete splits still referenced by live indexes."],"tags":["storage","not-found","bundle"],"backgroundTag":"resource-not-found","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"}