From b78d21c3dbe7718dddea5a859bd39b88c7c0744e Mon Sep 17 00:00:00 2001 From: Aleksandr Loktionov Date: Thu, 8 Jan 2026 08:54:03 -0300 Subject: [PATCH] fix: optimize sidecar empty-dir checks --- backend/meta/sidecar.go | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/backend/meta/sidecar.go b/backend/meta/sidecar.go index c035775c..1d6a6b4f 100644 --- a/backend/meta/sidecar.go +++ b/backend/meta/sidecar.go @@ -17,6 +17,7 @@ package meta import ( "errors" "fmt" + "io" "os" "path/filepath" ) @@ -154,8 +155,8 @@ func (s SideCar) cleanupEmptyDirs(metadir, bucket, object string) { } func removeIfEmpty(dir string) { - ents, err := os.ReadDir(dir) - if err != nil || len(ents) != 0 { + empty, err := isDirEmpty(dir) + if err != nil || !empty { return } _ = os.Remove(dir) @@ -166,8 +167,8 @@ func removeEmptyParents(dir, stopDir string) { if dir == stopDir || dir == "." || dir == string(filepath.Separator) { return } - ents, err := os.ReadDir(dir) - if err != nil || len(ents) != 0 { + empty, err := isDirEmpty(dir) + if err != nil || !empty { return } err = os.Remove(dir) @@ -177,3 +178,20 @@ func removeEmptyParents(dir, stopDir string) { dir = filepath.Dir(dir) } } + +func isDirEmpty(dir string) (bool, error) { + f, err := os.Open(dir) + if err != nil { + return false, err + } + defer f.Close() + + ents, err := f.Readdirnames(1) + if err == io.EOF { + return true, nil + } + if err != nil { + return false, err + } + return len(ents) == 0, nil +}