diff options
Diffstat (limited to 'weed/filesys/wfs_deletion.go')
| -rw-r--r-- | weed/filesys/wfs_deletion.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/weed/filesys/wfs_deletion.go b/weed/filesys/wfs_deletion.go new file mode 100644 index 000000000..c2fcb4f7a --- /dev/null +++ b/weed/filesys/wfs_deletion.go @@ -0,0 +1,46 @@ +package filesys + +import ( + "context" + "time" + + "github.com/chrislusf/seaweedfs/weed/glog" + "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" +) + +func (wfs *WFS) loopProcessingDeletion() { + + ticker := time.NewTicker(2 * time.Second) + + wfs.withFilerClient(func(client filer_pb.SeaweedFilerClient) error { + var fileIds []string + for { + select { + case fids := <-wfs.fileIdsDeletionChan: + fileIds = append(fileIds, fids...) + if len(fileIds) >= 256 { + glog.V(1).Infof("deleting fileIds len=%d", len(fileIds)) + deleteFileIds(context.Background(), client, fileIds) + fileIds = fileIds[:0] + } + case <-ticker.C: + if len(fileIds) > 0 { + glog.V(1).Infof("timed deletion fileIds len=%d", len(fileIds)) + deleteFileIds(context.Background(), client, fileIds) + fileIds = fileIds[:0] + } + } + } + }) + +} + +func (wfs *WFS) asyncDeleteFileChunks(chunks []*filer_pb.FileChunk) { + if len(chunks) > 0 { + var fileIds []string + for _, chunk := range chunks { + fileIds = append(fileIds, chunk.FileId) + } + wfs.fileIdsDeletionChan <- fileIds + } +} |
