From 0a276a25cfd275289804dd2f02bf4d1b2daa330a Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Fri, 30 Jul 2021 09:20:40 -0700 Subject: [PATCH] fix: extend parentDirIsObject for all parents --- cmd/erasure-sets.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/cmd/erasure-sets.go b/cmd/erasure-sets.go index 97c523fb2..4dddc037e 100644 --- a/cmd/erasure-sets.go +++ b/cmd/erasure-sets.go @@ -24,6 +24,7 @@ import ( "io" "math/rand" "net/http" + "path" "sort" "sync" "time" @@ -755,7 +756,19 @@ func (s *erasureSets) GetObject(ctx context.Context, bucket, object string, star } func (s *erasureSets) parentDirIsObject(ctx context.Context, bucket, parent string) bool { - return s.getHashedSet(parent).parentDirIsObject(ctx, bucket, parent) + var isParentDirObject func(string) bool + isParentDirObject = func(p string) bool { + if p == "." || p == SlashSeparator { + return false + } + if s.getHashedSet(p).isObject(ctx, bucket, p) { + // If there is already a file at prefix "p", return true. + return true + } + // Check if there is a file as one of the parent paths. + return isParentDirObject(path.Dir(p)) + } + return isParentDirObject(parent) } // PutObject - writes an object to hashedSet based on the object name.