Release a protection group
POST/v1/protection-groups/:id/release
Stops the group's workload here and hands it over to the region that recovers it, for a planned move with nothing lost. Runs where the group's custody is active: at its home before a failover, or at the recovery region before a failback.
The run pauses the backup plans that protect the members, locks each member's server so nobody starts it, shuts it down and waits until it is off. It then takes a final backup of every member with the server off and waits until that backup has reached every repository the other region reads, the copy repository included. Last, it records the release, with when each member stopped and its final backup, in those repositories, and the group's custody here becomes released. That record is the run's point of no return: before it, a failure or a cancel starts the servers again, unlocks them and resumes the plans; after it, nothing is undone. The other region then recovers the group with a planned recover, which acts on that record and nothing else. At the group's home, each member's final backup is kept as the point its original server holds, for the failback that returns to it.
A release needs a recent report from the other region that it can recover every member, or it is refused with recovery_region_not_ready: releasing a workload nothing can bring up is an outage. An operator may release without one with override_recovery_readiness, which is audited.
With dry_run=true the request answers 200 with the plan the run would follow and starts nothing. Otherwise it answers 202 with the admitted run; follow it at GET /v1/protection-groups/{id}/runs/{run_id}. The hot rung is refused in this release.
Any member of the project the token is scoped to.
Request
Responses
- 200
- 202
- 400
- 401
- 403
- 404
- 409
- 413
- 415
- 422
- 503
- default
OK.
With dry_run=true, the plan the run would follow. Nothing was started.
Accepted
Bad Request.
invalid_request: The body is not a single JSON object, names a field this operation does not take, or gives a value of the wrong type.
Unauthorized.
unauthenticated: The token is missing, expired or not valid.
Forbidden.
forbidden: The token may not release this group. override_recovery_readiness needs an operator token.
Not Found.
not_found: No group with this id exists in the token's project.
Conflict.
group_busy: A run is acting on the group.
custody_not_active: The workload does not run here, because the group's custody here is standby or released.
split_brain_risk: The group is in split_brain_risk, which only a resync or an acknowledgement clears.
recovery_region_not_ready: The other region's newest readiness report is missing, older than this service accepts, for another custody epoch, or says it could not recover every member, which fields names.
Request Entity Too Large.
body_too_large: The body is larger than the service accepts.
Unsupported Media Type.
unsupported_media_type: The body is not sent as application/json.
Unprocessable Entity.
member_not_under_group_policy: A member's server is protected by no plan under the group's policy, so no final backup can be taken of it.
member_disk_needs_running_guest: A member has a disk that can only be read through its running server, and a release takes its final backup with the server off.
member_not_mirrored: For a hot group, a member has no mirrored image recorded, or one of its images is not mirror-enabled or not primary here, so it cannot be demoted. fields names each.
mirror_unavailable: The group promises the hot rung and this region cannot reach its own mirrored images.
Service Unavailable.
dr_not_enabled: Disaster recovery is not enabled here, or this cloud cannot stop, lock or start servers, which the detail names.
An error, as an RFC 7807 problem document.