Remove XL multipart tmp files when the latter is canceled (#3214)

XL multipart fails to remove tmp files when an error occurs during upload, this case covers the scenario where an upload is canceled manually by the client in the middle of job.
This commit is contained in:
Anis Elleuch 2016-11-22 01:34:57 +01:00 committed by Harshavardhana
parent bef0a50bc1
commit 4098025c11
3 changed files with 13 additions and 2 deletions

View File

@ -23,6 +23,7 @@ import (
"io/ioutil"
"os"
"path"
"runtime"
"testing"
)
@ -326,6 +327,9 @@ func testObjectAPIPutObjectStaleFiles(obj ObjectLayer, instanceType string, disk
// Wrapper for calling Multipart PutObject tests for both XL multiple disks and single node setup.
func TestObjectAPIMultipartPutObjectStaleFiles(t *testing.T) {
if runtime.GOOS == "windows" {
return
}
ExecObjectLayerStaleFilesTest(t, testObjectAPIMultipartPutObjectStaleFiles)
}

View File

@ -944,5 +944,11 @@ func (s *posix) RenameFile(srcVolume, srcPath, dstVolume, dstPath string) (err e
}
return err
}
// Remove parent dir of the source file if empty
if parentDir := slashpath.Dir(preparePath(srcFilePath)); isDirEmpty(parentDir) {
deleteFile(srcVolumeDir, parentDir)
}
return nil
}

View File

@ -394,7 +394,8 @@ func (xl xlObjects) PutObjectPart(bucket, object, uploadID string, partID int, s
partSuffix := fmt.Sprintf("part.%d", partID)
tmpSuffix := getUUID()
tmpPartPath := tmpSuffix
tmpPart := tmpSuffix
tmpPartPath := path.Join(tmpSuffix, partSuffix)
// Initialize md5 writer.
md5Writer := md5.New()
@ -424,7 +425,7 @@ func (xl xlObjects) PutObjectPart(bucket, object, uploadID string, partID int, s
teeReader := io.TeeReader(lreader, mw)
// Delete the temporary object part. If PutObjectPart succeeds there would be nothing to delete.
defer xl.deleteObject(minioMetaTmpBucket, tmpPartPath)
defer xl.deleteObject(minioMetaTmpBucket, tmpPart)
if size > 0 {
for _, disk := range onlineDisks {