From 598ce1e3540ff86827ed2633af0424a30b97aef1 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Tue, 19 Apr 2022 08:20:48 -0700 Subject: [PATCH] supply prefix filtering when necessary (#14772) currently filterPefix was never used and set that would filter out entries when needed when `prefix` doesn't end with `/` - this often leads to objects getting Walked(), Healed() that were never requested by the caller. --- cmd/erasure-server-pool.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/cmd/erasure-server-pool.go b/cmd/erasure-server-pool.go index bb2217c7b..aa97b8372 100644 --- a/cmd/erasure-server-pool.go +++ b/cmd/erasure-server-pool.go @@ -27,6 +27,7 @@ import ( "net/http" "sort" "strconv" + "strings" "sync" "time" @@ -1723,14 +1724,16 @@ func (z *erasureServerPools) Walk(ctx context.Context, bucket, prefix string, re } path := baseDirFromPrefix(prefix) - if path == "" { - path = prefix + filterPrefix := strings.Trim(strings.TrimPrefix(prefix, path), slashSeparator) + if path == prefix { + filterPrefix = "" } lopts := listPathRawOptions{ disks: disks, bucket: bucket, path: path, + filterPrefix: filterPrefix, recursive: true, forwardTo: "", minDisks: 1, @@ -1783,14 +1786,16 @@ func listAndHeal(ctx context.Context, bucket, prefix string, set *erasureObjects } path := baseDirFromPrefix(prefix) - if path == "" { - path = prefix + filterPrefix := strings.Trim(strings.TrimPrefix(prefix, path), slashSeparator) + if path == prefix { + filterPrefix = "" } lopts := listPathRawOptions{ disks: disks, bucket: bucket, path: path, + filterPrefix: filterPrefix, recursive: true, forwardTo: "", minDisks: 1,