Преглед на файлове

:bug: Index fixing should not be performed before data synchronization https://github.com/siyuan-note/siyuan/issues/10761

Daniel преди 1 година
родител
ревизия
0322e022f1
променени са 4 файла, в които са добавени 19 реда и са изтрити 4 реда
  1. 0 1
      kernel/main.go
  2. 0 1
      kernel/mobile/kernel.go
  3. 16 2
      kernel/model/index_fix.go
  4. 3 0
      kernel/model/repository.go

+ 0 - 1
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()

+ 0 - 1
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()
 	}()

+ 16 - 2
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{}

+ 3 - 0
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
 }