Preserve page creation outcomes through recovery
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user