Block storage API error reference
This page documents common error responses from the Block Storage API (Cinder), with a focus on state-transition conflicts, dependency issues during delete operations, and snapshot failures. Use this reference when volume operations return unexpected status codes or when volumes enter stuck states.
The current platform release supports Cinder microversion ceiling 3.70 (Antelope).
HTTP status codes#
| Status | Meaning | Typical cause | Retryable? | Next action |
|---|---|---|---|---|
| 400 Bad Request | Invalid request parameters | Invalid volume type, malformed size, invalid metadata | No | Check parameters against the Block Storage API reference |
| 400 Bad Request | Invalid state transition | Volume in the wrong state for the requested operation | Conditional | Check volume status; wait for the transition to complete, then retry |
| 401 Unauthorized | Authentication failed | Expired token | No | Re-issue your token: openstack token issue |
| 403 Forbidden | Policy or RBAC denial | Operation requires administrator privileges (for example, volume type create) | No | Verify your account can perform the operation; admin-only operations cannot run with a tenant credential |
| 404 Not Found | Volume or snapshot does not exist | Wrong ID, already deleted | No | Verify: openstack volume list or openstack volume snapshot list |
| 413 Payload Too Large | Resource quota exceeded | Volume, snapshot, or backup quota overrun | Conditional | Reduce usage or request a quota increase; check /v3/{project_id}/limits for current absolute and used values |
| 429 Too Many Requests | API rate limit exceeded | Too many requests in a short time window (enforced at the gateway layer) | Yes | Wait and retry with exponential backoff. Check for a Retry-After header |
Example error response#
{
"overLimit": {
"code": 413,
"message": "VolumeLimitExceeded: Maximum number of volumes allowed (500) exceeded.",
"retryAfter": 0
}
}The status code appears both as the HTTP status and as the code field inside the response body. The body wraps the error object under a top-level key that varies by error class:
| Status | Wrapper key |
|---|---|
| 400 | badRequest |
| 401 | error (carries a title field) |
| 403 | forbidden |
| 404 | itemNotFound |
| 413 | overLimit (carries a retryAfter field) |
Every error body wraps the error object under one of these keys, and the inner shape stays consistent (code, message, and any optional fields). For the convention across all Quake AI APIs, see Error response format.
Volume state machine#
Volumes follow a state machine. Operations are only valid from certain states. Understanding it prevents most state-transition errors.
Valid states and transitions#
| Current state | Valid operations | Invalid operations |
|---|---|---|
creating | (wait) | Attach, detach, delete, extend, snapshot |
available | Attach, delete, extend, snapshot | Detach (not attached) |
in-use | Detach, snapshot, extend (if backend supports online extend) | Attach (already attached), delete |
attaching | (wait) | All operations except status check |
detaching | (wait) | All operations except status check |
extending | (wait) | All operations except status check |
error | Delete, reset state | Attach, detach, snapshot, extend |
error_deleting | Reset state | All standard operations |
On Cinder 3.70 (Antelope), delete and extend operations against a volume in an invalid state return HTTP 400 badRequest, not 409 Conflict. The response body names the required state:
{
"badRequest": {
"code": 400,
"message": "Invalid volume: Volume status must be available or error or error_restoring or error_extending or error_managing and must not be migrating, attached, belong to a group, have snapshots, awaiting a transfer, or be disassociated from snapshots after volume transfer."
}
}Recovery from transitional states#
If a volume is stuck in attaching, detaching, or extending for more than 10 minutes, it is likely in a stale state. Reset it:
openstack volume set --state available YOUR_VOLUMEIf the volume had an attachment that no longer exists:
openstack volume set --detached YOUR_VOLUME
openstack volume set --state available YOUR_VOLUMEDelete operation errors#
"Volume is in-use"#
Cause: The volume is attached to an instance.
Resolution:
- Check attachments:
openstack volume show YOUR_VOLUME -c attachments- Detach the volume:
openstack server remove volume YOUR_INSTANCE YOUR_VOLUME- Retry deletion.
"Volume has snapshots"#
Cause: The volume has dependent snapshots that must be deleted first.
Response: HTTP 400 badRequest. The message Invalid volume: Volume status must be available... lists have snapshots among the disallowed conditions.
Resolution:
- List snapshots:
openstack volume snapshot list --volume YOUR_VOLUME- Delete each snapshot:
openstack volume snapshot delete SNAPSHOT_ID- Retry volume deletion.
"Volume status must be available or error"#
Cause: The volume is in a transitional state (attaching, detaching, extending).
Response: HTTP 400 badRequest. The message Invalid volume: Volume status must be available or error... lists every state the delete operation allows.
Resolution:
- Wait for the current operation to complete.
- If the state is stale (more than 10 minutes), reset:
openstack volume set --state available YOUR_VOLUME- Retry deletion.
Attach and detach errors#
Attach fails with 409#
Cause: The volume is not in available state, or is already attached to another instance.
Diagnosis:
openstack volume show YOUR_VOLUME -c status -c attachmentsResolution:
- If
statusisin-use: detach from the current instance first, or use multiattach if the volume type supports it. - If
statusis a transitional state: wait for it to resolve. - If
statusiserror: reset toavailableand retry.
Detach fails with 409#
Cause: The volume is not in in-use state, or the attachment record does not match the specified instance.
Diagnosis:
openstack volume show YOUR_VOLUME -c status -c attachmentsResolution:
- Verify the correct instance ID in the detach command.
- If the instance no longer exists, use state reset:
openstack volume set --detached YOUR_VOLUME
openstack volume set --state available YOUR_VOLUMESnapshot errors#
Snapshot stuck in "creating"#
Cause: The source volume is in a transitional state, or the storage backend encountered an issue.
Resolution:
- Check source volume status:
openstack volume show YOUR_VOLUME -c status- If the source volume is healthy and the snapshot has been in
creatingfor more than 10 minutes, delete and retry:
openstack volume snapshot delete STUCK_SNAPSHOT
openstack volume snapshot create --volume YOUR_VOLUME NEW_SNAPSHOT_NAME- For persistent failures, file a support ticket.
Snapshot quota exceeded#
openstack quota show --usageDelete old snapshots to free capacity before retrying.
When to escalate#
Escalate to support when:
- A volume is stuck in a transitional state (
attaching,detaching,extending) for more than 10 minutes and state reset does not resolve it - Snapshots remain in
creatingindefinitely despite a healthy source volume and available quota openstack volume set --statefails or the volume reverts to an error state after reset- Delete operations fail with errors that do not reference known dependencies (attachments, snapshots)
Escalation-ready evidence checklist#
| Item | Command |
|---|---|
| Volume ID, status, and attachments | openstack volume show YOUR_VOLUME -c id -c status -c attachments |
| Snapshot ID and status | openstack volume snapshot show YOUR_SNAPSHOT -c id -c status |
| Quota usage | openstack quota show --usage |
| Error response | Full error message from the CLI or API |
| Timestamp | UTC time when the error occurred |
See also#
- Block Storage API reference
- Error response format: JSON error structure, request correlation
- API rate limits: quotas vs. rate limits,
/limitsendpoint, 429 handling - Retry and resilience patterns: backoff, jitter, and which errors to retry
- Volume troubleshooting runbook
- How to create a block volume