Chelabase
ManagementMerges

Cancel a merge

POST
/v1/databases/{id}/merges/{merge_id}/cancel

Stops a merge that isn't changing the target: computing, draft, rehearsing (the worker deletes the rehearsal branch; until it is gone the target's reset, restore and delete answer branch_merge_busy with error.rehearsal_branch_id) or rehearsed. An applying merge can't be cancelled, and a merge failed in online is abandoned instead.

Authorization

bearer
AuthorizationBearer <token>

In: header

Path Parameters

id*string

Database id

Formatuuid
merge_id*string

Merge id

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/databases/497f6eca-6276-4993-bfeb-53cbbbba6f08/merges/497f6eca-6276-4993-bfeb-53cbbbba6f08/cancel"
{  "created_at": "2019-08-24T14:15:22Z",  "created_by": "string",  "database": "string",  "direction": "into_parent",  "error": "string",  "failed_phase": "string",  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "rebaselined": true,  "source_branch_id": "345f76de-8f9d-4a8f-b08e-a28a3db17483",  "status": "computing",  "target_branch_id": "2a8880d3-8c08-4fef-81e0-ec9d6c6def29",  "updated_at": "2019-08-24T14:15:22Z",  "version": 0}

Apply a rehearsed merge to its target POST

Refuses, in this order: a merge that isn't `rehearsed` (`merge_not_rehearsed`, or `merge_stale` for a stale one); a `version` that isn't the merge's (`merge_version_conflict`: a save of acknowledgements or the after-merge choice keeps a merge rehearsed, so send the version you last saw to apply what you saw); conflicts without a resolution (`merge_conflicts_open`); data-loss, security (BYPASSRLS, owner-level) or breaking (a role rename) steps without an acknowledgement (`merge_drops_unacknowledged`); a protected target without `confirm: true` (`merge_confirm_required`); another merge applying to the target, or failed half applied on it (`merge_busy`). The worker then runs the plan (`applying`, then `online` for the concurrent index and validation steps, then `finishing`). The request doesn't read the target: before the plan's transaction the worker compares the target with the schema the plan was computed from, and if it changed, ends the merge `stale` without applying the transaction.

Run the after-merge choice of a merge applied with drift POST

A merge whose target doesn't read back as merged ends `applied_with_drift` without running its after-merge choice (`result.after.skipped`). Once you've looked at the drift, this runs it: `keep` (the merge becomes the branch's base, if the source is still the schema that was merged; otherwise `result.after.base` is `not_advanced`), `reset` or `delete` of the source branch, with their usual refusals recorded in `result.after`. Only once per merge; an update from the parent only keeps. The merge stays `applied_with_drift`; `result.after` holds `requested: true` until the worker records the outcome.