mirror of
https://github.com/distribution/distribution.git
synced 2025-09-11 19:59:48 +00:00
track digest offset in blobwriter
Signed-off-by: David Wu <david.wu@docker.com>
This commit is contained in:
@@ -33,7 +33,7 @@ type blobWriter struct {
|
||||
id string
|
||||
startedAt time.Time
|
||||
digester digest.Digester
|
||||
written int64 // track the contiguous write
|
||||
written int64 // track the write to digester
|
||||
|
||||
fileWriter storagedriver.FileWriter
|
||||
driver storagedriver.StorageDriver
|
||||
@@ -119,7 +119,12 @@ func (bw *blobWriter) Write(p []byte) (int, error) {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
n, err := io.MultiWriter(bw.fileWriter, bw.digester.Hash()).Write(p)
|
||||
_, err := bw.fileWriter.Write(p)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
n, err := bw.digester.Hash().Write(p)
|
||||
bw.written += int64(n)
|
||||
|
||||
return n, err
|
||||
@@ -133,7 +138,11 @@ func (bw *blobWriter) ReadFrom(r io.Reader) (n int64, err error) {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
nn, err := io.Copy(io.MultiWriter(bw.fileWriter, bw.digester.Hash()), r)
|
||||
// Using a TeeReader instead of MultiWriter ensures Copy returns
|
||||
// the amount written to the digester as well as ensuring that we
|
||||
// write to the fileWriter first
|
||||
tee := io.TeeReader(r, bw.fileWriter)
|
||||
nn, err := io.Copy(bw.digester.Hash(), tee)
|
||||
bw.written += nn
|
||||
|
||||
return nn, err
|
||||
|
Reference in New Issue
Block a user