Selaa lähdekoodia

Update DB WAL before backup #1300

Alireza Ahmadi 1 vuosi sitten
vanhempi
commit
6411facf6a
3 muutettua tiedostoa jossa 21 lisäystä ja 0 poistoa
  1. 9 0
      database/db.go
  2. 5 0
      web/service/server.go
  3. 7 0
      web/service/tgbot.go

+ 9 - 0
database/db.go

@@ -112,3 +112,12 @@ func IsSQLiteDB(file io.ReaderAt) (bool, error) {
 	}
 	return bytes.Equal(buf, signature), nil
 }
+
+func Checkpoint() error {
+	// Update WAL
+	err := db.Exec("PRAGMA wal_checkpoint;").Error
+	if err != nil {
+		return err
+	}
+	return nil
+}

+ 5 - 0
web/service/server.go

@@ -435,6 +435,11 @@ func (s *ServerService) GetConfigJson() (interface{}, error) {
 }
 
 func (s *ServerService) GetDb() ([]byte, error) {
+	// Update by manually trigger a checkpoint operation
+	err := database.Checkpoint()
+	if err != nil {
+		return nil, err
+	}
 	// Open the file for reading
 	file, err := os.Open(config.GetDBPath())
 	if err != nil {

+ 7 - 0
web/service/tgbot.go

@@ -9,6 +9,7 @@ import (
 	"strings"
 	"time"
 	"x-ui/config"
+	"x-ui/database"
 	"x-ui/database/model"
 	"x-ui/logger"
 	"x-ui/util/common"
@@ -1417,6 +1418,12 @@ func (t *Tgbot) sendBackup(chatId int64) {
 	output := t.I18nBot("tgbot.messages.backupTime", "Time=="+time.Now().Format("2006-01-02 15:04:05"))
 	t.SendMsgToTgbot(chatId, output)
 
+	// Update by manually trigger a checkpoint operation
+	err := database.Checkpoint()
+	if err != nil {
+		logger.Warning("Error in trigger a checkpoint operation: ", err)
+	}
+
 	file, err := os.Open(config.GetDBPath())
 	if err != nil {
 		logger.Warning("Error in opening db file for backup: ", err)