Skip to content

Commit 4845651

Browse files
committed
🎨 #17349
Signed-off-by: Daniel <845765@qq.com>
1 parent 28e6305 commit 4845651

2 files changed

Lines changed: 20 additions & 12 deletions

File tree

kernel/filesys/tree.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func batchLoadTrees(boxIDs, paths []string, luteEngine *lute.Lute) (ret []*parse
113113
return
114114
}
115115

116-
func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err error) {
116+
func LoadTreeWithFix(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, needFix bool, err error) {
117117
rootID := util.GetTreeID(p)
118118
if raw, ok := cache.GetTreeData(rootID); ok {
119119
ret, err = LoadTreeByData(raw, boxID, p, luteEngine)
@@ -127,7 +127,7 @@ func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err erro
127127
return
128128
}
129129

130-
data, err = fixTreeJSONData(boxID, p, data, luteEngine)
130+
data, needFix, err = fixTreeJSONData(boxID, p, data, luteEngine)
131131
if nil != err {
132132
return
133133
}
@@ -139,6 +139,11 @@ func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err erro
139139
return
140140
}
141141

142+
func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err error) {
143+
ret, _, err = LoadTreeWithFix(boxID, p, luteEngine)
144+
return
145+
}
146+
142147
func LoadTreeByData(data []byte, boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err error) {
143148
ret, err = parseJSON2Tree(boxID, p, data, luteEngine)
144149
if nil != err {
@@ -386,20 +391,19 @@ func afterWriteTree(tree *parse.Tree) {
386391
}
387392

388393
// fixTreeJSONData 订正树 JSON 数据。
389-
func fixTreeJSONData(boxID, p string, jsonData []byte, luteEngine *lute.Lute) ([]byte, error) {
394+
func fixTreeJSONData(boxID, p string, jsonData []byte, luteEngine *lute.Lute) (data []byte, needFix bool, err error) {
390395
jsonData = removeUnescapedUnicodeNull(jsonData)
391-
var needFix bool
392396
ret, needFix, err := dataparser.ParseJSON(jsonData, luteEngine.ParseOptions)
393397
if err != nil {
394398
logging.LogErrorf("parse json [%s] to tree failed: %s", boxID+p, err)
395-
return nil, err
399+
return
396400
}
397401

398402
ret.Box = boxID
399403
ret.Path = p
400404

401405
if err = treenode.CheckSpec(ret); errors.Is(err, treenode.ErrSpecTooNew) {
402-
return nil, err
406+
return
403407
}
404408

405409
if treenode.UpgradeSpec(ret) {
@@ -422,29 +426,29 @@ func fixTreeJSONData(boxID, p string, jsonData []byte, luteEngine *lute.Lute) ([
422426
}
423427

424428
if !needFix {
425-
return jsonData, nil
429+
return jsonData, false, nil
426430
}
427431

428432
renderer := render.NewJSONRenderer(ret, luteEngine.RenderOptions, luteEngine.ParseOptions)
429-
data := renderer.Render()
433+
data = renderer.Render()
430434

431435
if !util.UseSingleLineSave {
432436
buf := bytes.Buffer{}
433437
buf.Grow(1024 * 1024 * 2)
434438
if err = json.Indent(&buf, data, "", "\t"); err != nil {
435-
return nil, err
439+
return
436440
}
437441
data = buf.Bytes()
438442
}
439443

440444
filePath := filepath.Join(util.DataDir, ret.Box, ret.Path)
441445
if err = os.MkdirAll(filepath.Dir(filePath), 0755); err != nil {
442-
return nil, err
446+
return
443447
}
444448
if err = filelock.WriteFile(filePath, data); err != nil {
445449
logging.LogErrorf("write data [%s] failed: %s", filePath, err)
446450
}
447-
return data, nil
451+
return
448452
}
449453

450454
func parseJSON2Tree(boxID, p string, jsonData []byte, luteEngine *lute.Lute) (ret *parse.Tree, err error) {

kernel/model/tree.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,11 @@ func LoadTreeByBlockID(id string) (ret *parse.Tree, err error) {
243243

244244
func loadTreeByBlockTree(bt *treenode.BlockTree) (ret *parse.Tree, err error) {
245245
luteEngine := util.NewLute()
246-
ret, err = filesys.LoadTree(bt.BoxID, bt.Path, luteEngine)
246+
ret, needFix, err := filesys.LoadTreeWithFix(bt.BoxID, bt.Path, luteEngine)
247+
if needFix {
248+
treenode.UpsertBlockTree(ret)
249+
sql.IndexTreeQueue(ret)
250+
}
247251
return
248252
}
249253

0 commit comments

Comments
 (0)