瀏覽代碼

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

Liang Ding 2 年之前
父節點
當前提交
6141be700a
共有 3 個文件被更改,包括 31 次插入20 次删除
  1. 1 17
      kernel/model/box.go
  2. 1 1
      kernel/model/conf.go
  3. 29 2
      kernel/model/index.go

+ 1 - 17
kernel/model/box.go

@@ -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)

+ 1 - 1
kernel/model/conf.go

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

+ 29 - 2
kernel/model/index.go

@@ -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