astrid-runtime/astrid · error
mountpoint is already registered: {}
Error message
mountpoint is already registered: {} What it means
mount() registers a MountRecord in the local registry after the kernel grants a lease. Before inserting, it checks whether the mountpoint is already registered and bails to avoid silently overwriting an existing mount record for the same path.
Source
Thrown at crates/astrid-storage-provider-fskit/src/main.rs:185
client: &mut AdminClient,
acting_principal: &astrid_core::PrincipalId,
view: astrid_core::storage_provider::StorageProviderViewV1,
access: astrid_core::storage_provider::StorageProviderAccessV1,
requested_mountpoint: Option<PathBuf>,
) -> Result<StorageProviderSuccessV1> {
let (mountpoint, auto_created) = prepare_mountpoint(requested_mountpoint, &view)?;
let body = client
.request(AdminRequestKind::StorageMountIssue {
view: view.clone(),
access,
provider: PROVIDER_NAME.to_owned(),
mountpoint: mountpoint.clone(),
})
.await?;
let lease = lease_from_response(body)?;
if let Err(error) = update_registry(|registry| {
if registry.mounts.contains_key(&path_key(&mountpoint)) {
bail!("mountpoint is already registered: {}", mountpoint.display());
}
registry.mounts.insert(
path_key(&mountpoint),
MountRecord {
mount_id: lease.mount_id,
requested_by: acting_principal.clone(),
mountpoint: mountpoint.clone(),
access,
auto_created_mountpoint: auto_created,
},
);
Ok(())
}) {
revoke_after_registry_failure(client, lease.mount_id).await;
return match cleanup_created_mountpoint(&mountpoint, auto_created) {
Err(cleanup) => Err(error.context(cleanup)),
Ok(()) => Err(error),
};View on GitHub (pinned to affd8760f4)
Solutions
- Unmount the existing mount at that path before mounting again
- Choose a different mountpoint path
- If the record is stale, use the stale-mount cleanup/unmount path to remove it first
Example fix
// before
provider.mount("/mnt/share", ...)?; // second call
// after
if !is_mounted("/mnt/share") {
provider.mount("/mnt/share", ...)?;
} Defensive patterns
Strategy: try-catch
Validate before calling
// rust
let key = path_key(&mountpoint);
if registry_has_mount(key) { /* unmount first or pick another path */ } Try / catch
// rust
match provider.mount(&mountpoint, &opts) {
Ok(lease) => /* use lease */,
Err(e) if e.to_string().contains("already registered") => {
provider.unmount(&mountpoint)?;
provider.mount(&mountpoint, &opts)
}
Err(e) => Err(e),
} Prevention
- Track mounted paths in your tooling and skip already-mounted ones
- Always unmount cleanly on shutdown/error paths
- Use canonicalized paths so duplicate registrations via symlinks are caught
When it happens
Trigger: Calling execute() with a mount request whose mountpoint path (after path_key normalization) matches an existing entry in registry.mounts.
Common situations: Re-running a mount command for an already-mounted path; case/symlink normalization differences making two textual paths map to the same key; a previous mount that was granted but never cleaned up.
Understand the failure class
Background: "already exists" / EEXIST / FileAlreadyExistsException: what the 'file already exists' error means and how to fix it — this error's family across 37 libraries.
Related errors
- legacy state source crosses a filesystem boundary: {}
- legacy state source is an active mount: {}
- legacy source is an active mount: {}
- legacy source crosses a device boundary: {}
- directory symlink {} not allowed in capsule source tree (ref
AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09).
Data as JSON: /api/errors/b0b01ebd0090c764.
Report an issue: GitHub.