From 470553ff5dd85bf90448ee7bb0d263ee63ed06fc Mon Sep 17 00:00:00 2001 From: Klaus Post Date: Mon, 30 Aug 2021 17:38:11 +0200 Subject: [PATCH] Tweak readall allocation and renameData buffer reuse (#13108) Use a single allocation for reading the file, not the growing buffer of `io.ReadAll`. Reuse the write buffer if we can when writing metadata in RenameData. --- cmd/xl-storage.go | 3 ++- docs/bucket/versioning/xl-meta.go | 2 +- internal/ioutil/read_file.go | 9 +++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/cmd/xl-storage.go b/cmd/xl-storage.go index 6e5391419..63bcc5448 100644 --- a/cmd/xl-storage.go +++ b/cmd/xl-storage.go @@ -2091,7 +2091,8 @@ func (s *xlStorage) RenameData(ctx context.Context, srcVolume, srcPath string, f return err } - dstBuf, err = xlMeta.AppendTo(nil) + dstBuf, err = xlMeta.AppendTo(metaDataPoolGet()) + defer metaDataPoolPut(dstBuf) if err != nil { logger.LogIf(ctx, err) if legacyPreserved { diff --git a/docs/bucket/versioning/xl-meta.go b/docs/bucket/versioning/xl-meta.go index 6ffca0434..425bb6780 100644 --- a/docs/bucket/versioning/xl-meta.go +++ b/docs/bucket/versioning/xl-meta.go @@ -135,7 +135,7 @@ GLOBAL FLAGS: } data = b default: - return errors.New("unknown metadata version") + return fmt.Errorf("unknown metadata version %d", minor) } if c.Bool("data") { diff --git a/internal/ioutil/read_file.go b/internal/ioutil/read_file.go index 5c745aa15..be4ed76cd 100644 --- a/internal/ioutil/read_file.go +++ b/internal/ioutil/read_file.go @@ -34,6 +34,11 @@ func ReadFile(name string) ([]byte, error) { return nil, err } defer f.Close() - - return io.ReadAll(f) + st, err := f.Stat() + if err != nil { + return io.ReadAll(f) + } + dst := make([]byte, st.Size()) + _, err = io.ReadFull(f, dst) + return dst, err }