Use retentionSecs to cleanup backups

Part of #310
This commit is contained in:
Girish Ramakrishnan
2017-04-23 11:34:46 -07:00
parent a0e122e578
commit aeba8e8fd2
13 changed files with 101 additions and 90 deletions

View File

@@ -4,7 +4,7 @@ exports = module.exports = {
backup: backup,
restore: restore,
copyBackup: copyBackup,
removeBackup: removeBackup,
removeBackups: removeBackups,
backupDone: backupDone,
@@ -159,10 +159,9 @@ function copyBackup(apiConfig, oldBackupId, newBackupId, callback) {
});
}
function removeBackup(apiConfig, backupId, appBackupIds, callback) {
function removeBackups(apiConfig, backupIds, callback) {
assert.strictEqual(typeof apiConfig, 'object');
assert.strictEqual(typeof backupId, 'string');
assert(Array.isArray(appBackupIds));
assert(Array.isArray(backupIds));
assert.strictEqual(typeof callback, 'function');
getBackupCredentials(apiConfig, function (error, credentials) {
@@ -170,11 +169,17 @@ function removeBackup(apiConfig, backupId, appBackupIds, callback) {
var params = {
Bucket: apiConfig.bucket,
Key: getBackupFilePath(apiConfig, backupId)
Delete: {
Objects: [ ] // { Key }
}
};
backupIds.forEach(function (backupId) {
params.Delete.Objects.push({ Key: getBackupFilePath(apiConfig, backupId) });
});
var s3 = new AWS.S3(credentials);
s3.deleteObject(params, function (error) {
s3.deleteObjects(params, function (error) {
if (error) console.error('Unable to remove %s. Not fatal.', params.Key, error);
callback(null);
});

View File

@@ -4,7 +4,7 @@ exports = module.exports = {
backup: backup,
restore: restore,
copyBackup: copyBackup,
removeBackup: removeBackup,
removeBackups: removeBackups,
backupDone: backupDone,
@@ -136,19 +136,23 @@ function copyBackup(apiConfig, oldBackupId, newBackupId, callback) {
});
}
function removeBackup(apiConfig, backupId, appBackupIds, callback) {
function removeBackups(apiConfig, backupIds, callback) {
assert.strictEqual(typeof apiConfig, 'object');
assert.strictEqual(typeof backupId, 'string');
assert(Array.isArray(appBackupIds));
assert(Array.isArray(backupIds));
assert.strictEqual(typeof callback, 'function');
async.each([backupId].concat(appBackupIds), function (id, callback) {
async.eachSeries(backupIds, function (id, callback) {
var filePath = getBackupFilePath(apiConfig, id);
fs.unlink(filePath, function (error) {
if (error) console.error('Unable to remove %s. Not fatal.', filePath, error);
callback();
});
if (!safe.fs.unlinkSync(filePath)) {
debug('removeBackups: Unable to remove %s : %s', filePath, safe.error.message);
return callback();
}
safe.fs.rmdirSync(path.dirname(filePath)); // try to cleanup empty directories
callback();
}, callback);
}

View File

@@ -10,7 +10,7 @@ exports = module.exports = {
backup: backup,
restore: restore,
copyBackup: copyBackup,
removeBackup: removeBackup,
removeBackups: removeBackups,
backupDone: backupDone,
@@ -52,10 +52,9 @@ function copyBackup(apiConfig, oldBackupId, newBackupId, callback) {
callback(new Error('not implemented'));
}
function removeBackup(apiConfig, backupId, appBackupIds, callback) {
function removeBackups(apiConfig, backupIds, callback) {
assert.strictEqual(typeof apiConfig, 'object');
assert.strictEqual(typeof backupId, 'string');
assert(Array.isArray(appBackupIds));
assert(Array.isArray(backupIds));
assert.strictEqual(typeof callback, 'function');
// Result: none

View File

@@ -4,7 +4,7 @@ exports = module.exports = {
backup: backup,
restore: restore,
copyBackup: copyBackup,
removeBackup: removeBackup,
removeBackups: removeBackups,
backupDone: backupDone,
@@ -167,10 +167,9 @@ function copyBackup(apiConfig, oldBackupId, newBackupId, callback) {
});
}
function removeBackup(apiConfig, backupId, appBackupIds, callback) {
function removeBackups(apiConfig, backupIds, callback) {
assert.strictEqual(typeof apiConfig, 'object');
assert.strictEqual(typeof backupId, 'string');
assert(Array.isArray(appBackupIds));
assert(Array.isArray(backupIds));
assert.strictEqual(typeof callback, 'function');
getBackupCredentials(apiConfig, function (error, credentials) {
@@ -178,11 +177,17 @@ function removeBackup(apiConfig, backupId, appBackupIds, callback) {
var params = {
Bucket: apiConfig.bucket,
Key: getBackupFilePath(apiConfig, backupId)
Delete: {
Objects: [ ] // { Key }
}
};
backupIds.forEach(function (backupId) {
params.Delete.Objects.push({ Key: getBackupFilePath(apiConfig, backupId) });
});
var s3 = new AWS.S3(credentials);
s3.deleteObject(params, function (error) {
s3.deleteObjects(params, function (error) {
if (error) console.error('Unable to remove %s. Not fatal.', params.Key, error);
callback(null);
});