diff --git a/client/pages/config/backups.vue b/client/pages/config/backups.vue
index f6adb3f2..20b3beda 100644
--- a/client/pages/config/backups.vue
+++ b/client/pages/config/backups.vue
@@ -20,6 +20,12 @@
Number of backups to keep
+
+
+
+
Maximum backup size (in GB)
+
+
@@ -32,6 +38,7 @@ export default {
updatingServerSettings: false,
dailyBackups: true,
backupsToKeep: 2,
+ maxBackupSize: 1,
newServerSettings: {}
}
},
@@ -53,13 +60,18 @@ export default {
},
methods: {
updateBackupsSettings() {
+ if (isNaN(this.maxBackupSize) || this.maxBackupSize <= 0) {
+ this.$toast.error('Invalid maximum backup size')
+ return
+ }
if (isNaN(this.backupsToKeep) || this.backupsToKeep <= 0 || this.backupsToKeep > 99) {
this.$toast.error('Invalid number of backups to keep')
return
}
var updatePayload = {
backupSchedule: this.dailyBackups ? '0 1 * * *' : false,
- backupsToKeep: Number(this.backupsToKeep)
+ backupsToKeep: Number(this.backupsToKeep),
+ maxBackupSize: Number(this.maxBackupSize)
}
this.updateServerSettings(updatePayload)
},
@@ -81,6 +93,7 @@ export default {
this.backupsToKeep = this.newServerSettings.backupsToKeep || 2
this.dailyBackups = !!this.newServerSettings.backupSchedule
+ this.maxBackupSize = this.newServerSettings.maxBackupSize || 1
}
},
mounted() {
diff --git a/server/managers/BackupManager.js b/server/managers/BackupManager.js
index 9c1002cd..472fdd9b 100644
--- a/server/managers/BackupManager.js
+++ b/server/managers/BackupManager.js
@@ -23,9 +23,6 @@ class BackupManager {
this.scheduleTask = null
this.backups = []
-
- // If backup exceeds this value it will be aborted
- this.MaxBytesBeforeAbort = 1000000000 // ~ 1GB
}
get serverSettings() {
@@ -263,7 +260,7 @@ class BackupManager {
reject(err)
})
archive.on('progress', ({ fs: fsobj }) => {
- if (fsobj.processedBytes > this.MaxBytesBeforeAbort) {
+ if (fsobj.processedBytes > this.serverSettings.maxBackupSize * 1000 * 1000 * 1000) {
Logger.error(`[BackupManager] Archiver is too large - aborting to prevent endless loop, Bytes Processed: ${fsobj.processedBytes}`)
archive.abort()
setTimeout(() => {
diff --git a/server/objects/settings/ServerSettings.js b/server/objects/settings/ServerSettings.js
index 86cb33fb..7be8f9de 100644
--- a/server/objects/settings/ServerSettings.js
+++ b/server/objects/settings/ServerSettings.js
@@ -29,6 +29,7 @@ class ServerSettings {
// this.backupSchedule = '0 1 * * *' // If false then auto-backups are disabled (default every day at 1am)
this.backupSchedule = false
this.backupsToKeep = 2
+ this.maxBackupSize = 1
this.backupMetadataCovers = true
// Logger
@@ -78,6 +79,7 @@ class ServerSettings {
this.backupSchedule = settings.backupSchedule || false
this.backupsToKeep = settings.backupsToKeep || 2
+ this.maxBackupSize = settings.maxBackupSize || 1
this.backupMetadataCovers = settings.backupMetadataCovers !== false
this.loggerDailyLogsToKeep = settings.loggerDailyLogsToKeep || 7
@@ -114,6 +116,7 @@ class ServerSettings {
rateLimitLoginWindow: this.rateLimitLoginWindow,
backupSchedule: this.backupSchedule,
backupsToKeep: this.backupsToKeep,
+ maxBackupSize: this.maxBackupSize,
backupMetadataCovers: this.backupMetadataCovers,
loggerDailyLogsToKeep: this.loggerDailyLogsToKeep,
loggerScannerLogsToKeep: this.loggerScannerLogsToKeep,