diff --git a/cmd/config-common.go b/cmd/config-common.go index ae731fc50..fd6d7dd26 100644 --- a/cmd/config-common.go +++ b/cmd/config-common.go @@ -61,7 +61,8 @@ type objectDeleter interface { func deleteConfig(ctx context.Context, objAPI objectDeleter, configFile string) error { _, err := objAPI.DeleteObject(ctx, minioMetaBucket, configFile, ObjectOptions{ - DeletePrefix: true, + DeletePrefix: true, + DeletePrefixObject: true, // use prefix delete on exact object (this is an optimization to avoid fan-out calls) }) if err != nil && isErrObjectNotFound(err) { return errConfigNotFound diff --git a/cmd/config.go b/cmd/config.go index 95e994d02..8cdbfc563 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -97,7 +97,8 @@ func listServerConfigHistory(ctx context.Context, objAPI ObjectLayer, withData b func delServerConfigHistory(ctx context.Context, objAPI ObjectLayer, uuidKV string) error { historyFile := pathJoin(minioConfigHistoryPrefix, uuidKV+kvPrefix) _, err := objAPI.DeleteObject(ctx, minioMetaBucket, historyFile, ObjectOptions{ - DeletePrefix: true, + DeletePrefix: true, + DeletePrefixObject: true, // use prefix delete on exact object (this is an optimization to avoid fan-out calls) }) return err } diff --git a/cmd/erasure-sets.go b/cmd/erasure-sets.go index 2f56eb4f6..a266ed507 100644 --- a/cmd/erasure-sets.go +++ b/cmd/erasure-sets.go @@ -776,7 +776,7 @@ func (s *erasureSets) deletePrefix(ctx context.Context, bucket string, prefix st // DeleteObject - deletes an object from the hashedSet based on the object name. func (s *erasureSets) DeleteObject(ctx context.Context, bucket string, object string, opts ObjectOptions) (objInfo ObjectInfo, err error) { - if opts.DeletePrefix { + if opts.DeletePrefix && !opts.DeletePrefixObject { err := s.deletePrefix(ctx, bucket, object) return ObjectInfo{}, err } diff --git a/cmd/object-api-interface.go b/cmd/object-api-interface.go index 85b4130af..ab08775db 100644 --- a/cmd/object-api-interface.go +++ b/cmd/object-api-interface.go @@ -78,6 +78,7 @@ type ObjectOptions struct { ReplicationSourceLegalholdTimestamp time.Time // set if MinIOSourceObjectLegalholdTimestamp received ReplicationSourceRetentionTimestamp time.Time // set if MinIOSourceObjectRetentionTimestamp received DeletePrefix bool // set true to enforce a prefix deletion, only application for DeleteObject API, + DeletePrefixObject bool // set true when object's erasure set is resolvable by object name (using getHashedSetIndex) Speedtest bool // object call specifically meant for SpeedTest code, set to 'true' when invoked by SpeedtestHandler.