Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Cai <jcai@gitlab.com>2022-09-28 20:16:39 +0300
committerJohn Cai <jcai@gitlab.com>2022-09-28 20:29:14 +0300
commitedd9b6066c3ef8045c1c8a46b1d19bd44bae1981 (patch)
tree48bd4f80002d8555a606792db6b14caf775bd55c
parent6d4ebb397a85b0b1d1784e6946f51f4dab5ac925 (diff)
ref: Return structured error when update error is not ErrAlreadyLockedjc-fix-delete-refs
We have a bug wherein we still return a successful response with an error embedded in the response if the Prepare() step fails with an error but the error is not an ErrAlreadyLocked. Fix the code such that we return an error instead of a response when there is a non ErrAlreadyLocked error during the Prepare() call. Changelog: fixed
-rw-r--r--internal/gitaly/service/ref/delete_refs.go29
1 files changed, 16 insertions, 13 deletions
diff --git a/internal/gitaly/service/ref/delete_refs.go b/internal/gitaly/service/ref/delete_refs.go
index f8d7a7f03..e6931a121 100644
--- a/internal/gitaly/service/ref/delete_refs.go
+++ b/internal/gitaly/service/ref/delete_refs.go
@@ -84,23 +84,26 @@ func (s *server) DeleteRefs(ctx context.Context, in *gitalypb.DeleteRefsRequest)
if err := updater.Prepare(); err != nil {
var errAlreadyLocked *updateref.ErrAlreadyLocked
- if featureflag.DeleteRefsStructuredErrors.IsEnabled(ctx) &&
- errors.As(err, &errAlreadyLocked) {
- detailedErr, err := helper.ErrWithDetails(
- helper.ErrFailedPreconditionf("cannot lock references"),
- &gitalypb.DeleteRefsError{
- Error: &gitalypb.DeleteRefsError_ReferencesLocked{
- ReferencesLocked: &gitalypb.ReferencesLockedError{
- Refs: [][]byte{[]byte(errAlreadyLocked.Ref)},
+ if featureflag.DeleteRefsStructuredErrors.IsEnabled(ctx) {
+ if errors.As(err, &errAlreadyLocked) {
+ detailedErr, err := helper.ErrWithDetails(
+ helper.ErrFailedPreconditionf("cannot lock references"),
+ &gitalypb.DeleteRefsError{
+ Error: &gitalypb.DeleteRefsError_ReferencesLocked{
+ ReferencesLocked: &gitalypb.ReferencesLockedError{
+ Refs: [][]byte{[]byte(errAlreadyLocked.Ref)},
+ },
},
},
- },
- )
- if err != nil {
- return nil, helper.ErrInternalf("error details: %w", err)
+ )
+ if err != nil {
+ return nil, helper.ErrInternalf("error details: %w", err)
+ }
+
+ return nil, detailedErr
}
- return nil, detailedErr
+ return nil, helper.ErrInternalf("unable to prepare: %w", err)
}
return &gitalypb.DeleteRefsResponse{