🎨 改进内核任务调度机制提升稳定性 https://github.com/siyuan-note/siyuan/issues/7113

This commit is contained in:
Liang Ding 2023-01-23 10:44:22 +08:00
parent 2ac8151c7a
commit 6141be700a
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
3 changed files with 31 additions and 20 deletions

View file

@ -339,22 +339,6 @@ func (box *Box) Remove(path string) error {
return nil
}
func (box *Box) Unindex() {
task.PrependTask(task.DatabaseIndex, unindex, box.ID)
}
func unindex(boxID string) {
tx, err := sql.BeginTx()
if nil != err {
return
}
sql.RemoveBoxHash(tx, boxID)
sql.DeleteByBoxTx(tx, boxID)
sql.CommitTx(tx)
ids := treenode.RemoveBlockTreesByBoxID(boxID)
RemoveRecentDoc(ids)
}
func (box *Box) ListFiles(path string) (ret []*FileInfo) {
fis, _, err := box.Ls(path)
if nil != err {
@ -512,7 +496,7 @@ func fullReindex() {
openedBoxes := Conf.GetOpenedBoxes()
for _, openedBox := range openedBoxes {
openedBox.Index(true)
index(openedBox.ID, true)
}
IndexRefs()
treenode.SaveBlockTree(true)

View file

@ -599,7 +599,7 @@ func InitBoxes() {
box.UpdateHistoryGenerated() // 初始化历史生成时间为当前时间
if !initialized {
box.Index(true)
index(box.ID, true)
}
}

View file

@ -20,6 +20,7 @@ import (
"bytes"
"crypto/sha256"
"fmt"
"github.com/siyuan-note/siyuan/kernel/task"
"runtime/debug"
"sort"
"strings"
@ -37,7 +38,32 @@ import (
"github.com/siyuan-note/siyuan/kernel/util"
)
func (box *Box) Index(fullRebuildIndex bool) (treeCount int, treeSize int64) {
func (box *Box) Unindex() {
task.PrependTask(task.DatabaseIndex, unindex, box.ID)
}
func unindex(boxID string) {
tx, err := sql.BeginTx()
if nil != err {
return
}
sql.RemoveBoxHash(tx, boxID)
sql.DeleteByBoxTx(tx, boxID)
sql.CommitTx(tx)
ids := treenode.RemoveBlockTreesByBoxID(boxID)
RemoveRecentDoc(ids)
}
func (box *Box) Index(fullRebuildIndex bool) {
task.PrependTask(task.DatabaseIndex, index, box.ID, fullRebuildIndex)
}
func index(boxID string, fullRebuildIndex bool) {
box := Conf.Box(boxID)
if nil == box {
return
}
defer debug.FreeOSMemory()
sql.IndexMode()
@ -59,7 +85,8 @@ func (box *Box) Index(fullRebuildIndex bool) (treeCount int, treeSize int64) {
luteEngine := NewLute()
idTitleMap := map[string]string{}
idHashMap := map[string]string{}
var treeCount int
var treeSize int64
util.PushEndlessProgress(fmt.Sprintf("["+box.Name+"] "+Conf.Language(64), len(files)))
i := 0