@ -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 )
go func ( i int , obj ObjectIdentifier ) {
defer wg . Done ( )
// If the request is denied access, each item
// If the request is denied access, each item
// should be marked as 'AccessDenied'
// should be marked as 'AccessDenied'
if s3Error == ErrAccessDenied {
if s3Error == ErrAccessDenied {
dErrs [ i ] = PrefixAccessDenied {
dErrs [ index ] = PrefixAccessDenied {
Bucket : bucket ,
Bucket : bucket ,
Object : obj . ObjectName ,
Object : object . ObjectName ,
}
}
return
continue
}
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 )
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