aboutsummaryrefslogtreecommitdiff
path: root/weed/filer2/filer.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2018-12-16 23:20:08 -0800
committerChris Lu <chris.lu@gmail.com>2018-12-16 23:20:08 -0800
commit3ac54792e14f73ce8922ebfdbc88c0b03741fd07 (patch)
tree0a790e73d0f48a9550e81eac94891dcd1fa45dd1 /weed/filer2/filer.go
parent39bf274a83bb24609589b89ffe5551ca21d967b2 (diff)
downloadseaweedfs-3ac54792e14f73ce8922ebfdbc88c0b03741fd07.tar.xz
seaweedfs-3ac54792e14f73ce8922ebfdbc88c0b03741fd07.zip
paginate when filer deleting and FUSE mount renaming
Diffstat (limited to 'weed/filer2/filer.go')
-rw-r--r--weed/filer2/filer.go38
1 files changed, 27 insertions, 11 deletions
diff --git a/weed/filer2/filer.go b/weed/filer2/filer.go
index d49c86a76..1ee2f5ede 100644
--- a/weed/filer2/filer.go
+++ b/weed/filer2/filer.go
@@ -195,20 +195,36 @@ func (f *Filer) DeleteEntryMetaAndData(p FullPath, isRecursive bool, shouldDelet
if isRecursive {
limit = math.MaxInt32
}
- entries, err := f.ListDirectoryEntries(p, "", false, limit)
- if err != nil {
- return fmt.Errorf("list folder %s: %v", p, err)
- }
- if isRecursive {
- for _, sub := range entries {
- f.DeleteEntryMetaAndData(sub.FullPath, isRecursive, shouldDeleteChunks)
+ lastFileName := ""
+ includeLastFile := false
+ for limit > 0 {
+ entries, err := f.ListDirectoryEntries(p, lastFileName, includeLastFile, 1024)
+ if err != nil {
+ return fmt.Errorf("list folder %s: %v", p, err)
}
- } else {
- if len(entries) > 0 {
- return fmt.Errorf("folder %s is not empty", p)
+ if len(entries) == 0 {
+ break
+ } else {
+ if isRecursive {
+ for _, sub := range entries {
+ lastFileName = sub.Name()
+ f.DeleteEntryMetaAndData(sub.FullPath, isRecursive, shouldDeleteChunks)
+ limit--
+ if limit <= 0 {
+ break
+ }
+ }
+ } else {
+ if len(entries) > 0 {
+ return fmt.Errorf("folder %s is not empty", p)
+ }
+ }
+ f.cacheDelDirectory(string(p))
+ if len(entries) < 1024 {
+ break
+ }
}
}
- f.cacheDelDirectory(string(p))
}
if shouldDeleteChunks {