Skip to content

Commit

Permalink
azure: Return success when deleting non-existent object (minio#9981)
Browse files Browse the repository at this point in the history
  • Loading branch information
kannappanr authored Jul 10, 2020
1 parent 30c251e commit efe9fe6
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 6 deletions.
2 changes: 1 addition & 1 deletion cmd/api-datatypes.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (

// DeletedObject objects deleted
type DeletedObject struct {
DeleteMarker bool `xml:"DeleteMarker"`
DeleteMarker bool `xml:"DeleteMarker,omitempty"`
DeleteMarkerVersionID string `xml:"DeleteMarkerVersionId,omitempty"`
ObjectName string `xml:"Key,omitempty"`
VersionID string `xml:"VersionId,omitempty"`
Expand Down
7 changes: 7 additions & 0 deletions cmd/bucket-handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,13 @@ func (api objectAPIHandlers) DeleteMultipleObjectsHandler(w http.ResponseWriter,
return
}

// Before proceeding validate if bucket exists.
_, err := objectAPI.GetBucketInfo(ctx, bucket)
if err != nil {
writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL, guessIsBrowserReq(r))
return
}

deleteObjectsFn := objectAPI.DeleteObjects
if api.CacheAPI() != nil {
deleteObjectsFn = api.CacheAPI().DeleteObjects
Expand Down
13 changes: 8 additions & 5 deletions cmd/gateway/azure/gateway-azure.go
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,8 @@ func azureToObjectError(err error, params ...string) error {

func azureCodesToObjectError(err error, serviceCode string, statusCode int, bucket string, object string) error {
switch serviceCode {
case "ContainerNotFound":
err = minio.BucketNotFound{Bucket: bucket}
case "ContainerAlreadyExists":
err = minio.BucketExists{Bucket: bucket}
case "InvalidResourceName":
Expand Down Expand Up @@ -970,7 +972,10 @@ func (a *azureObjects) DeleteObject(ctx context.Context, bucket, object string,
blob := a.client.NewContainerURL(bucket).NewBlobURL(object)
_, err := blob.Delete(ctx, azblob.DeleteSnapshotsOptionNone, azblob.BlobAccessConditions{})
if err != nil {
return minio.ObjectInfo{}, azureToObjectError(err, bucket, object)
err = azureToObjectError(err, bucket, object)
if !errors.Is(err, minio.ObjectNotFound{Bucket: bucket, Object: object}) {
return minio.ObjectInfo{}, err
}
}
return minio.ObjectInfo{
Bucket: bucket,
Expand All @@ -983,10 +988,8 @@ func (a *azureObjects) DeleteObjects(ctx context.Context, bucket string, objects
dobjects := make([]minio.DeletedObject, len(objects))
for idx, object := range objects {
_, errs[idx] = a.DeleteObject(ctx, bucket, object.ObjectName, opts)
if errs[idx] == nil {
dobjects[idx] = minio.DeletedObject{
ObjectName: object.ObjectName,
}
dobjects[idx] = minio.DeletedObject{
ObjectName: object.ObjectName,
}
}
return dobjects, errs
Expand Down

0 comments on commit efe9fe6

Please sign in to comment.