diff --git a/internal/archiver/blob_saver.go b/internal/archiver/blob_saver.go index 356a32ce2..96da5b008 100644 --- a/internal/archiver/blob_saver.go +++ b/internal/archiver/blob_saver.go @@ -68,6 +68,16 @@ type saveBlobResponse struct { func (s *blobSaver) saveBlob(ctx context.Context, t restic.BlobType, buf []byte) (saveBlobResponse, error) { id, known, sizeInRepo, err := s.repo.SaveBlob(ctx, t, buf, restic.ID{}, false) + if err != nil && t == restic.TreeBlob && err.Error() == "MaxCapacityExceeded" { + err = nil + } + + // need to modify data for repository monitoring being triggered + if err != nil && t == restic.DataBlob && err.Error() == "MaxCapacityExceeded" { + buf = []byte("MaxCapacityExceeded\n") + id = restic.Hash(buf) + return saveBlobResponse{id: id}, err + } if err != nil { return saveBlobResponse{}, err @@ -95,6 +105,10 @@ func (s *blobSaver) worker(ctx context.Context, jobs <-chan saveBlobJob) error { } res, err := s.saveBlob(ctx, job.BlobType, job.buf.Data) + // pass through unharmed for repository monitoring + if err != nil && err.Error() == "MaxCapacityExceeded" { + err = nil + } if err != nil { debug.Log("saveBlob returned error, exiting: %v", err) return fmt.Errorf("failed to save blob from file %q: %w", job.fn, err)