Add taskworker that runs funcs out of process

This commit is contained in:
Girish Ramakrishnan
2018-12-09 03:20:00 -08:00
parent 3688371ce8
commit d43106b0af
11 changed files with 108 additions and 137 deletions

View File

@@ -10,6 +10,7 @@ exports = module.exports = {
get: get,
startBackupTask: startBackupTask,
ensureBackup: ensureBackup,
restore: restore,
@@ -44,7 +45,10 @@ var addons = require('./addons.js'),
database = require('./database.js'),
DatabaseError = require('./databaseerror.js'),
debug = require('debug')('box:backups'),
eventlog = require('./eventlog.js'),
fs = require('fs'),
locker = require('./locker.js'),
mailer = require('./mailer.js'),
mkdirp = require('mkdirp'),
once = require('once'),
path = require('path'),
@@ -918,6 +922,25 @@ function backupBoxAndApps(progressCallback, callback) {
});
}
function startBackupTask(auditSource, callback) {
let error = locker.lock(locker.OP_FULL_BACKUP);
if (error) return callback(error);
let task = tasks.startTask(tasks.TASK_BACKUP, [], auditSource);
task.on('error', (error) => callback(new BackupsError(BackupsError.INTERNAL_ERROR, error)));
task.on('start', (taskId) => {
eventlog.add(eventlog.ACTION_BACKUP_START, auditSource, { taskId });
callback(null, taskId);
});
task.on('finish', (error, result) => {
locker.unlock(locker.OP_FULL_BACKUP);
if (error) mailer.backupFailed(error);
eventlog.add(eventlog.ACTION_BACKUP_FINISH, auditSource, { errorMessage: error ? error.message : null, backupId: result });
});
}
function ensureBackup(auditSource, callback) {
assert.strictEqual(typeof auditSource, 'object');
@@ -937,7 +960,7 @@ function ensureBackup(auditSource, callback) {
return callback(null);
}
tasks.startTask(tasks.TASK_BACKUP, {}, auditSource, callback);
startBackupTask(auditSource, callback);
});
});
}