Skip to content

Commit

Permalink
fix: excessive memory usage
Browse files Browse the repository at this point in the history
instead of reading entire files before calculating their digests
stream them by using their Reader method.

Signed-off-by: Petu Eusebiu <[email protected]>
  • Loading branch information
eusebiu-constantin-petu-dbk committed Jan 12, 2024
1 parent 1c756b4 commit 51bae2a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 16 deletions.
21 changes: 7 additions & 14 deletions pkg/storage/imagestore/imagestore.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package imagestore

import (
"bytes"
"context"
"crypto/sha256"
"encoding/json"
Expand Down Expand Up @@ -951,26 +950,20 @@ func (is *ImageStore) FullBlobUpload(repo string, body io.Reader, dstDigest godi
uuid := u.String()
src := is.BlobUploadPath(repo, uuid)
digester := sha256.New()
buf := new(bytes.Buffer)

_, err = buf.ReadFrom(body)
blobFile, err := is.storeDriver.Writer(src, false)
if err != nil {
is.log.Error().Err(err).Msg("failed to read blob")
is.log.Error().Err(err).Str("blob", src).Msg("failed to open blob")

return "", -1, err
return "", -1, zerr.ErrUploadNotFound
}

nbytes, err := is.storeDriver.WriteFile(src, buf.Bytes())
if err != nil {
is.log.Error().Err(err).Msg("failed to write blob")
defer blobFile.Close()

return "", -1, err
}
mw := io.MultiWriter(blobFile, digester)

_, err = digester.Write(buf.Bytes())
nbytes, err := io.Copy(mw, body)
if err != nil {
is.log.Error().Err(err).Str("component", "digester").Msg("failed to write")

return "", -1, err
}

Expand Down Expand Up @@ -1008,7 +1001,7 @@ func (is *ImageStore) FullBlobUpload(repo string, body io.Reader, dstDigest godi
}
}

return uuid, int64(nbytes), nil
return uuid, nbytes, nil
}

func (is *ImageStore) DedupeBlob(src string, dstDigest godigest.Digest, dstRepo string, dst string) error {
Expand Down
11 changes: 9 additions & 2 deletions pkg/storage/scrub.go
Original file line number Diff line number Diff line change
Expand Up @@ -279,21 +279,28 @@ func CheckLayers(
}

for _, layer := range man.Layers {
layerContent, err := imgStore.GetBlobContent(imageName, layer.Digest)
layerReader, _, err := imgStore.GetBlob(imageName, layer.Digest, "")
if err != nil {
imageRes = getResult(imageName, tagName, layer.Digest, err)

break
}

computedDigest := godigest.FromBytes(layerContent)
computedDigest, err := godigest.FromReader(layerReader)
if err != nil {
imageRes = getResult(imageName, tagName, layer.Digest, err)

break
}

if computedDigest != layer.Digest {
imageRes = getResult(imageName, tagName, layer.Digest, errors.ErrBadBlobDigest)

break
}

_ = layerReader.Close()

imageRes = getResult(imageName, tagName, "", nil)
}

Expand Down

0 comments on commit 51bae2a

Please sign in to comment.