From 7e014cb52527a84feb872012257916f54d9e6f6e Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 24 Jan 2023 14:14:27 +0800 Subject: [PATCH 1/2] =?UTF-8?q?:art:=20=E6=94=B9=E8=BF=9B=E5=86=85?= =?UTF-8?q?=E6=A0=B8=E4=BB=BB=E5=8A=A1=E8=B0=83=E5=BA=A6=E6=9C=BA=E5=88=B6?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E7=A8=B3=E5=AE=9A=E6=80=A7=20https://github.?= =?UTF-8?q?com/siyuan-note/siyuan/issues/7113?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/box.go | 4 ++-- kernel/model/conf.go | 1 + kernel/model/index.go | 5 ++--- kernel/sql/queue.go | 4 ++++ kernel/task/queue.go | 5 +++++ kernel/treenode/blocktree.go | 20 ++++++++++---------- kernel/util/runtime.go | 3 +++ 7 files changed, 27 insertions(+), 15 deletions(-) diff --git a/kernel/model/box.go b/kernel/model/box.go index 56f7f3d4e..1d8df876b 100644 --- a/kernel/model/box.go +++ b/kernel/model/box.go @@ -486,7 +486,7 @@ func FullReindex() { } func fullReindex() { - util.PushEndlessProgress(Conf.Language(35)) + util.PushMsg(Conf.Language(35), 60*1000*10) WaitForWritingFiles() if err := sql.InitDatabase(true); nil != err { @@ -505,7 +505,7 @@ func fullReindex() { treenode.SaveBlockTree(true) LoadFlashcards() - util.PushEndlessProgress(Conf.Language(58)) + util.PushMsg(Conf.Language(58), 7000) go func() { time.Sleep(1 * time.Second) util.ReloadUI() diff --git a/kernel/model/conf.go b/kernel/model/conf.go index f1631195c..519a1263c 100644 --- a/kernel/model/conf.go +++ b/kernel/model/conf.go @@ -393,6 +393,7 @@ var exitLock = sync.Mutex{} func Close(force bool, execInstallPkg int) (exitCode int) { exitLock.Lock() defer exitLock.Unlock() + util.IsExiting = true logging.LogInfof("exiting kernel [force=%v, execInstallPkg=%d]", force, execInstallPkg) util.PushMsg(Conf.Language(95), 10000*60) diff --git a/kernel/model/index.go b/kernel/model/index.go index f5b7ab140..d370dd3a9 100644 --- a/kernel/model/index.go +++ b/kernel/model/index.go @@ -69,8 +69,7 @@ func index(boxID string) { var treeSize int64 i := 0 - util.PushEndlessProgress(fmt.Sprintf("["+box.Name+"] "+Conf.Language(64), len(files))) - defer util.PushClearProgress() + util.PushStatusBar(fmt.Sprintf("["+box.Name+"] "+Conf.Language(64), len(files))) for _, file := range files { if file.isdir || !strings.HasSuffix(file.name, ".sy") { @@ -101,7 +100,7 @@ func index(boxID string) { treeSize += file.size treeCount++ if 1 < i && 0 == i%64 { - util.PushEndlessProgress(fmt.Sprintf(Conf.Language(88), i, len(files)-i)) + util.PushStatusBar(fmt.Sprintf(Conf.Language(88), i, len(files)-i)) } i++ } diff --git a/kernel/sql/queue.go b/kernel/sql/queue.go index b048633ca..4c9112cea 100644 --- a/kernel/sql/queue.go +++ b/kernel/sql/queue.go @@ -104,6 +104,10 @@ func FlushQueue() { context := map[string]interface{}{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBar} for _, op := range ops { + if util.IsExiting { + break + } + switch op.action { case "upsert": tree := op.upsertTree diff --git a/kernel/task/queue.go b/kernel/task/queue.go index 9609408a1..cab4f41db 100644 --- a/kernel/task/queue.go +++ b/kernel/task/queue.go @@ -17,6 +17,7 @@ package task import ( + "github.com/siyuan-note/siyuan/kernel/util" "reflect" "sync" "time" @@ -122,6 +123,10 @@ func Loop() { continue } + if util.IsExiting { + break + } + execTask(task) } } diff --git a/kernel/treenode/blocktree.go b/kernel/treenode/blocktree.go index 67df96687..b56c286a9 100644 --- a/kernel/treenode/blocktree.go +++ b/kernel/treenode/blocktree.go @@ -292,16 +292,16 @@ func ReindexBlockTree(tree *parse.Tree) { blockTreesLock.Lock() defer blockTreesLock.Unlock() - var ids []string - for _, b := range blockTrees { - if b.RootID == tree.ID { - ids = append(ids, b.ID) - } - } - ids = gulu.Str.RemoveDuplicatedElem(ids) - for _, id := range ids { - delete(blockTrees, id) - } + //var ids []string + //for _, b := range blockTrees { + // if b.RootID == tree.ID { + // ids = append(ids, b.ID) + // } + //} + //ids = gulu.Str.RemoveDuplicatedElem(ids) + //for _, id := range ids { + // delete(blockTrees, id) + //} ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus { if !entering || !n.IsBlock() { diff --git a/kernel/util/runtime.go b/kernel/util/runtime.go index 6d230bc9d..0b2ae553a 100644 --- a/kernel/util/runtime.go +++ b/kernel/util/runtime.go @@ -42,6 +42,9 @@ const ( ExitCodeFatal = 1 // 致命错误 ) +// IsExiting 是否正在退出程序。 +var IsExiting = false + func logBootInfo() { logging.LogInfof("kernel is booting:\n"+ " * ver [%s]\n"+ From e7bcf7443b2b9738b06594ea5269175592e4dced Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 24 Jan 2023 15:05:40 +0800 Subject: [PATCH 2/2] =?UTF-8?q?:art:=20=E6=94=B9=E8=BF=9B=E5=86=85?= =?UTF-8?q?=E6=A0=B8=E4=BB=BB=E5=8A=A1=E8=B0=83=E5=BA=A6=E6=9C=BA=E5=88=B6?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E7=A8=B3=E5=AE=9A=E6=80=A7=20https://github.?= =?UTF-8?q?com/siyuan-note/siyuan/issues/7113?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/model/block.go | 2 ++ kernel/model/index.go | 15 +++++++++++++-- kernel/model/transaction.go | 6 ++++++ kernel/treenode/blocktree.go | 11 ----------- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/kernel/model/block.go b/kernel/model/block.go index 5ee473604..0fb8d40d2 100644 --- a/kernel/model/block.go +++ b/kernel/model/block.go @@ -391,6 +391,8 @@ func getBlock(id string) (ret *Block, err error) { return } + waitForIndexing() + tree, err := loadTreeByBlockID(id) if nil != err { return diff --git a/kernel/model/index.go b/kernel/model/index.go index d370dd3a9..d02c1a78c 100644 --- a/kernel/model/index.go +++ b/kernel/model/index.go @@ -49,12 +49,25 @@ func (box *Box) Index() { task.AppendTask(task.DatabaseIndexRef, IndexRefs) } +var indexing = false + +func waitForIndexing() { + for indexing { + time.Sleep(time.Millisecond * 100) + } +} + func index(boxID string) { box := Conf.Box(boxID) if nil == box { return } + indexing = true + defer func() { + indexing = false + }() + util.SetBootDetails("Listing files...") files := box.ListFiles("/") boxLen := len(Conf.GetOpenedBoxes()) @@ -68,9 +81,7 @@ func index(boxID string) { var treeCount int var treeSize int64 i := 0 - util.PushStatusBar(fmt.Sprintf("["+box.Name+"] "+Conf.Language(64), len(files))) - for _, file := range files { if file.isdir || !strings.HasSuffix(file.name, ".sy") { continue diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index 58a1de9f0..0b606d13e 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -1306,6 +1306,12 @@ func autoFixIndex() { } } + // 清理已关闭的笔记本块树 + boxes = Conf.GetClosedBoxes() + for _, box := range boxes { + treenode.RemoveBlockTreesByBoxID(box.ID) + } + // 对比块树和数据库并订正数据库 rootUpdatedMap := treenode.GetRootUpdated() dbRootUpdatedMap, err := sql.GetRootUpdated("blocks") diff --git a/kernel/treenode/blocktree.go b/kernel/treenode/blocktree.go index b56c286a9..55f1eac0f 100644 --- a/kernel/treenode/blocktree.go +++ b/kernel/treenode/blocktree.go @@ -292,17 +292,6 @@ func ReindexBlockTree(tree *parse.Tree) { blockTreesLock.Lock() defer blockTreesLock.Unlock() - //var ids []string - //for _, b := range blockTrees { - // if b.RootID == tree.ID { - // ids = append(ids, b.ID) - // } - //} - //ids = gulu.Str.RemoveDuplicatedElem(ids) - //for _, id := range ids { - // delete(blockTrees, id) - //} - ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus { if !entering || !n.IsBlock() { return ast.WalkContinue