Skip to content

Commit 13bdd8a

Browse files
committed
refactor recordError, delete failed files in Put
1 parent 0ff0e7b commit 13bdd8a

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

modules/lfs/content_store.go

+14-13
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,19 @@ func (s *ContentStore) Put(pointer Pointer, r io.Reader) error {
6363
// check again whether there is any error during the Save operation
6464
// because some errors might be ignored by the Reader's caller
6565
if wrappedRd.lastError != nil && !errors.Is(wrappedRd.lastError, io.EOF) {
66-
return wrappedRd.lastError
66+
err = wrappedRd.lastError
67+
} else if written != pointer.Size {
68+
err = ErrSizeMismatch
6769
}
6870

69-
// This shouldn't happen but it is sensible to test
70-
if written != pointer.Size {
71-
if err := s.Delete(p); err != nil {
72-
log.Error("Cleaning the LFS OID[%s] failed: %v", pointer.Oid, err)
71+
// if the upload failed, try to delete the file
72+
if err != nil {
73+
if errDel := s.Delete(p); errDel != nil {
74+
log.Error("Cleaning the LFS OID[%s] failed: %v", pointer.Oid, errDel)
7375
}
74-
return ErrSizeMismatch
7576
}
7677

77-
return nil
78+
return err
7879
}
7980

8081
// Exists returns true if the object exists in the content store.
@@ -123,9 +124,9 @@ type hashingReader struct {
123124
// For example, MinIO's Put will ignore errors if the written size could equal to expected size
124125
// So we must remember the error by ourselves,
125126
// and later check again whether ErrSizeMismatch or ErrHashMismatch occurs during the Save operation
126-
func (r *hashingReader) recordError(n int, err error) (int, error) {
127+
func (r *hashingReader) recordError(err error) error {
127128
r.lastError = err
128-
return n, err
129+
return err
129130
}
130131

131132
func (r *hashingReader) Read(b []byte) (int, error) {
@@ -135,22 +136,22 @@ func (r *hashingReader) Read(b []byte) (int, error) {
135136
r.currentSize += int64(n)
136137
wn, werr := r.hash.Write(b[:n])
137138
if wn != n || werr != nil {
138-
return r.recordError(n, werr)
139+
return n, r.recordError(werr)
139140
}
140141
}
141142

142143
if errors.Is(err, io.EOF) || r.currentSize >= r.expectedSize {
143144
if r.currentSize != r.expectedSize {
144-
return r.recordError(n, ErrSizeMismatch)
145+
return n, r.recordError(ErrSizeMismatch)
145146
}
146147

147148
shaStr := hex.EncodeToString(r.hash.Sum(nil))
148149
if shaStr != r.expectedHash {
149-
return r.recordError(n, ErrHashMismatch)
150+
return n, r.recordError(ErrHashMismatch)
150151
}
151152
}
152153

153-
return r.recordError(n, err)
154+
return n, r.recordError(err)
154155
}
155156

156157
func newHashingReader(expectedSize int64, expectedHash string, reader io.Reader) *hashingReader {

0 commit comments

Comments
 (0)