From 18b81786084c3e59db7e69ae2cfff4eaf7261927 Mon Sep 17 00:00:00 2001 From: Rostislav Dugin Date: Thu, 2 Apr 2026 09:48:05 +0300 Subject: [PATCH] FIX (backups): Save metadata file to storage before marking backup as COMPLETED to fix flaky test race condition --- .../features/backups/backups/backuping/backuper.go | 14 +++++++------- .../backups/backups/controllers/controller_test.go | 7 ++++--- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/backend/internal/features/backups/backups/backuping/backuper.go b/backend/internal/features/backups/backups/backuping/backuper.go index 5a98ed1..1343245 100644 --- a/backend/internal/features/backups/backups/backuping/backuper.go +++ b/backend/internal/features/backups/backups/backuping/backuper.go @@ -280,7 +280,6 @@ func (n *BackuperNode) MakeBackup(backupID uuid.UUID, isCallNotifier bool) { return } - backup.Status = backups_core.BackupStatusCompleted backup.BackupDurationMs = time.Since(start).Milliseconds() // Update backup with encryption metadata if provided @@ -297,12 +296,6 @@ func (n *BackuperNode) MakeBackup(backupID uuid.UUID, isCallNotifier bool) { backup.Encryption = backupMetadata.Encryption } - if err := n.backupRepository.Save(backup); err != nil { - n.logger.Error("Failed to save backup", "error", err) - return - } - - // Save metadata file to storage if backupMetadata != nil { metadataJSON, err := json.Marshal(backupMetadata) if err != nil { @@ -335,6 +328,13 @@ func (n *BackuperNode) MakeBackup(backupID uuid.UUID, isCallNotifier bool) { } } + backup.Status = backups_core.BackupStatusCompleted + + if err := n.backupRepository.Save(backup); err != nil { + n.logger.Error("Failed to save backup", "error", err) + return + } + // Update database last backup time now := time.Now().UTC() if updateErr := n.databaseService.SetLastBackupTime(databaseID, now); updateErr != nil { diff --git a/backend/internal/features/backups/backups/controllers/controller_test.go b/backend/internal/features/backups/backups/controllers/controller_test.go index 82b1edc..360a1a8 100644 --- a/backend/internal/features/backups/backups/controllers/controller_test.go +++ b/backend/internal/features/backups/backups/controllers/controller_test.go @@ -17,6 +17,7 @@ import ( "github.com/gin-gonic/gin" "github.com/google/uuid" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "databasus-backend/internal/config" audit_logs "databasus-backend/internal/features/audit_logs" @@ -1516,14 +1517,14 @@ func Test_MakeBackup_VerifyBackupAndMetadataFilesExistInStorage(t *testing.T) { encryptor := encryption.GetFieldEncryptor() backupFile, err := backupStorage.GetFile(encryptor, backup.FileName) - assert.NoError(t, err) + require.NoError(t, err) backupFile.Close() metadataFile, err := backupStorage.GetFile(encryptor, backup.FileName+".metadata") - assert.NoError(t, err) + require.NoError(t, err) metadataContent, err := io.ReadAll(metadataFile) - assert.NoError(t, err) + require.NoError(t, err) metadataFile.Close() var storageMetadata backups_common.BackupMetadata