Merge pull request #5966 from dmcgowan/fix-unexpected-eof-handling
This commit is contained in:
commit
94b86a6b97
@ -144,9 +144,14 @@ func Copy(ctx context.Context, cw Writer, r io.Reader, size int64, expected dige
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := copyWithBuffer(cw, r); err != nil {
|
copied, err := copyWithBuffer(cw, r)
|
||||||
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to copy")
|
return errors.Wrap(err, "failed to copy")
|
||||||
}
|
}
|
||||||
|
if size != 0 && copied < size-ws.Offset {
|
||||||
|
// Short writes would return its own error, this indicates a read failure
|
||||||
|
return errors.Wrapf(io.ErrUnexpectedEOF, "failed to read expected number of bytes")
|
||||||
|
}
|
||||||
|
|
||||||
if err := cw.Commit(ctx, size, expected, opts...); err != nil {
|
if err := cw.Commit(ctx, size, expected, opts...); err != nil {
|
||||||
if !errdefs.IsAlreadyExists(err) {
|
if !errdefs.IsAlreadyExists(err) {
|
||||||
@ -165,8 +170,15 @@ func CopyReaderAt(cw Writer, ra ReaderAt, n int64) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = copyWithBuffer(cw, io.NewSectionReader(ra, ws.Offset, n))
|
copied, err := copyWithBuffer(cw, io.NewSectionReader(ra, ws.Offset, n))
|
||||||
return err
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "failed to copy")
|
||||||
|
}
|
||||||
|
if copied < n {
|
||||||
|
// Short writes would return its own error, this indicates a read failure
|
||||||
|
return errors.Wrap(io.ErrUnexpectedEOF, "failed to read expected number of bytes")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CopyReader copies to a writer from a given reader, returning
|
// CopyReader copies to a writer from a given reader, returning
|
||||||
|
@ -65,10 +65,11 @@ func TestCopy(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "commit already exists",
|
name: "commit already exists",
|
||||||
source: defaultSource,
|
source: newCopySource("this already exists"),
|
||||||
writer: fakeWriter{commitFunc: func() error {
|
writer: fakeWriter{commitFunc: func() error {
|
||||||
return errdefs.ErrAlreadyExists
|
return errdefs.ErrAlreadyExists
|
||||||
}},
|
}},
|
||||||
|
expected: "this already exists",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user