diff --git a/kernel/model/index_fix.go b/kernel/model/index_fix.go index a95209e1b..4547aa4a4 100644 --- a/kernel/model/index_fix.go +++ b/kernel/model/index_fix.go @@ -106,6 +106,7 @@ func autoFixIndex() { size := len(paths) + // 清理块树中重复冗余的数据 redundantPaths := treenode.GetRedundantPaths(box.ID, paths) for _, p := range redundantPaths { treenode.RemoveBlockTreesByPath(box.ID, p) diff --git a/kernel/treenode/blocktree.go b/kernel/treenode/blocktree.go index 16f4af016..566c6de35 100644 --- a/kernel/treenode/blocktree.go +++ b/kernel/treenode/blocktree.go @@ -270,31 +270,18 @@ func RemoveBlockTreesByRootID(rootID string) { } func RemoveBlockTreesByPath(boxID, path string) { - var ids []string blockTrees.Range(func(key, value interface{}) bool { slice := value.(*btSlice) slice.m.Lock() for _, b := range slice.data { if b.Path == path && b.BoxID == boxID { - ids = append(ids, b.RootID) + delete(slice.data, b.ID) + slice.changed = time.Now() } } slice.m.Unlock() return true }) - - ids = gulu.Str.RemoveDuplicatedElem(ids) - for _, id := range ids { - val, ok := blockTrees.Load(btHash(id)) - if !ok { - continue - } - slice := val.(*btSlice) - slice.m.Lock() - delete(slice.data, id) - slice.m.Unlock() - slice.changed = time.Now() - } } func RemoveBlockTreesByPathPrefix(pathPrefix string) {