From 03e14340518f50e76ec6abe154d2f59137f45ba1 Mon Sep 17 00:00:00 2001 From: Alireza Ahmadi Date: Fri, 8 Dec 2023 01:26:51 +0100 Subject: [PATCH] Update DB WAL before backup --- database/db.go | 9 +++++++++ web/service/server.go | 5 +++++ web/service/tgbot.go | 9 ++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/database/db.go b/database/db.go index 54d64031..596b0022 100644 --- a/database/db.go +++ b/database/db.go @@ -110,3 +110,12 @@ func IsSQLiteDB(file io.Reader) (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 ef2509c4..e90ced6b 100644 --- a/web/service/server.go +++ b/web/service/server.go @@ -418,6 +418,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 7a6b2db1..7c8d4683 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" @@ -697,12 +698,18 @@ func (t *Tgbot) sendBackup(chatId int64) { return } + // Update by manually trigger a checkpoint operation + err := database.Checkpoint() + if err != nil { + logger.Warning("Error in trigger a checkpoint operation: ", err) + } + output := t.I18nBot("tgbot.messages.backupTime", "Time=="+time.Now().Format("2006-01-02 15:04:05")) t.SendMsgToTgbot(chatId, output) file := tgbotapi.FilePath(config.GetDBPath()) msg := tgbotapi.NewDocument(chatId, file) - _, err := bot.Send(msg) + _, err = bot.Send(msg) if err != nil { logger.Warning("Error in uploading backup: ", err) }