From 5485f606771f9673da3958cadc7ccbf6db649de2 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Thu, 22 Mar 2018 10:07:47 -0700 Subject: [PATCH] Add removal of old consolidated backups --- .../src/DomainContentBackupManager.cpp | 33 +++++++++++++++++-- .../src/DomainContentBackupManager.h | 5 +++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/domain-server/src/DomainContentBackupManager.cpp b/domain-server/src/DomainContentBackupManager.cpp index 7dfb469a32..518ed73f9e 100644 --- a/domain-server/src/DomainContentBackupManager.cpp +++ b/domain-server/src/DomainContentBackupManager.cpp @@ -64,6 +64,11 @@ DomainContentBackupManager::DomainContentBackupManager(const QString& backupDire QDir(_backupDirectory).mkpath("."); parseBackupRules(backupRules); + + constexpr int CONSOLIDATED_BACKUP_CLEANER_INTERVAL_MSECS = 30 * 1000; + _consolidatedBackupCleanupTimer.setInterval(CONSOLIDATED_BACKUP_CLEANER_INTERVAL_MSECS); + connect(&_consolidatedBackupCleanupTimer, &QTimer::timeout, this, &DomainContentBackupManager::removeOldConsolidatedBackups); + _consolidatedBackupCleanupTimer.start(); } void DomainContentBackupManager::parseBackupRules(const QVariantList& backupRules) { @@ -498,6 +503,28 @@ void DomainContentBackupManager::backup() { } } +void DomainContentBackupManager::removeOldConsolidatedBackups() { + constexpr std::chrono::minutes MAX_TIME_TO_KEEP_CONSOLIDATED_BACKUP { 30 }; + auto now = std::chrono::system_clock::now(); + auto it = _consolidatedBackups.begin(); + while (it != _consolidatedBackups.end()) { + auto& backup = it->second; + auto diff = now - backup.createdAt; + if (diff > MAX_TIME_TO_KEEP_CONSOLIDATED_BACKUP) { + QFile oldBackup(backup.absoluteFilePath); + if (!oldBackup.exists() || oldBackup.remove()) { + qDebug() << "Removed old consolidated backup: " << backup.absoluteFilePath; + it = _consolidatedBackups.erase(it); + } else { + qDebug() << "Failed to remove old consolidated backup: " << backup.absoluteFilePath; + it++; + } + } else { + it++; + } + } +} + ConsolidatedBackupInfo DomainContentBackupManager::consolidateBackup(QString fileName) { { std::lock_guard lock { _consolidatedBackupsMutex }; @@ -511,7 +538,8 @@ ConsolidatedBackupInfo DomainContentBackupManager::consolidateBackup(QString fil return { ConsolidatedBackupInfo::CONSOLIDATING, "", - "" + "", + std::chrono::system_clock::now() }; } @@ -537,7 +565,8 @@ void DomainContentBackupManager::consolidateBackupInternal(QString fileName) { _consolidatedBackups[fileName] = { ConsolidatedBackupInfo::CONSOLIDATING, "", - "" + "", + std::chrono::system_clock::now() }; } diff --git a/domain-server/src/DomainContentBackupManager.h b/domain-server/src/DomainContentBackupManager.h index ef264e5541..2b07afe0b3 100644 --- a/domain-server/src/DomainContentBackupManager.h +++ b/domain-server/src/DomainContentBackupManager.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -52,6 +53,7 @@ struct ConsolidatedBackupInfo { State state; QString error; QString absoluteFilePath; + std::chrono::system_clock::time_point createdAt; }; class DomainContentBackupManager : public GenericThread { @@ -108,9 +110,12 @@ protected: bool recoverFromBackupZip(const QString& backupName, QuaZip& backupZip); private slots: + void removeOldConsolidatedBackups(); void consolidateBackupInternal(QString fileName); private: + QTimer _consolidatedBackupCleanupTimer; + const QString _consolidatedBackupDirectory; const QString _backupDirectory; std::vector _backupHandlers;