From 1bc32c584b60bfd0f5faa06ea653440250abfe31 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 20 May 2024 10:15:50 +0800 Subject: [PATCH] :art: Index fixing should not be performed before data synchronization https://github.com/siyuan-note/siyuan/issues/10761 --- kernel/model/index_fix.go | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/kernel/model/index_fix.go b/kernel/model/index_fix.go index ef3a867c1..819024a5a 100644 --- a/kernel/model/index_fix.go +++ b/kernel/model/index_fix.go @@ -24,7 +24,6 @@ import ( "runtime/debug" "strings" "sync" - "sync/atomic" "time" "github.com/88250/gulu" @@ -42,39 +41,35 @@ import ( ) var ( - checkIndexPerformed = atomic.Bool{} + checkIndexOnce = sync.Once{} ) // checkIndex 自动校验数据库索引,仅在数据同步执行完成后执行一次。 func checkIndex() { - if checkIndexPerformed.Load() { - return - } + checkIndexOnce.Do(func() { + logging.LogInfof("start checking index...") - logging.LogInfof("start checking index...") + task.AppendTask(task.DatabaseIndexFix, removeDuplicateDatabaseIndex) + sql.WaitForWritingDatabase() - task.AppendTask(task.DatabaseIndexFix, removeDuplicateDatabaseIndex) - sql.WaitForWritingDatabase() + task.AppendTask(task.DatabaseIndexFix, resetDuplicateBlocksOnFileSys) - task.AppendTask(task.DatabaseIndexFix, resetDuplicateBlocksOnFileSys) + task.AppendTask(task.DatabaseIndexFix, fixBlockTreeByFileSys) + sql.WaitForWritingDatabase() - task.AppendTask(task.DatabaseIndexFix, fixBlockTreeByFileSys) - sql.WaitForWritingDatabase() + task.AppendTask(task.DatabaseIndexFix, fixDatabaseIndexByBlockTree) + sql.WaitForWritingDatabase() - task.AppendTask(task.DatabaseIndexFix, fixDatabaseIndexByBlockTree) - sql.WaitForWritingDatabase() + task.AppendTask(task.DatabaseIndexFix, removeDuplicateDatabaseRefs) - task.AppendTask(task.DatabaseIndexFix, removeDuplicateDatabaseRefs) + // 后面要加任务的话记得修改推送任务栏的进度 util.PushStatusBar(fmt.Sprintf(Conf.Language(58), 1, 5)) - // 后面要加任务的话记得修改推送任务栏的进度 util.PushStatusBar(fmt.Sprintf(Conf.Language(58), 1, 5)) - - task.AppendTask(task.DatabaseIndexFix, func() { - util.PushStatusBar(Conf.Language(185)) + task.AppendTask(task.DatabaseIndexFix, func() { + util.PushStatusBar(Conf.Language(185)) + }) + debug.FreeOSMemory() + logging.LogInfof("finish checking index") }) - debug.FreeOSMemory() - logging.LogInfof("finish checking index") - - checkIndexPerformed.Store(true) } var autoFixLock = sync.Mutex{}