diff --git a/changelogs/unreleased/1261-asaf-erlich b/changelogs/unreleased/1261-asaf-erlich new file mode 100644 index 000000000..bbb91e7c8 --- /dev/null +++ b/changelogs/unreleased/1261-asaf-erlich @@ -0,0 +1 @@ +Update velero restore to not open every single file open during extraction of the data diff --git a/pkg/restore/backup_extractor.go b/pkg/restore/backup_extractor.go index 827ab7f3b..275673972 100644 --- a/pkg/restore/backup_extractor.go +++ b/pkg/restore/backup_extractor.go @@ -46,6 +46,19 @@ func (e *backupExtractor) unzipAndExtractBackup(src io.Reader) (string, error) { return e.readBackup(tar.NewReader(gzr)) } +func (e *backupExtractor) writeFile(target string, tarRdr *tar.Reader) error { + file, err := e.fileSystem.Create(target) + if err != nil { + return err + } + defer file.Close() + + if _, err := io.Copy(file, tarRdr); err != nil { + return err + } + return nil +} + func (e *backupExtractor) readBackup(tarRdr *tar.Reader) (string, error) { dir, err := e.fileSystem.TempDir("", "") if err != nil { @@ -83,13 +96,7 @@ func (e *backupExtractor) readBackup(tarRdr *tar.Reader) (string, error) { } // create the file - file, err := e.fileSystem.Create(target) - if err != nil { - return "", err - } - defer file.Close() - - if _, err := io.Copy(file, tarRdr); err != nil { + if err := e.writeFile(target, tarRdr); err != nil { e.log.Infof("error copying: %v", err) return "", err }