diff --git a/CHANGES b/CHANGES index 9769d3d89..eed4b8e4d 100644 --- a/CHANGES +++ b/CHANGES @@ -2457,4 +2457,5 @@ * Check if CNAME record exists and remove it if overwrite is set * cifs: use credentials file for better password support * installer: rework script to fix DNS resolution issues +* backup cleaner: do not clean if not mounted diff --git a/src/backupcleaner.js b/src/backupcleaner.js index 3dce352b2..6bba62ed1 100644 --- a/src/backupcleaner.js +++ b/src/backupcleaner.js @@ -1,5 +1,7 @@ 'use strict'; +const BoxError = require('./boxerror.js'); + exports = module.exports = { run, @@ -12,6 +14,7 @@ const apps = require('./apps.js'), constants = require('./constants.js'), debug = require('debug')('box:backupcleaner'), moment = require('moment'), + mounts = require('./mounts.js'), path = require('path'), paths = require('./paths.js'), safe = require('safetydance'), @@ -282,6 +285,13 @@ async function run(progressCallback) { const backupConfig = await settings.getBackupConfig(); + if (mounts.isManagedProvider(backupConfig.provider) || backupConfig.provider === 'mountpoint') { + const hostPath = mounts.isManagedProvider(backupConfig.provider) ? paths.MANAGED_BACKUP_MOUNT_DIR : backupConfig.mountPoint; + const status = await mounts.getStatus(backupConfig.provider, hostPath); // { state, message } + debug(`clean: mount point status is ${JSON.stringify(status)}`); + if (status.state !== 'active') throw new BoxError(BoxError.MOUNT_ERROR, `Backup endpoint is not mounted: ${status.message}`); + } + if (backupConfig.retentionPolicy.keepWithinSecs < 0) { debug('cleanup: keeping all backups'); return {}; diff --git a/src/settings.js b/src/settings.js index 9bf4d6ac9..6974f3f2e 100644 --- a/src/settings.js +++ b/src/settings.js @@ -405,10 +405,9 @@ async function getBackupConfig() { const backupConfig = JSON.parse(value); // provider, token, password, region, prefix, bucket - if (mounts.isManagedProvider(backupConfig.provider)) { - backupConfig.mountStatus = await mounts.getStatus(backupConfig.provider, paths.MANAGED_BACKUP_MOUNT_DIR); // { state, message } - } else if (backupConfig.provider === 'mountpoint') { - backupConfig.mountStatus = await mounts.getStatus(backupConfig.provider, backupConfig.mountPoint); // { state, message } + if (mounts.isManagedProvider(backupConfig.provider) || backupConfig.provider === 'mountpoint') { + const hostPath = mounts.isManagedProvider(backupConfig.provider) ? paths.MANAGED_BACKUP_MOUNT_DIR : backupConfig.mountPoint; + backupConfig.mountStatus = await mounts.getStatus(backupConfig.provider, hostPath); // { state, message } } return backupConfig;