gs: Don't drop error when finishing upload

The error returned when finishing the upload of an object was dropped.
This could cause silent upload failures and thus data loss in certain
cases. When a MD5 hash for the uploaded blob is specified, a wrong
hash/damaged upload would return its error via the Close() whose error
was dropped.
This commit is contained in:
Michael Eischer 2021-01-30 00:39:32 +01:00
parent 4d576c2f79
commit 8a486eafed
2 changed files with 11 additions and 1 deletions

View file

@ -0,0 +1,7 @@
Bugfix: Better error handling for gs backend
The gs backend did not notice when the last steep of completing a file upload
failed. Under rare circumstance, this might be able to cause missing files in
the backup repository. This has been fixed.
https://github.com/restic/restic/pull/3249

View file

@ -235,7 +235,10 @@ func (be *Backend) Save(ctx context.Context, h restic.Handle, rd restic.RewindRe
w := be.bucket.Object(objName).NewWriter(ctx)
w.ChunkSize = 0
wbytes, err := io.Copy(w, rd)
w.Close()
cerr := w.Close()
if err == nil {
err = cerr
}
be.sem.ReleaseToken()