diff --git a/migrations/20160330215005-backups-add-configJson.js b/migrations/20160330215005-backups-add-configJson.js new file mode 100644 index 000000000..b101d227a --- /dev/null +++ b/migrations/20160330215005-backups-add-configJson.js @@ -0,0 +1,17 @@ +var dbm = global.dbm || require('db-migrate'); +var type = dbm.dataType; + +exports.up = function(db, callback) { + db.runSql('ALTER TABLE backups ADD COLUMN configJson TEXT', function (error) { + if (error) console.error(error); + callback(error); + }); +}; + +exports.down = function(db, callback) { + db.runSql('ALTER TABLE backups DROP COLUMN configJson', function (error) { + if (error) console.error(error); + callback(error); + }); +}; + diff --git a/migrations/schema.sql b/migrations/schema.sql index 93505729e..d05c22aaf 100644 --- a/migrations/schema.sql +++ b/migrations/schema.sql @@ -105,5 +105,6 @@ CREATE TABLE IF NOT EXISTS backups( type VARCHAR(16) NOT NULL, /* 'box' or 'app' */ dependsOn VARCHAR(4096), /* comma separate list of objects this backup depends on */ state VARCHAR(16) NOT NULL, + configJson TEXT, /* configuration - bucket, prefix, key, provider */ PRIMARY KEY (filename)); diff --git a/src/backupdb.js b/src/backupdb.js index b499d4413..a4923820e 100644 --- a/src/backupdb.js +++ b/src/backupdb.js @@ -5,9 +5,10 @@ var assert = require('assert'), database = require('./database.js'), DatabaseError = require('./databaseerror.js'), + safe = require('safetydance'), util = require('util'); -var BACKUPS_FIELDS = [ 'filename', 'creationTime', 'version', 'type', 'dependsOn', 'state' ]; +var BACKUPS_FIELDS = [ 'filename', 'creationTime', 'version', 'type', 'dependsOn', 'state', 'configJson' ]; exports = module.exports = { add: add, @@ -28,6 +29,8 @@ function postProcess(result) { assert.strictEqual(typeof result, 'object'); result.dependsOn = result.dependsOn ? result.dependsOn.split(',') : [ ]; + result.config = safe.JSON.parse(result.configJson); + delete result.configJson; } function getPaged(page, perPage, callback) { @@ -82,12 +85,13 @@ function add(backup, callback) { assert.strictEqual(typeof backup.version, 'string'); assert(backup.type === exports.BACKUP_TYPE_APP || backup.type === exports.BACKUP_TYPE_BOX); assert(util.isArray(backup.dependsOn)); + assert(backup.config && typeof backup.config === 'object'); assert.strictEqual(typeof callback, 'function'); var creationTime = backup.creationTime || new Date(); // allow tests to set the time - database.query('INSERT INTO backups (filename, version, type, creationTime, state, dependsOn) VALUES (?, ?, ?, ?, ?, ?)', - [ backup.filename, backup.version, backup.type, creationTime, exports.BACKUP_STATE_NORMAL, backup.dependsOn.join(',') ], + database.query('INSERT INTO backups (filename, version, type, creationTime, state, dependsOn, configJson) VALUES (?, ?, ?, ?, ?, ?, ?)', + [ backup.filename, backup.version, backup.type, creationTime, exports.BACKUP_STATE_NORMAL, backup.dependsOn.join(','), JSON.stringify(backup.configJson) ], function (error) { if (error && error.code === 'ER_DUP_ENTRY') return callback(new DatabaseError(DatabaseError.ALREADY_EXISTS)); if (error) return callback(new DatabaseError(DatabaseError.INTERNAL_ERROR, error)); diff --git a/src/backups.js b/src/backups.js index 087a64960..01c6de31a 100644 --- a/src/backups.js +++ b/src/backups.js @@ -102,7 +102,7 @@ function getBackupUrl(appBackupIds, callback) { debug('getBackupUrl: id:%s url:%s sessionToken:%s backupKey:%s', obj.id, obj.url, obj.sessionToken, obj.backupKey); - backupdb.add({ filename: filename, creationTime: now, version: config.version(), type: backupdb.BACKUP_TYPE_BOX, dependsOn: appBackupIds }, function (error) { + backupdb.add({ filename: filename, creationTime: now, version: config.version(), type: backupdb.BACKUP_TYPE_BOX, dependsOn: appBackupIds, config: backupConfig }, function (error) { if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)); callback(null, obj); @@ -138,7 +138,7 @@ function getAppBackupUrl(app, callback) { debug('getAppBackupUrl: %j', obj); - backupdb.add({ filename: dataFilename, creationTime: now, version: app.manifest.version, type: backupdb.BACKUP_TYPE_APP, dependsOn: [ ] }, function (error) { + backupdb.add({ filename: dataFilename, creationTime: now, version: app.manifest.version, type: backupdb.BACKUP_TYPE_APP, dependsOn: [ ], config: backupConfig }, function (error) { if (error) return callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)); callback(null, obj);