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:
authorJames Fargher <jfargher@gitlab.com>2023-04-05 00:08:05 +0300
committerJames Fargher <jfargher@gitlab.com>2023-04-11 01:28:43 +0300
commit3eac5d6142281c8c272ea33c6b8ad92582cd17ff (patch)
tree8f0aca5009fb209ee1f8ae6c816eff1c9e23583a
parent1bbafe2d66283dce559e5d2e63707a45bcfc4358 (diff)
backup: Rewrite bundle writing to use GetWriter
-rw-r--r--internal/backup/backup.go14
1 files changed, 12 insertions, 2 deletions
diff --git a/internal/backup/backup.go b/internal/backup/backup.go
index ec2085832..cb5535273 100644
--- a/internal/backup/backup.go
+++ b/internal/backup/backup.go
@@ -297,7 +297,7 @@ func (mgr *Manager) createRepository(ctx context.Context, server storage.ServerI
return nil
}
-func (mgr *Manager) writeBundle(ctx context.Context, step *Step, server storage.ServerInfo, repo *gitalypb.Repository, refs []*gitalypb.ListRefsResponse_Reference) error {
+func (mgr *Manager) writeBundle(ctx context.Context, step *Step, server storage.ServerInfo, repo *gitalypb.Repository, refs []*gitalypb.ListRefsResponse_Reference) (returnErr error) {
repoClient, err := mgr.newRepoClient(ctx, server)
if err != nil {
return err
@@ -326,6 +326,7 @@ func (mgr *Manager) writeBundle(ctx context.Context, step *Step, server storage.
if err := stream.CloseSend(); err != nil {
return err
}
+
bundle := streamio.NewReader(func() ([]byte, error) {
resp, err := stream.Recv()
if structerr.GRPCCode(err) == codes.FailedPrecondition {
@@ -333,13 +334,22 @@ func (mgr *Manager) writeBundle(ctx context.Context, step *Step, server storage.
}
return resp.GetData(), err
})
+ w := NewLazyWriter(func() (io.WriteCloser, error) {
+ return mgr.sink.GetWriter(ctx, step.BundlePath)
+ })
+ defer func() {
+ if err := w.Close(); err != nil && returnErr == nil {
+ returnErr = err
+ }
+ }()
- if err := LazyWrite(ctx, mgr.sink, step.BundlePath, bundle); err != nil {
+ if _, err := io.Copy(w, bundle); err != nil {
if errors.Is(err, errEmptyBundle) {
return fmt.Errorf("%T write: %w: no changes to bundle", mgr.sink, ErrSkipped)
}
return fmt.Errorf("%T write: %w", mgr.sink, err)
}
+
return nil
}