diff --git a/changelog/unreleased/pull-3249 b/changelog/unreleased/pull-3249 new file mode 100644 index 000000000..696cba521 --- /dev/null +++ b/changelog/unreleased/pull-3249 @@ -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 diff --git a/internal/backend/gs/gs.go b/internal/backend/gs/gs.go index 7e4ac0702..70af32d25 100644 --- a/internal/backend/gs/gs.go +++ b/internal/backend/gs/gs.go @@ -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()