Do not use parallel deletes to avoid random I/O (#6178)

The current code for deleting 1000 objects simultaneously
causes significant random I/O, which on slower drives
leads to servers disconnecting in a distributed setup.

Simplify this by serially deleting and reducing the
chattiness of this operation.
master
Harshavardhana 6 years ago committed by kannappanr
parent 76ddf4d32f
commit f1be356cc6
  1. 39
      cmd/bucket-handlers.go

@ -28,7 +28,6 @@ import (
"path" "path"
"path/filepath" "path/filepath"
"strings" "strings"
"sync"
"github.com/gorilla/mux" "github.com/gorilla/mux"
@ -311,34 +310,24 @@ func (api objectAPIHandlers) DeleteMultipleObjectsHandler(w http.ResponseWriter,
return return
} }
var wg = &sync.WaitGroup{} // Allocate a new wait group. deleteObject := objectAPI.DeleteObject
var dErrs = make([]error, len(deleteObjects.Objects)) if api.CacheAPI() != nil {
deleteObject = api.CacheAPI().DeleteObject
}
// Delete all requested objects in parallel. var dErrs = make([]error, len(deleteObjects.Objects))
for index, object := range deleteObjects.Objects { for index, object := range deleteObjects.Objects {
wg.Add(1) // If the request is denied access, each item
go func(i int, obj ObjectIdentifier) { // should be marked as 'AccessDenied'
defer wg.Done() if s3Error == ErrAccessDenied {
// If the request is denied access, each item dErrs[index] = PrefixAccessDenied{
// should be marked as 'AccessDenied' Bucket: bucket,
if s3Error == ErrAccessDenied { Object: object.ObjectName,
dErrs[i] = PrefixAccessDenied{
Bucket: bucket,
Object: obj.ObjectName,
}
return
}
deleteObject := objectAPI.DeleteObject
if api.CacheAPI() != nil {
deleteObject = api.CacheAPI().DeleteObject
}
dErr := deleteObject(ctx, bucket, obj.ObjectName)
if dErr != nil {
dErrs[i] = dErr
} }
}(index, object) continue
}
dErrs[index] = deleteObject(ctx, bucket, object.ObjectName)
} }
wg.Wait()
// Collect deleted objects and errors if any. // Collect deleted objects and errors if any.
var deletedObjects []ObjectIdentifier var deletedObjects []ObjectIdentifier

Loading…
Cancel
Save