Skip to content

Commit 70c3841

Browse files
committed
improve garbage collector
1 parent c7eb537 commit 70c3841

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

cluster.go

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -706,32 +706,26 @@ func (cr *Cluster) gcAt(files []FileInfo, dir string) {
706706
logInfo("Starting garbage collector at", dir)
707707
fileset := make(map[string]struct{}, 128)
708708
for i, _ := range files {
709-
fileset[filepath.Join(dir, hashToFilename(files[i].Hash))] = struct{}{}
710-
}
711-
stack := make([]string, 0, 256)
712-
stack = append(stack, dir)
713-
for len(stack) > 0 {
714-
p := stack[len(stack)-1]
715-
stack = stack[:len(stack)-1]
716-
fil, err := os.ReadDir(p)
717-
if err != nil {
718-
continue
709+
fileset[files[i].Hash] = struct{}{}
710+
}
711+
err := walkCacheDir(dir, func(path string) (_ error) {
712+
if cr.issync.Load() {
713+
return context.Canceled
719714
}
720-
for _, f := range fil {
721-
if cr.issync.Load() {
722-
logWarn("Garbage collector interrupted at", dir)
723-
return
724-
}
725-
n := filepath.Join(p, f.Name())
726-
if stat, err := os.Stat(n); err == nil {
727-
if stat.IsDir() {
728-
stack = append(stack, n)
729-
} else if _, ok := fileset[n]; !ok {
730-
logInfo("Found outdated file:", n)
731-
os.Remove(n)
732-
}
733-
}
715+
hs := strings.TrimSuffix(filepath.Base(path), ".gz")
716+
if _, ok := fileset[hs]; !ok {
717+
logInfo("Found outdated file:", path)
718+
os.Remove(path)
734719
}
720+
return
721+
})
722+
if err != nil {
723+
if err == context.Canceled {
724+
logWarn("Garbage collector interrupted at", dir)
725+
} else {
726+
logErrorf("Garbage collector error: %v", err)
727+
}
728+
return
735729
}
736730
logInfo("Garbage collect finished for", dir)
737731
}

0 commit comments

Comments
 (0)