This commit is contained in:
Liang Ding 2023-01-09 20:27:10 +08:00
parent 380384ac0e
commit 68b0f4e8b3
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
2 changed files with 36 additions and 0 deletions

View file

@ -1255,6 +1255,12 @@ func autoFixIndex() {
})
size := len(paths)
redundantPaths := treenode.GetRedundantPaths(box.ID, paths)
for _, p := range redundantPaths {
treenode.RemoveBlockTreesByPathPrefix(p)
}
missingPaths := treenode.GetNotExistPaths(box.ID, paths)
for i, p := range missingPaths {
reindexTreeByPath(box.ID, p, i, size)

View file

@ -116,6 +116,31 @@ func CeilBlockCount(count int) int {
return 10000*100 + 1
}
func GetRedundantPaths(boxID string, paths []string) (ret []string) {
pathsMap := map[string]bool{}
for _, path := range paths {
pathsMap[path] = true
}
tmp := blockTrees
btPathsMap := map[string]bool{}
for _, blockTree := range tmp {
if blockTree.BoxID != boxID {
continue
}
btPathsMap[blockTree.Path] = true
}
for p, _ := range btPathsMap {
if !pathsMap[p] {
ret = append(ret, p)
}
}
ret = gulu.Str.RemoveDuplicatedElem(ret)
return
}
func GetNotExistPaths(boxID string, paths []string) (ret []string) {
pathsMap := map[string]bool{}
for _, path := range paths {
@ -132,6 +157,7 @@ func GetNotExistPaths(boxID string, paths []string) (ret []string) {
ret = append(ret, blockTree.Path)
}
}
ret = gulu.Str.RemoveDuplicatedElem(ret)
return
}
@ -191,6 +217,7 @@ func RemoveBlockTreesByRootID(rootID string) {
ids = append(ids, b.RootID)
}
}
ids = gulu.Str.RemoveDuplicatedElem(ids)
for _, id := range ids {
delete(blockTrees, id)
}
@ -207,6 +234,7 @@ func RemoveBlockTreesByPathPrefix(pathPrefix string) {
ids = append(ids, b.ID)
}
}
ids = gulu.Str.RemoveDuplicatedElem(ids)
for _, id := range ids {
delete(blockTrees, id)
}
@ -222,6 +250,7 @@ func RemoveBlockTreesByBoxID(boxID string) (ids []string) {
ids = append(ids, b.ID)
}
}
ids = gulu.Str.RemoveDuplicatedElem(ids)
for _, id := range ids {
delete(blockTrees, id)
}
@ -247,6 +276,7 @@ func ReindexBlockTree(tree *parse.Tree) {
ids = append(ids, b.ID)
}
}
ids = gulu.Str.RemoveDuplicatedElem(ids)
for _, id := range ids {
delete(blockTrees, id)
}