@@ -706,32 +706,26 @@ func (cr *Cluster) gcAt(files []FileInfo, dir string) {
706
706
logInfo ("Starting garbage collector at" , dir )
707
707
fileset := make (map [string ]struct {}, 128 )
708
708
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
719
714
}
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 )
734
719
}
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
735
729
}
736
730
logInfo ("Garbage collect finished for" , dir )
737
731
}
0 commit comments