xl: Avoid removing a directory if it is not an object dir (#6395)

DeleteObject should not remove any directory unless the latter
is an empty directory.

Fixes #6394
This commit is contained in:
Anis Elleuch
2018-08-31 22:16:35 +02:00
committed by kannappanr
parent 4487f70f08
commit 85117d554f
2 changed files with 24 additions and 19 deletions
+16 -13
View File
@@ -843,24 +843,27 @@ func (xl xlObjects) DeleteObject(ctx context.Context, bucket, object string) (er
return err
}
if hasSuffix(object, slashSeparator) {
// Delete the object on all disks.
if err = xl.deleteObject(ctx, bucket, object, len(xl.getDisks())/2+1, true); err != nil {
if !xl.isObject(bucket, object) {
return ObjectNotFound{bucket, object}
}
var writeQuorum int
var isObjectDir = hasSuffix(object, slashSeparator)
if isObjectDir {
writeQuorum = len(xl.getDisks())/2 + 1
} else {
// Read metadata associated with the object from all disks.
partsMetadata, errs := readAllXLMetadata(ctx, xl.getDisks(), bucket, object)
// get Quorum for this object
_, writeQuorum, err = objectQuorumFromMeta(ctx, xl, partsMetadata, errs)
if err != nil {
return toObjectErr(err, bucket, object)
}
}
// Read metadata associated with the object from all disks.
partsMetadata, errs := readAllXLMetadata(ctx, xl.getDisks(), bucket, object)
// get Quorum for this object
_, writeQuorum, err := objectQuorumFromMeta(ctx, xl, partsMetadata, errs)
if err != nil {
return toObjectErr(err, bucket, object)
}
// Delete the object on all disks.
if err = xl.deleteObject(ctx, bucket, object, writeQuorum, false); err != nil {
if err = xl.deleteObject(ctx, bucket, object, writeQuorum, isObjectDir); err != nil {
return toObjectErr(err, bucket, object)
}