{"record":{"id":"f14b447c33fab11b","repo":"spacedriveapp/spacedrive","slug":"cannot-access-path","errorCode":null,"errorMessage":"Cannot access path: {}","messagePattern":"Cannot access path: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"core/src/ops/indexing/change_detection/handler.rs","lineNumber":108,"sourceCode":"\t\t\tErr(e) => {\n\t\t\t\ttracing::warn!(\n\t\t\t\t\t\"Volume error when checking path existence for {}: {}\",\n\t\t\t\t\tpath.display(),\n\t\t\t\t\te\n\t\t\t\t);\n\t\t\t\tErr(e.into())\n\t\t\t}\n\t\t}\n\t} else {\n\t\tmatch tokio::fs::try_exists(path).await {\n\t\t\tOk(exists) => Ok(exists),\n\t\t\tErr(e) => {\n\t\t\t\ttracing::warn!(\n\t\t\t\t\t\"Cannot verify path existence for {} (volume may be offline): {}\",\n\t\t\t\t\tpath.display(),\n\t\t\t\t\te\n\t\t\t\t);\n\t\t\t\tErr(anyhow::anyhow!(\"Cannot access path: {}\", e))\n\t\t\t}\n\t\t}\n\t}\n}\n\n/// Evaluates indexing rules to determine if a path should be skipped.\npub async fn should_filter_path(\n\tpath: &Path,\n\trule_toggles: RuleToggles,\n\tlocation_root: &Path,\n\tbackend: Option<&Arc<dyn crate::volume::VolumeBackend>>,\n) -> Result<bool> {\n\tlet ruler = build_default_ruler(rule_toggles, location_root, path).await;\n\n\tlet metadata = if let Some(backend) = backend {\n\t\tbackend\n\t\t\t.metadata(path)\n\t\t\t.await","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/spacedriveapp/spacedrive/blob/6dfeccf2113039e35f2ce735f945e70dc3e4ea45/core/src/ops/indexing/change_detection/handler.rs#L90-L126","documentation":"With no volume backend configured, the handler falls back to tokio::fs::try_exists(path) and that OS-level check failed. The path's existence simply cannot be determined: a parent directory denies search permission, a path component is unreadable, or the filesystem is in a transient bad state. The handler warn-logs (noting the volume may be offline) and returns the error.","triggerScenarios":"Permission denied on the path or a parent directory for the daemon user; NFS stale handles; the path sits on a mount that vanished without a clean unmount; unusual filesystem errors during concurrent modification.","commonSituations":"Restrictive permissions after user changes, daemon running as a user without access to external mounts, races between indexing and unmount.","solutions":["Check the daemon user's permissions on the path and every parent directory","Verify the mount hosting the path is present and healthy","Retry after the environment settles - races with unmount are transient","If systemic, exclude the affected tree from indexing via rules"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"match tokio::fs::try_exists(path).await {\n    Ok(exists) => Ok(exists),\n    Err(e) if e.kind() == std::io::ErrorKind::PermissionDenied => {\n        // Existence unknowable: defer the event rather than classify it as created or deleted.\n        defer_event(path);\n        Ok(false)\n    }\n    Err(e) => Err(anyhow::anyhow!(\"Cannot access path: {}\", e)),\n}","preventionTips":["Grant the daemon user read and traverse rights on indexed roots","Avoid unmounting volumes during active indexing","Defer events whose paths cannot be probed instead of failing the batch"],"tags":["indexing","filesystem","permissions","offline"],"backgroundTag":null,"analyzedSha":"6dfeccf2113039e35f2ce735f945e70dc3e4ea45","analyzedAt":"2026-08-16T11:26:17.074Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}