astrid-runtime/astrid · error
FUSE service mountpoint overlaps the lease resource
Error message
FUSE service mountpoint overlaps the lease resource
What it means
validate_mountpoint rejects any mountpoint that equals the lease resource_path, lies under it, or contains it. Mounting FUSE over the directory that holds the lease manifest (or nesting the two) would shadow or corrupt the lease data the service itself needs, so the launch is aborted.
Solutions
- Choose a mountpoint path that is fully disjoint from the lease resource_path (neither is a prefix of the other)
- Use separate directory conventions, e.g. /run/astrid/leases/<id> for resource_path and /run/astrid/mounts/<id> for the mountpoint
- Review generated config so path templating cannot yield the same base directory for both fields
Example fix
// before resource_path = /run/astrid/leases/demo mountpoint = /run/astrid/leases/demo/mnt // overlaps // after resource_path = /run/astrid/leases/demo mountpoint = /run/astrid/mounts/demo
Defensive patterns
Strategy: validation
Validate before calling
let m = std::path::absolute(mountpoint)?;
let r = std::path::absolute(resource_path)?;
if m == r || m.starts_with(&r) || r.starts_with(&m) { /* pick a disjoint path */ } Prevention
- Keep lease dirs (/run/astrid/leases/<id>) and mount dirs (/run/astrid/mounts/<id>) in disjoint trees
- Validate overlap in config tooling before launching
When it happens
Trigger: Calling validate_launch where mountpoint == resource_path, mountpoint.starts_with(resource_path), or resource_path.starts_with(mountpoint) — i.e. the mount target and the lease directory overlap.
Common situations: Configuring both the lease directory and the mountpoint to the same path (e.g. /run/astrid/leases/x for both); nesting the mountpoint inside the lease directory; pointing resource_path at an existing user mount directory by mistake.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- FUSE service mountpoint is malformed
- FUSE service control path is malformed
- FUSE service control path is not the kernel endpoint
- FUSE service mountpoint is not empty
- mountpoint must be absolute
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/0c59b0bf36451879.
Report an issue: GitHub.
Appendix: source
Thrown at crates/astrid-storage-provider-fuse/src/service.rs:256
bail!("FUSE launch lease does not match the kernel manifest");
}
Ok(())
}
fn validate_mountpoint(mountpoint: &Path, resource_path: &Path) -> Result<()> {
if !mountpoint.is_absolute()
|| mountpoint
.components()
.any(|component| matches!(component, std::path::Component::ParentDir))
|| mountpoint.parent().is_none()
{
bail!("FUSE service mountpoint is malformed");
}
if mountpoint == resource_path
|| mountpoint.starts_with(resource_path)
|| resource_path.starts_with(mountpoint)
{
bail!("FUSE service mountpoint overlaps the lease resource");
}
platform_fs::validate_private_directory(mountpoint)
.context("validate private FUSE service mountpoint")?;
platform_fs::verify_no_redirects(mountpoint)
.context("reject redirected FUSE service mountpoint")?;
if std::fs::read_dir(mountpoint)?.next().is_some() {
bail!("FUSE service mountpoint is not empty");
}
if mountpoint::mountinfo_contains(mountpoint)? {
bail!("FUSE service mountpoint is already mounted");
}
Ok(())
}
fn validate_control_path(control_path: &Path, resource_path: &Path) -> Result<()> {
if !control_path.is_absolute()
|| control_path
.components()View on GitHub (pinned to affd8760f4)