diff --git a/cmd/fs-v1-helpers.go b/cmd/fs-v1-helpers.go index 437b5bfc5..2fb42c694 100644 --- a/cmd/fs-v1-helpers.go +++ b/cmd/fs-v1-helpers.go @@ -41,9 +41,8 @@ func fsRemoveFile(ctx context.Context, filePath string) (err error) { return err } - if err = os.Remove((filePath)); err != nil { - err = osErrToFileErr(err) - if err != errFileNotFound { + if err = os.Remove(filePath); err != nil { + if err = osErrToFileErr(err); err != errFileNotFound { logger.LogIf(ctx, err) } } diff --git a/cmd/fs-v1-multipart.go b/cmd/fs-v1-multipart.go index 57fc62d81..242e7934f 100644 --- a/cmd/fs-v1-multipart.go +++ b/cmd/fs-v1-multipart.go @@ -319,22 +319,22 @@ func (fs *FSObjects) PutObjectPart(ctx context.Context, bucket, object, uploadID tmpPartPath := pathJoin(fs.fsPath, minioMetaTmpBucket, fs.fsUUID, uploadID+"."+mustGetUUID()+"."+strconv.Itoa(partID)) bytesWritten, err := fsCreateFile(ctx, tmpPartPath, data, buf, data.Size()) + + // Delete temporary part in case of failure. If + // PutObjectPart succeeds then there would be nothing to + // delete in which case we just ignore the error. + defer fsRemoveFile(ctx, tmpPartPath) + if err != nil { - fsRemoveFile(ctx, tmpPartPath) return pi, toObjectErr(err, minioMetaTmpBucket, tmpPartPath) } // Should return IncompleteBody{} error when reader has fewer // bytes than specified in request header. if bytesWritten < data.Size() { - fsRemoveFile(ctx, tmpPartPath) return pi, IncompleteBody{} } - // Delete temporary part in case of failure. If - // PutObjectPart succeeds then there would be nothing to - // delete in which case we just ignore the error. - defer fsRemoveFile(ctx, tmpPartPath) etag := r.MD5CurrentHexString() if etag == "" { @@ -863,8 +863,7 @@ func (fs *FSObjects) cleanupStaleMultipartUploads(ctx context.Context, cleanupIn fs.appendFileMapMu.Lock() bgAppend, ok := fs.appendFileMap[uploadID] if ok { - err := fsRemoveFile(ctx, bgAppend.filePath) - logger.LogIf(ctx, err) + _ = fsRemoveFile(ctx, bgAppend.filePath) delete(fs.appendFileMap, uploadID) } fs.appendFileMapMu.Unlock() diff --git a/cmd/fs-v1.go b/cmd/fs-v1.go index 1cf66c936..d507cf916 100644 --- a/cmd/fs-v1.go +++ b/cmd/fs-v1.go @@ -1200,8 +1200,13 @@ func (fs *FSObjects) putObject(ctx context.Context, bucket string, object string buf := make([]byte, int(bufSize)) fsTmpObjPath := pathJoin(fs.fsPath, minioMetaTmpBucket, fs.fsUUID, tempObj) bytesWritten, err := fsCreateFile(ctx, fsTmpObjPath, data, buf, data.Size()) + + // Delete the temporary object in the case of a + // failure. If PutObject succeeds, then there would be + // nothing to delete. + defer fsRemoveFile(ctx, fsTmpObjPath) + if err != nil { - fsRemoveFile(ctx, fsTmpObjPath) return ObjectInfo{}, toObjectErr(err, bucket, object) } fsMeta.Meta["etag"] = r.MD5CurrentHexString() @@ -1209,15 +1214,9 @@ func (fs *FSObjects) putObject(ctx context.Context, bucket string, object string // Should return IncompleteBody{} error when reader has fewer // bytes than specified in request header. if bytesWritten < data.Size() { - fsRemoveFile(ctx, fsTmpObjPath) return ObjectInfo{}, IncompleteBody{} } - // Delete the temporary object in the case of a - // failure. If PutObject succeeds, then there would be - // nothing to delete. - defer fsRemoveFile(ctx, fsTmpObjPath) - // Entire object was written to the temp location, now it's safe to rename it to the actual location. fsNSObjPath := pathJoin(fs.fsPath, bucket, object) if err = fsRenameFile(ctx, fsTmpObjPath, fsNSObjPath); err != nil {