diff --git a/kernel/api/block.go b/kernel/api/block.go index 7d242a6cd..37611ce15 100644 --- a/kernel/api/block.go +++ b/kernel/api/block.go @@ -465,7 +465,8 @@ func getBlockInfo(c *gin.Context) { id := arg["id"].(string) - tree, err := model.LoadTreeByBlockID(id) + // 仅在此处使用带重建索引的加载函数,其他地方不要使用 + tree, err := model.LoadTreeByBlockIDWithReindex(id) if errors.Is(err, model.ErrIndexing) { ret.Code = 3 ret.Msg = model.Conf.Language(56) diff --git a/kernel/model/tree.go b/kernel/model/tree.go index 1cb13368b..db9d62d1d 100644 --- a/kernel/model/tree.go +++ b/kernel/model/tree.go @@ -153,7 +153,9 @@ var ( ErrIndexing = errors.New("indexing") ) -func LoadTreeByBlockID(id string) (ret *parse.Tree, err error) { +func LoadTreeByBlockIDWithReindex(id string) (ret *parse.Tree, err error) { + // 仅提供给 getBlockInfo 接口使用 + if "" == id { return nil, ErrTreeNotFound } @@ -178,6 +180,25 @@ func LoadTreeByBlockID(id string) (ret *parse.Tree, err error) { return } +func LoadTreeByBlockID(id string) (ret *parse.Tree, err error) { + if "" == id { + return nil, ErrTreeNotFound + } + + bt := treenode.GetBlockTree(id) + if nil == bt { + if task.Contain(task.DatabaseIndex, task.DatabaseIndexFull) { + err = ErrIndexing + return + } + return nil, ErrTreeNotFound + } + + luteEngine := util.NewLute() + ret, err = filesys.LoadTree(bt.BoxID, bt.Path, luteEngine) + return +} + var searchTreeLimiter = rate.NewLimiter(rate.Every(3*time.Second), 1) func searchTreeInFilesystem(rootID string) {