toeverything/AFFiNE · error · io::Error
NotFound
NotFound
Error message
workspace cache directory not registered
What it means
MobileBlobCache.read_binary_file resolves the workspace's registered cache directory by universal_id; when no directory has been registered for that workspace, the lookup returns None and an io::Error (NotFound, this message) is raised instead of reading the file.
Source
Thrown at packages/frontend/mobile-native/src/cache/mod.rs:299
}
impl MobileBlobCache {
pub(crate) fn read_binary_file(&self, universal_id: &str, value: &str) -> std::io::Result<Vec<u8>> {
let path = value
.strip_prefix(MOBILE_BLOB_FILE_PREFIX)
.ok_or_else(|| std::io::Error::new(std::io::ErrorKind::InvalidInput, "invalid mobile file token"))?;
let path = path.strip_prefix("file://").unwrap_or(path);
let canonical = std::fs::canonicalize(path)?;
let workspace_dir = {
self
.workspace_dirs
.read()
.expect("workspace cache lock poisoned")
.get(universal_id)
.cloned()
}
.ok_or_else(|| std::io::Error::new(std::io::ErrorKind::NotFound, "workspace cache directory not registered"))?;
let workspace_dir = std::fs::canonicalize(workspace_dir)?;
if !is_valid_mobile_cache_path(&canonical, &workspace_dir) {
return Err(std::io::Error::new(
std::io::ErrorKind::PermissionDenied,
"mobile file token points outside the workspace cache directory",
));
}
let metadata = std::fs::metadata(&canonical)?;
if !metadata.is_file() {
return Err(std::io::Error::new(
std::io::ErrorKind::InvalidInput,
"mobile file token does not resolve to a file",
));
}
if metadata.len() > MOBILE_BLOB_MAX_READ_BYTES {
return Err(std::io::Error::new(View on GitHub (pinned to b4c8548c09)
Solutions
- Register the workspace cache directory before resolving tokens.
- Open the workspace first, then retry.
Defensive patterns
Strategy: validation
When it happens
Trigger: Raised when read_binary_file is called for a universal_id that has no registered workspace cache directory in workspace_dirs.
Common situations: The workspace was not registered with the mobile blob cache before reading, e.g. after an app restart. Re-open the workspace so its cache directory is registered.
Understand the failure class
Background: "Not Found" / HTTP 404 Errors: What They Mean and How to Fix Them Across Libraries — this error's family across 6 libraries.
AI-assisted analysis of toeverything/AFFiNE@b4c8548c09 (2026-08-18).
Data as JSON: /api/errors/7c3029c7a1ba1291.
Report an issue: GitHub.