Browse Source

weed filer: properly delete cached directory entry

fix https://github.com/chrislusf/seaweedfs/issues/910
pull/914/head
Chris Lu 6 years ago
parent
commit
beaa2bd71a
  1. 41
      weed/filer2/filer.go

41
weed/filer2/filer.go

@ -217,29 +217,32 @@ func (f *Filer) DeleteEntryMetaAndData(ctx context.Context, p FullPath, isRecurs
if err != nil { if err != nil {
return fmt.Errorf("list folder %s: %v", p, err) return fmt.Errorf("list folder %s: %v", p, err)
} }
if len(entries) == 0 { if len(entries) == 0 {
break break
} else {
if isRecursive {
for _, sub := range entries {
lastFileName = sub.Name()
f.DeleteEntryMetaAndData(ctx, sub.FullPath, isRecursive, shouldDeleteChunks)
limit--
if limit <= 0 {
break
}
}
if isRecursive {
for _, sub := range entries {
lastFileName = sub.Name()
err = f.DeleteEntryMetaAndData(ctx, sub.FullPath, isRecursive, shouldDeleteChunks)
if err != nil {
return err
} }
} else {
if len(entries) > 0 {
return fmt.Errorf("folder %s is not empty", p)
limit--
if limit <= 0 {
break
} }
} }
f.cacheDelDirectory(string(p))
if len(entries) < 1024 {
break
}
}
if len(entries) < 1024 {
break
} }
} }
f.cacheDelDirectory(string(p))
} }
if shouldDeleteChunks { if shouldDeleteChunks {
@ -264,6 +267,11 @@ func (f *Filer) ListDirectoryEntries(ctx context.Context, p FullPath, startFileN
} }
func (f *Filer) cacheDelDirectory(dirpath string) { func (f *Filer) cacheDelDirectory(dirpath string) {
if dirpath == "/" {
return
}
if f.directoryCache == nil { if f.directoryCache == nil {
return return
} }
@ -272,6 +280,7 @@ func (f *Filer) cacheDelDirectory(dirpath string) {
} }
func (f *Filer) cacheGetDirectory(dirpath string) *Entry { func (f *Filer) cacheGetDirectory(dirpath string) *Entry {
if f.directoryCache == nil { if f.directoryCache == nil {
return nil return nil
} }

Loading…
Cancel
Save