astrid-runtime/astrid · error

kernel refused storage lifecycle request: {error}

Error message

kernel refused storage lifecycle request: {error}

What it means

`into_success` unwraps a generic `Success` payload from an `AdminResponseBody`; when the kernel instead returns an `Error` variant, this bail surfaces the kernel's own error text prefixed with 'kernel refused storage lifecycle request'. It is the normal path for conveying kernel-side rejections of lifecycle operations (e.g. mount/unmount bookkeeping calls executed via `execute` and `unmount`) back to the caller.

Source

Thrown at crates/astrid-storage-provider-winfsp/src/main.rs:315

    }
    Ok(StorageProviderSuccessV1::Unmounted {
        mount_id: record.mount_id,
    })
}

fn lease_from_response(body: AdminResponseBody) -> Result<StorageMountLeaseV1> {
    match body {
        AdminResponseBody::StorageMountLease(lease) => Ok(*lease),
        AdminResponseBody::Error(error) => bail!("kernel refused storage mount: {error}"),
        _ => bail!("kernel returned an unexpected storage mount response"),
    }
}

fn into_success(body: AdminResponseBody) -> Result<serde_json::Value> {
    match body {
        AdminResponseBody::Success(value) => Ok(value),
        AdminResponseBody::Error(error) => {
            bail!("kernel refused storage lifecycle request: {error}")
        },
        _ => bail!("kernel returned an unexpected storage lifecycle response"),
    }
}

fn unmount_status(body: AdminResponseBody) -> Result<bool> {
    match body {
        AdminResponseBody::Success(_) => Ok(true),
        AdminResponseBody::Error(error)
            if error.contains("was not found") || error.contains("expired or revoked") =>
        {
            Ok(false)
        },
        AdminResponseBody::Error(error) => {
            bail!("kernel refused storage unmount authorization: {error}")
        },
        _ => bail!("kernel returned an unexpected storage unmount response"),
    }

View on GitHub (pinned to affd8760f4)

Solutions

  1. Read the embedded kernel `{error}` message in the bail output — it states the actual refusal reason
  2. Verify the storage assignment/resource referenced by the lifecycle request exists and is in a valid state on the kernel
  3. Re-authenticate or restart the kernel if the refusal indicates authorization or availability problems, then retry
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-validate the resource exists/valid before issuing the lifecycle request
// e.g. check assignment status via a read-only admin query before mutating

Try / catch

match provider.execute(action).await {
    Ok(value) => handle(value),
    Err(e) if e.to_string().starts_with("kernel refused storage lifecycle request") => {
        // kernel-side refusal: parse embedded reason and react
        let reason = e.to_string();
        log::warn!("lifecycle refused: {reason}");
    },
    Err(e) => return Err(e.into()),
}

Prevention

When it happens

Trigger: Any lifecycle admin request dispatched through `execute` or `unmount` for which the kernel responds with `AdminResponseBody::Error(error)` — e.g. the kernel rejects the request because the storage action is invalid, unauthorized, or the target resource is in a bad state.

Common situations: Requesting lifecycle operations on a storage assignment that does not exist or was already removed; kernel-side authorization failures; transient kernel shutdown while a lifecycle call is in flight.

Related errors


AI-assisted analysis of astrid-runtime/astrid@affd8760f4 (2026-09-09). Data as JSON: /api/errors/274ec4608001ea82. Report an issue: GitHub.