From 71b9341fc7e6f5b0408daa683ab7230535536493 Mon Sep 17 00:00:00 2001 From: Krishna Srinivas Date: Thu, 19 May 2016 02:00:58 +0530 Subject: [PATCH] XL/Multipart: Cleanup uploads.json after abort-multipart-upload. (#1678) Fixes #1663 --- object-common-multipart.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/object-common-multipart.go b/object-common-multipart.go index 5d85bd8b5..8907c0174 100644 --- a/object-common-multipart.go +++ b/object-common-multipart.go @@ -237,7 +237,25 @@ func abortMultipartUploadCommon(storage StorageAPI, bucket, object, uploadID str if !isUploadIDExists(storage, bucket, object, uploadID) { return InvalidUploadID{UploadID: uploadID} } - return cleanupUploadedParts(storage, bucket, object, uploadID) + + if err := cleanupUploadedParts(storage, bucket, object, uploadID); err != nil { + return err + } + + // Validate if there are other incomplete upload-id's present for + // the object, if yes do not attempt to delete 'uploads.json'. + if entries, err := storage.ListDir(minioMetaBucket, path.Join(mpartMetaPrefix, bucket, object)); err == nil { + if len(entries) > 1 { + return nil + } + } + + uploadsJSONPath := path.Join(mpartMetaPrefix, bucket, object, uploadsJSONFile) + if err := storage.DeleteFile(minioMetaBucket, uploadsJSONPath); err != nil { + return err + } + + return nil } // isIncompleteMultipart - is object incomplete multipart.