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-10-05 21:34:58 +0300
commit80d62284b148521cd0377b40aaae4aee81f0db62 (patch)
tree01503bb3ed9a10c27f4de7fb7a176ea930e1c399
parentf955266a86bb86637389583c591ae79ed7ad460e (diff)
ref: Return structured error when update error is not ErrAlreadyLocked
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.go31
1 files changed, 17 insertions, 14 deletions
diff --git a/internal/gitaly/service/ref/delete_refs.go b/internal/gitaly/service/ref/delete_refs.go
index f8d7a7f03..0e92ffc84 100644
--- a/internal/gitaly/service/ref/delete_refs.go
+++ b/internal/gitaly/service/ref/delete_refs.go
@@ -83,24 +83,27 @@ 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) {
+ var errAlreadyLocked *updateref.ErrAlreadyLocked
+ 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{