aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-05-10 23:25:39 -0700
committerChris Lu <chris.lu@gmail.com>2020-05-10 23:25:39 -0700
commit015dd3a147cc6f1ca0bfc02ddcd74453fc08ebf6 (patch)
tree704ab04574378a771943da125bd5ba7b1e5687f8
parent20b8f2e5b4c4dc6961e22408b8e9bd72f14f3a21 (diff)
downloadseaweedfs-015dd3a147cc6f1ca0bfc02ddcd74453fc08ebf6.tar.xz
seaweedfs-015dd3a147cc6f1ca0bfc02ddcd74453fc08ebf6.zip
batch file id deletion
-rw-r--r--weed/filer2/filer_deletion.go30
1 files changed, 21 insertions, 9 deletions
diff --git a/weed/filer2/filer_deletion.go b/weed/filer2/filer_deletion.go
index e463e9e6a..a6b229771 100644
--- a/weed/filer2/filer_deletion.go
+++ b/weed/filer2/filer_deletion.go
@@ -34,19 +34,31 @@ func (f *Filer) loopProcessingDeletion() {
lookupFunc := LookupByMasterClientFn(f.MasterClient)
+ DeletionBatchSize := 100000 // roughly 20 bytes cost per file id.
+
var deletionCount int
for {
deletionCount = 0
f.fileIdDeletionQueue.Consume(func(fileIds []string) {
- deletionCount = len(fileIds)
- deleteResults, err := operation.DeleteFilesWithLookupVolumeId(f.GrpcDialOption, fileIds, lookupFunc)
- if err != nil {
- glog.V(0).Infof("deleting fileIds len=%d error: %v", deletionCount, err)
- } else {
- glog.V(1).Infof("deleting fileIds len=%d", deletionCount)
- }
- if len(deleteResults) != deletionCount {
- glog.V(0).Infof("delete %d fileIds actual %d", deletionCount, len(deleteResults))
+ for len(fileIds) > 0 {
+ var toDeleteFileIds []string
+ if len(fileIds) > DeletionBatchSize {
+ toDeleteFileIds = fileIds[:DeletionBatchSize]
+ fileIds = fileIds[DeletionBatchSize:]
+ } else {
+ toDeleteFileIds = fileIds
+ fileIds = fileIds[:0]
+ }
+ deletionCount = len(toDeleteFileIds)
+ deleteResults, err := operation.DeleteFilesWithLookupVolumeId(f.GrpcDialOption, toDeleteFileIds, lookupFunc)
+ if err != nil {
+ glog.V(0).Infof("deleting fileIds len=%d error: %v", deletionCount, err)
+ } else {
+ glog.V(1).Infof("deleting fileIds len=%d", deletionCount)
+ }
+ if len(deleteResults) != deletionCount {
+ glog.V(0).Infof("delete %d fileIds actual %d", deletionCount, len(deleteResults))
+ }
}
})