astrid-runtime/astrid · error
kernel lease metadata does not match the FUSE provider…
Error message
kernel lease metadata does not match the FUSE provider registry
What it means
Consistency check during FUSE unmount: the kernel lease metadata for the mount id disagrees with the provider's local registry record (different mount identity or state), so the unmount cannot safely proceed against a mismatched lease.
Solutions
- Re-list mounts to get the current registry state and retry with the correct selector
- Clean up the stale registry record if the kernel lease has already been released
- Investigate how registry and kernel lease diverged (crash between create steps)
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at crates/astrid-storage-provider-fuse/src/main.rs:420 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/78ea86e1c0aa9b9d.
Report an issue: GitHub.
Appendix: source
Thrown at crates/astrid-storage-provider-fuse/src/main.rs:420
mount_id: record.mount_id,
mountpoint: record.mountpoint,
access: record.access,
dirty: lease_status.dirty,
})
}
async fn unmount(
client: &mut AdminClient,
acting_principal: &astrid_core::PrincipalId,
selector: &StorageMountSelectorV1,
) -> Result<StorageProviderSuccessV1> {
let record = registry::resolve_record(selector)?;
if &record.requested_by != acting_principal {
bail!("mount was issued to another acting principal");
}
let live = if let Some(status) = kernel_lease_status(client, &record.mount_id).await? {
if status.mountpoint != record.mountpoint || status.access != record.access {
bail!("kernel lease metadata does not match the FUSE provider registry");
}
true
} else {
cleanup_stale_record(client, acting_principal, &record).await?;
false
};
if live {
let control_result = control_unmount(&record.control_path, acting_principal);
if let Err(error) = control_result {
eprintln!(
"falling back to stale FUSE cleanup after control unmount failure: {error:#}"
);
cleanup_stale_record(client, acting_principal, &record).await?;
} else {
into_success(
client
.request(AdminRequestKind::StorageMountRevoke {
mount_id: record.mount_id,View on GitHub (pinned to affd8760f4)