Browse Source

:art: 重建历史索引遮罩 https://github.com/siyuan-note/siyuan/issues/7386

Liang Ding 2 năm trước cách đây
mục cha
commit
9b4a6eb577
2 tập tin đã thay đổi với 27 bổ sung2 xóa
  1. 2 1
      kernel/model/history.go
  2. 25 1
      kernel/sql/queue_history.go

+ 2 - 1
kernel/model/history.go

@@ -582,8 +582,9 @@ func ReindexHistory() (err error) {
 
 		name := historyDir.Name()
 		indexHistoryDir(name, lutEngine)
-		util.PushEndlessProgress(fmt.Sprintf(Conf.Language(40), name))
 	}
+
+	sql.WaitForWritingHistoryDatabase()
 	return
 }
 

+ 25 - 1
kernel/sql/queue_history.go

@@ -59,7 +59,7 @@ func FlushHistoryQueue() {
 	defer txLock.Unlock()
 	start := time.Now()
 
-	context := map[string]interface{}{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBar}
+	context := map[string]interface{}{eventbus.CtxPushMsg: eventbus.CtxPushMsgToStatusBarAndProgress}
 	total := len(ops)
 	for i, op := range ops {
 		if util.IsExiting {
@@ -137,3 +137,27 @@ func getHistoryOperations() (ops []*historyDBQueueOperation) {
 	historyOperationQueue = nil
 	return
 }
+
+func WaitForWritingHistoryDatabase() {
+	var printLog bool
+	var lastPrintLog bool
+	for i := 0; isWritingHistoryDatabase(); i++ {
+		time.Sleep(50 * time.Millisecond)
+		if 200 < i && !printLog { // 10s 后打日志
+			logging.LogWarnf("history database is writing: \n%s", logging.ShortStack())
+			printLog = true
+		}
+		if 1200 < i && !lastPrintLog { // 60s 后打日志
+			logging.LogWarnf("history database is still writing")
+			lastPrintLog = true
+		}
+	}
+}
+
+func isWritingHistoryDatabase() bool {
+	time.Sleep(util.SQLFlushInterval + 50*time.Millisecond)
+	if 0 < len(historyOperationQueue) || util.IsMutexLocked(&historyTxLock) {
+		return true
+	}
+	return false
+}