diff --git a/kernel/main.go b/kernel/main.go index 0d2948665..a1021717a 100644 --- a/kernel/main.go +++ b/kernel/main.go @@ -48,7 +48,6 @@ func main() { util.PushClearAllMsg() job.StartCron() - go model.CheckIndex() go model.AutoGenerateDocHistory() go cache.LoadAssets() go util.CheckFileSysStatus() diff --git a/kernel/mobile/kernel.go b/kernel/mobile/kernel.go index 8ecd3d9f7..38804f48c 100644 --- a/kernel/mobile/kernel.go +++ b/kernel/mobile/kernel.go @@ -64,7 +64,6 @@ func StartKernel(container, appDir, workspaceBaseDir, timezoneID, localIPs, lang util.PushClearAllMsg() job.StartCron() - go model.CheckIndex() go model.AutoGenerateDocHistory() go cache.LoadAssets() }() diff --git a/kernel/model/index_fix.go b/kernel/model/index_fix.go index 8174ea0ff..87bc07fa2 100644 --- a/kernel/model/index_fix.go +++ b/kernel/model/index_fix.go @@ -24,6 +24,7 @@ import ( "runtime/debug" "strings" "sync" + "sync/atomic" "time" "github.com/88250/gulu" @@ -40,8 +41,18 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) -// CheckIndex 自动校验数据库索引 https://github.com/siyuan-note/siyuan/issues/7016 https://github.com/siyuan-note/siyuan/issues/10563 -func CheckIndex() { +var ( + checkIndexPerformed = atomic.Bool{} +) + +// checkIndex 自动校验数据库索引,仅在数据同步执行完成后执行一次。 +func checkIndex() { + if checkIndexPerformed.Load() { + return + } + + logging.LogInfof("start checking index...") + task.AppendTask(task.DatabaseIndexFix, removeDuplicateDatabaseIndex) sql.WaitForWritingDatabase() @@ -61,6 +72,9 @@ func CheckIndex() { util.PushStatusBar(Conf.Language(185)) }) debug.FreeOSMemory() + logging.LogInfof("finish checking index") + + checkIndexPerformed.Store(true) } var autoFixLock = sync.Mutex{} diff --git a/kernel/model/repository.go b/kernel/model/repository.go index bfc7569f1..6ae130469 100644 --- a/kernel/model/repository.go +++ b/kernel/model/repository.go @@ -1330,6 +1330,9 @@ func syncRepo(exit, byHand bool) (dataChanged bool, err error) { autoSyncErrCount = 0 processSyncMergeResult(exit, byHand, mergeResult, trafficStat, "a", elapsed) + + // 首次数据同步执行完成后再执行索引订正 Index fixing should not be performed before data synchronization https://github.com/siyuan-note/siyuan/issues/10761 + checkIndex() return }