fix(coderd): add blocking GetProvisionerJobByIDWithLock for workspace build cancellation (#19737)

Closes https://github.com/coder/internal/issues/885

Adds a new database method GetProvisionerJobByIDWithLock that uses FOR
UPDATE without SKIP LOCKED to fix workspace build cancellation returning
500 errors when jobs are locked.
This commit is contained in:
Kacper Sawicki
2025-09-08 15:40:14 +02:00
committed by GitHub
parent 065c7c3d5d
commit 776231d025
9 changed files with 109 additions and 2 deletions
+1 -1
View File
@@ -663,7 +663,7 @@ func (api *API) patchCancelWorkspaceBuild(rw http.ResponseWriter, r *http.Reques
return xerrors.New("user is not allowed to cancel workspace builds")
}
job, err := db.GetProvisionerJobByIDForUpdate(ctx, workspaceBuild.JobID)
job, err := db.GetProvisionerJobByIDWithLock(ctx, workspaceBuild.JobID)
if err != nil {
code = http.StatusInternalServerError
resp.Message = "Internal error fetching provisioner job."