Skip to content

Commit

Permalink
do the sha1 hash during download instead of after to reduce local I/O…
Browse files Browse the repository at this point in the history
… for artifactory and bosh.io release sources. Already implemented for github release source, incompatible with the s3 release source which uses a concurrent download client.
  • Loading branch information
dlinsley committed Jan 6, 2025
1 parent 2720f49 commit 866b54c
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 25 deletions.
18 changes: 5 additions & 13 deletions internal/component/artifactory_release_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,25 +100,17 @@ func (ars *ArtifactoryReleaseSource) DownloadRelease(releaseDir string, remoteRe
if err != nil {
return Local{}, err
}
defer func() { _ = out.Close() }()
defer closeAndIgnoreError(out)

_, err = io.Copy(out, resp.Body)
hash := sha1.New()

mw := io.MultiWriter(out,hash)
_, err = io.Copy(mw, resp.Body)
_ = resp.Body.Close()
if err != nil {
return Local{}, err
}

_, err = out.Seek(0, 0)
if err != nil {
return Local{}, fmt.Errorf("error reseting file cursor: %w", err) // untested
}

hash := sha1.New()
_, err = io.Copy(hash, out)
if err != nil {
return Local{}, fmt.Errorf("error hashing file contents: %w", err) // untested
}

remoteRelease.SHA1 = hex.EncodeToString(hash.Sum(nil))

return Local{Lock: remoteRelease, LocalPath: filePath}, nil
Expand Down
16 changes: 4 additions & 12 deletions internal/component/bosh_io_release_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,23 +161,15 @@ func (src BOSHIOReleaseSource) DownloadRelease(releaseDir string, remoteRelease
}
defer closeAndIgnoreError(out)

_, err = io.Copy(out, resp.Body)
hash := sha1.New()

mw := io.MultiWriter(out,hash)
_, err = io.Copy(mw, resp.Body)
_ = resp.Body.Close()
if err != nil {
return Local{}, err
}

_, err = out.Seek(0, 0)
if err != nil {
return Local{}, fmt.Errorf("error reseting file cursor: %w", err) // untested
}

hash := sha1.New()
_, err = io.Copy(hash, out)
if err != nil {
return Local{}, fmt.Errorf("error hashing file contents: %w", err) // untested
}

remoteRelease.SHA1 = hex.EncodeToString(hash.Sum(nil))

return Local{Lock: remoteRelease, LocalPath: filePath}, nil
Expand Down

0 comments on commit 866b54c

Please sign in to comment.