From ee473289d2477fa96a5c9857760f0c2673c5b4e2 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 12 Apr 2024 20:33:53 +0800 Subject: [PATCH 1/4] :art: Prevent frontend request pending https://github.com/siyuan-note/siyuan/issues/10992 --- kernel/sql/queue.go | 27 ++++++++++++++++++--------- kernel/sql/queue_asset_content.go | 20 ++++++++++---------- kernel/sql/queue_history.go | 8 ++++---- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/kernel/sql/queue.go b/kernel/sql/queue.go index ad22870df..289979e09 100644 --- a/kernel/sql/queue.go +++ b/kernel/sql/queue.go @@ -35,6 +35,7 @@ import ( var ( operationQueue []*dbQueueOperation dbQueueLock = sync.Mutex{} + txLock = sync.Mutex{} ) type dbQueueOperation struct { @@ -95,29 +96,30 @@ func ClearQueue() { } func FlushQueue() { - dbQueueLock.Lock() - defer dbQueueLock.Unlock() - - total := len(operationQueue) + ops := getOperations() + total := len(ops) if 1 > total { return } + txLock.Lock() + defer txLock.Unlock() + start := time.Now() context := map[string]interface{}{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBar} - if 512 < total { + if 512 < len(ops) { disableCache() defer enableCache() } groupOpsTotal := map[string]int{} - for _, op := range operationQueue { + for _, op := range ops { groupOpsTotal[op.action]++ } groupOpsCurrent := map[string]int{} - for i, op := range operationQueue { + for i, op := range ops { if util.IsExiting.Load() { return } @@ -150,8 +152,6 @@ func FlushQueue() { debug.FreeOSMemory() } - operationQueue = nil - elapsed := time.Now().Sub(start).Milliseconds() if 7000 < elapsed { logging.LogInfof("database op tx [%dms]", elapsed) @@ -418,3 +418,12 @@ func RemoveTreePathQueue(treeBox, treePathPrefix string) { } operationQueue = append(operationQueue, newOp) } + +func getOperations() (ops []*dbQueueOperation) { + dbQueueLock.Lock() + defer dbQueueLock.Unlock() + + ops = operationQueue + operationQueue = nil + return +} diff --git a/kernel/sql/queue_asset_content.go b/kernel/sql/queue_asset_content.go index 08b7c839e..67eb955dd 100644 --- a/kernel/sql/queue_asset_content.go +++ b/kernel/sql/queue_asset_content.go @@ -33,8 +33,7 @@ import ( var ( assetContentOperationQueue []*assetContentDBQueueOperation assetContentDBQueueLock = sync.Mutex{} - - assetContentTxLock = sync.Mutex{} + assetContentTxLock = sync.Mutex{} ) type assetContentDBQueueOperation struct { @@ -51,7 +50,8 @@ func FlushAssetContentTxJob() { func FlushAssetContentQueue() { ops := getAssetContentOperations() - if 1 > len(ops) { + total := len(ops) + if 1 > total { return } @@ -97,7 +97,7 @@ func FlushAssetContentQueue() { } } - if 128 < len(ops) { + if 128 < total { debug.FreeOSMemory() } @@ -122,24 +122,24 @@ func execAssetContentOp(op *assetContentDBQueueOperation, tx *sql.Tx, context ma } func DeleteAssetContentsByPathQueue(path string) { - assetContentTxLock.Lock() - defer assetContentTxLock.Unlock() + assetContentDBQueueLock.Lock() + defer assetContentDBQueueLock.Unlock() newOp := &assetContentDBQueueOperation{inQueueTime: time.Now(), action: "deletePath", path: path} assetContentOperationQueue = append(assetContentOperationQueue, newOp) } func IndexAssetContentsQueue(assetContents []*AssetContent) { - assetContentTxLock.Lock() - defer assetContentTxLock.Unlock() + assetContentDBQueueLock.Lock() + defer assetContentDBQueueLock.Unlock() newOp := &assetContentDBQueueOperation{inQueueTime: time.Now(), action: "index", assetContents: assetContents} assetContentOperationQueue = append(assetContentOperationQueue, newOp) } func getAssetContentOperations() (ops []*assetContentDBQueueOperation) { - assetContentTxLock.Lock() - defer assetContentTxLock.Unlock() + assetContentDBQueueLock.Lock() + defer assetContentDBQueueLock.Unlock() ops = assetContentOperationQueue assetContentOperationQueue = nil diff --git a/kernel/sql/queue_history.go b/kernel/sql/queue_history.go index a0338e0b9..418a82160 100644 --- a/kernel/sql/queue_history.go +++ b/kernel/sql/queue_history.go @@ -33,8 +33,7 @@ import ( var ( historyOperationQueue []*historyDBQueueOperation historyDBQueueLock = sync.Mutex{} - - historyTxLock = sync.Mutex{} + historyTxLock = sync.Mutex{} ) type historyDBQueueOperation struct { @@ -51,7 +50,8 @@ func FlushHistoryTxJob() { func FlushHistoryQueue() { ops := getHistoryOperations() - if 1 > len(ops) { + total := len(ops) + if 1 > total { return } @@ -97,7 +97,7 @@ func FlushHistoryQueue() { } } - if 128 < len(ops) { + if 128 < total { debug.FreeOSMemory() } From 3a852fd1ab5f0daa98a036196d6552499d3fb0f1 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 12 Apr 2024 21:55:53 +0800 Subject: [PATCH 2/4] :bug: Hyperlinks affect backlink calculation issue https://github.com/siyuan-note/siyuan/issues/11001 --- kernel/model/backlink.go | 7 ++++--- kernel/model/search.go | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/kernel/model/backlink.go b/kernel/model/backlink.go index 10a67c96c..d323d7494 100644 --- a/kernel/model/backlink.go +++ b/kernel/model/backlink.go @@ -521,12 +521,13 @@ func buildLinkRefs(defRootID string, refs []*sql.Ref, keyword string) (ret []*Bl for parentID, _ := range parentRefParagraphs { paragraphParentIDs = append(paragraphParentIDs, parentID) } - paragraphParents := sql.GetBlocks(paragraphParentIDs) + sqlParagraphParents := sql.GetBlocks(paragraphParentIDs) + paragraphParents := fromSQLBlocks(&sqlParagraphParents, "", 12) processedParagraphs := hashset.New() for _, p := range paragraphParents { // 改进标题下方块和列表项子块引用时的反链定位 https://github.com/siyuan-note/siyuan/issues/7484 - if "i" == p.Type { + if "NodeListItem" == p.Type { refBlock := parentRefParagraphs[p.ID] if nil != refBlock && p.FContent == refBlock.Content { // 使用内容判断是否是列表项下第一个子块 // 如果是列表项下第一个子块,则后续会通过列表项传递或关联处理,所以这里就不处理这个段落了 @@ -535,7 +536,7 @@ func buildLinkRefs(defRootID string, refs []*sql.Ref, keyword string) (ret []*Bl refsCount-- continue } - ret = append(ret, fromSQLBlock(p, "", 12)) + ret = append(ret, p) } } } diff --git a/kernel/model/search.go b/kernel/model/search.go index a026ec60f..76c65381a 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -1339,7 +1339,7 @@ func fromSQLBlock(sqlBlock *sql.Block, terms string, beforeLen int) (block *Bloc content, _ = markSearch(content, terms, beforeLen) content = maxContent(content, 5120) markdown := maxContent(sqlBlock.Markdown, 5120) - + fContent := util.EscapeHTML(sqlBlock.FContent) // fContent 会用于和 content 对比,在反链计算时用于判断是否是列表项下第一个子块,所以也需要转义 https://github.com/siyuan-note/siyuan/issues/11001 block = &Block{ Box: sqlBlock.Box, Path: sqlBlock.Path, @@ -1351,7 +1351,7 @@ func fromSQLBlock(sqlBlock *sql.Block, terms string, beforeLen int) (block *Bloc Memo: sqlBlock.Memo, Tag: sqlBlock.Tag, Content: content, - FContent: sqlBlock.FContent, + FContent: fContent, Markdown: markdown, Type: treenode.FromAbbrType(sqlBlock.Type), SubType: sqlBlock.SubType, From 9be6c4caa356114c9f7f1dfc5dcc4c7ede6a0fc4 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 12 Apr 2024 23:00:19 +0800 Subject: [PATCH 3/4] :art: Improve default search type filtering https://github.com/siyuan-note/siyuan/issues/11003 --- kernel/conf/search.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/conf/search.go b/kernel/conf/search.go index 1eb93f396..5223451d3 100644 --- a/kernel/conf/search.go +++ b/kernel/conf/search.go @@ -69,21 +69,21 @@ func NewSearch() *Search { return &Search{ Document: true, Heading: true, - List: true, - ListItem: true, + List: false, + ListItem: false, CodeBlock: true, MathBlock: true, Table: true, - Blockquote: true, - SuperBlock: true, + Blockquote: false, + SuperBlock: false, Paragraph: true, HTMLBlock: true, EmbedBlock: false, DatabaseBlock: true, - AudioBlock: true, - VideoBlock: true, - IFrameBlock: true, - WidgetBlock: true, + AudioBlock: false, + VideoBlock: false, + IFrameBlock: false, + WidgetBlock: false, Limit: 64, CaseSensitive: false, From 620be3572d0a3a5fbfc413c3c279a21078c7446d Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Fri, 12 Apr 2024 23:26:43 +0800 Subject: [PATCH 4/4] :bug: Dynamic loading results in incomplete list display https://github.com/siyuan-note/siyuan/issues/11004 --- kernel/model/file.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kernel/model/file.go b/kernel/model/file.go index 1083cb7b3..61fe8c76c 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -43,7 +43,6 @@ import ( "github.com/siyuan-note/riff" "github.com/siyuan-note/siyuan/kernel/av" "github.com/siyuan-note/siyuan/kernel/cache" - "github.com/siyuan-note/siyuan/kernel/conf" "github.com/siyuan-note/siyuan/kernel/filesys" "github.com/siyuan-note/siyuan/kernel/search" "github.com/siyuan-note/siyuan/kernel/sql" @@ -762,7 +761,7 @@ func GetDoc(startID, endID, id string, index int, query string, queryTypes map[s childCount += treenode.CountBlockNodes(n) } - if childCount > Conf.Editor.DynamicLoadBlocks && blockCount > conf.MinDynamicLoadBlocks { + if childCount > Conf.Editor.DynamicLoadBlocks { scroll = true return ast.WalkStop }