Add removal of old consolidated backups

This commit is contained in:
Ryan Huffman 2018-03-22 10:07:47 -07:00
parent dc694fb0b7
commit 5485f60677
2 changed files with 36 additions and 2 deletions

View file

@ -64,6 +64,11 @@ DomainContentBackupManager::DomainContentBackupManager(const QString& backupDire
QDir(_backupDirectory).mkpath("."); QDir(_backupDirectory).mkpath(".");
parseBackupRules(backupRules); 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) { 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) { ConsolidatedBackupInfo DomainContentBackupManager::consolidateBackup(QString fileName) {
{ {
std::lock_guard<std::mutex> lock { _consolidatedBackupsMutex }; std::lock_guard<std::mutex> lock { _consolidatedBackupsMutex };
@ -511,7 +538,8 @@ ConsolidatedBackupInfo DomainContentBackupManager::consolidateBackup(QString fil
return { return {
ConsolidatedBackupInfo::CONSOLIDATING, ConsolidatedBackupInfo::CONSOLIDATING,
"", "",
"" "",
std::chrono::system_clock::now()
}; };
} }
@ -537,7 +565,8 @@ void DomainContentBackupManager::consolidateBackupInternal(QString fileName) {
_consolidatedBackups[fileName] = { _consolidatedBackups[fileName] = {
ConsolidatedBackupInfo::CONSOLIDATING, ConsolidatedBackupInfo::CONSOLIDATING,
"", "",
"" "",
std::chrono::system_clock::now()
}; };
} }

View file

@ -20,6 +20,7 @@
#include <QString> #include <QString>
#include <QVector> #include <QVector>
#include <QDateTime> #include <QDateTime>
#include <QTimer>
#include <mutex> #include <mutex>
#include <unordered_map> #include <unordered_map>
@ -52,6 +53,7 @@ struct ConsolidatedBackupInfo {
State state; State state;
QString error; QString error;
QString absoluteFilePath; QString absoluteFilePath;
std::chrono::system_clock::time_point createdAt;
}; };
class DomainContentBackupManager : public GenericThread { class DomainContentBackupManager : public GenericThread {
@ -108,9 +110,12 @@ protected:
bool recoverFromBackupZip(const QString& backupName, QuaZip& backupZip); bool recoverFromBackupZip(const QString& backupName, QuaZip& backupZip);
private slots: private slots:
void removeOldConsolidatedBackups();
void consolidateBackupInternal(QString fileName); void consolidateBackupInternal(QString fileName);
private: private:
QTimer _consolidatedBackupCleanupTimer;
const QString _consolidatedBackupDirectory; const QString _consolidatedBackupDirectory;
const QString _backupDirectory; const QString _backupDirectory;
std::vector<BackupHandlerPointer> _backupHandlers; std::vector<BackupHandlerPointer> _backupHandlers;