Preserve page creation outcomes through recovery

This commit is contained in:
2026-10-06 00:53:33 +00:00
parent a1ee067b53
commit 91712fd900
6 changed files with 116 additions and 16 deletions

View File

@@ -75,8 +75,9 @@ type Release struct {
}
type Result struct {
Release Release
Created bool
Release Release
Created bool
WriteAttempted bool // a create request was issued, including reconciled creates.
}
type Client struct {
@@ -150,7 +151,12 @@ func (c Client) EnsureRelease(ctx context.Context, request Request) (Result, err
}
created, postStatus, postErr := c.postRelease(ctx, client, request.Destination.Token, apiRoot+"/releases", body)
if postErr == nil {
return acceptCreated(created, request)
result, verifyErr := acceptCreated(created, request)
if verifyErr == nil {
result.WriteAttempted = true
return result, nil
}
postErr = verifyErr
}
if !shouldReconcileWrite(postStatus, postErr) {
return Result{}, postErr
@@ -162,6 +168,7 @@ func (c Client) EnsureRelease(ctx context.Context, request Request) (Result, err
if retryErr == nil {
result, matchErr := acceptExisting(retry, request)
if matchErr == nil {
result.WriteAttempted = true
return result, nil
}
return Result{}, failure(FailureConflict, "resolve release creation", postStatus, matchErr)