Backups: Add config option to limit the number of backups to keep #4243

PHOTOPRISM_BACKUP_RETAIN lets to specify the number of index database
dumps to keep (backup filenames are in the format "YYYY-MM-DD.sql").

Signed-off-by: Michael Mayer <michael@photoprism.app>
This commit is contained in:
Michael Mayer
2024-05-12 17:44:33 +02:00
parent 0e7c91f1b6
commit 1fe0bab4c1
10 changed files with 221 additions and 146 deletions

View File

@@ -26,13 +26,13 @@ func NewBackup(conf *config.Config) *Backup {
// StartScheduled starts a scheduled run of the backup worker based on the current configuration.
func (w *Backup) StartScheduled() {
if err := w.Start(w.conf.BackupIndex(), w.conf.BackupAlbums(), true); err != nil {
if err := w.Start(w.conf.BackupIndex(), w.conf.BackupAlbums(), true, w.conf.BackupRetain()); err != nil {
log.Errorf("scheduler: %s (backup)", err)
}
}
// Start creates index and album backups based on the current configuration.
func (w *Backup) Start(index, albums, force bool) (err error) {
func (w *Backup) Start(index, albums bool, force bool, retain int) (err error) {
defer func() {
if r := recover(); r != nil {
err = fmt.Errorf("backup: %s (worker panic)\nstack: %s", r, debug.Stack())
@@ -67,8 +67,8 @@ func (w *Backup) Start(index, albums, force bool) (err error) {
// Create index database backup.
if !index {
// Skip.
} else if err = photoprism.BackupIndex(backupPath, "", false, force); err != nil {
log.Errorf("backup: %s (backup index)", err)
} else if err = photoprism.BackupIndex(backupPath, "", false, force, retain); err != nil {
log.Errorf("backup: %s (index)", err)
}
if mutex.BackupWorker.Canceled() {
@@ -79,7 +79,7 @@ func (w *Backup) Start(index, albums, force bool) (err error) {
if !albums {
// Skip.
} else if count, backupErr := photoprism.BackupAlbums(w.conf.AlbumsPath(), force); backupErr != nil {
log.Errorf("backup: %s (backup albums)", backupErr.Error())
log.Errorf("backup: %s (albums)", backupErr.Error())
} else if count > 0 {
log.Debugf("backup: %d albums saved as yaml files", count)
}