|
@@ -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
|
|
|
+}
|