From 6411facf6af1ad1ad264f0e73303d472cc004635 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Fri, 8 Dec 2023 20:35:10 +0100 Subject: [PATCH] Update DB WAL before backup #1300 --- database/db.go | 9 +++++++++ web/service/server.go | 5 +++++ web/service/tgbot.go | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/database/db.go b/database/db.go index aaeb8bd9be..8bd0fb493a 100644 --- a/database/db.go +++ b/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 +} diff --git a/web/service/server.go b/web/service/server.go index 629d92531d..49e6a2c019 100644 --- a/web/service/server.go +++ b/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 { diff --git a/web/service/tgbot.go b/web/service/tgbot.go index b54ceb1c38..0847e418e8 100644 --- a/web/service/tgbot.go +++ b/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)