port taskmanager to use tasks

This commit is contained in:
Girish Ramakrishnan
2019-08-28 15:00:55 -07:00
parent be6b172d6f
commit 9f1210202a
6 changed files with 132 additions and 220 deletions

View File

@@ -59,6 +59,7 @@ exports = module.exports = {
var appdb = require('./appdb.js'),
appstore = require('./appstore.js'),
AppstoreError = require('./appstore.js').AppstoreError,
appTaskManager = require('./apptaskmanager.js'),
assert = require('assert'),
async = require('async'),
backups = require('./backups.js'),
@@ -575,10 +576,10 @@ function mailboxNameForLocation(location, manifest) {
return (location ? location : manifest.title.toLowerCase().replace(/[^a-zA-Z0-9]/g, '')) + '.app';
}
function startAppTask(appId, args, callback) {
const logFile = path.join(paths.LOG_DIR, appId, 'apptask.log');
if (!fs.existsSync(path.dirname(logFile))) safe.fs.mkdirSync(path.dirname(logFile)); // ensure directory
function scheduleTask(appId, args, callback) {
assert.strictEqual(typeof appId, 'string');
assert.strictEqual(typeof args, 'object');
assert.strictEqual(typeof callback, 'function');
tasks.add(tasks.TASK_APP, [ appId, args ], function (error, taskId) {
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error));
@@ -586,7 +587,7 @@ function startAppTask(appId, args, callback) {
appdb.update(appId, { taskId: taskId }, function (error) {
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error));
tasks.startTask(taskId, { logFile }, function (error) {
appTaskManager.scheduleTask(appId, taskId, function (error) {
if (error && (error.crashed || error.stopped)) {
debug(`Apptask crashed/stopped: ${error.message}`);
appdb.update(appId, { installationState: appdb.ISTATE_ERROR, errorMessage: error.message, taskId: null }, NOOP_CALLBACK);
@@ -727,7 +728,7 @@ function install(data, user, auditSource, callback) {
const restoreConfig = backupId ? { backupId: backupId, backupFormat: backupFormat } : null;
startAppTask(appId, { restoreConfig }, function (error, result) {
scheduleTask(appId, { restoreConfig }, function (error, result) {
if (error) return callback(error);
eventlog.add(eventlog.ACTION_APP_INSTALL, auditSource, { appId: appId, app: result });
@@ -873,7 +874,7 @@ function configure(appId, data, user, auditSource, callback) {
if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new AppsError(AppsError.BAD_STATE));
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error));
startAppTask(appId, { oldConfig: getAppConfig(app) }, function (error, result) {
scheduleTask(appId, { oldConfig: getAppConfig(app) }, function (error, result) {
if (error) return callback(error);
eventlog.add(eventlog.ACTION_APP_CONFIGURE, auditSource, { appId: appId, app: result });
@@ -949,7 +950,7 @@ function update(appId, data, auditSource, callback) {
if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new AppsError(AppsError.BAD_STATE)); // might be a bad guess
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error));
startAppTask(appId, { updateConfig: updateConfig }, function (error, result) {
scheduleTask(appId, { updateConfig: updateConfig }, function (error, result) {
if (error) return callback(error);
eventlog.add(eventlog.ACTION_APP_UPDATE, auditSource, { appId: appId, toManifest: manifest, fromManifest: app.manifest, force: data.force, app: app });
@@ -1052,7 +1053,7 @@ function restore(appId, data, auditSource, callback) {
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error));
const restoreConfig = data.backupId ? { backupId: data.backupId, backupFormat: backupInfo.format, oldManifest: app.manifest } : null; // when null, apptask simply reinstalls
startAppTask(appId, { restoreConfig }, function (error, result) {
scheduleTask(appId, { restoreConfig }, function (error, result) {
if (error) return callback(error);
eventlog.add(eventlog.ACTION_APP_RESTORE, auditSource, { app: app, backupId: backupInfo.id, fromManifest: app.manifest, toManifest: backupInfo.manifest });
@@ -1162,7 +1163,7 @@ function clone(appId, data, user, auditSource, callback) {
const restoreConfig = { backupId: backupId, backupFormat: backupInfo.format };
startAppTask(newAppId, { restoreConfig }, function (error, result) {
scheduleTask(newAppId, { restoreConfig }, function (error, result) {
if (error) return callback(error);
eventlog.add(eventlog.ACTION_APP_CLONE, auditSource, { appId: newAppId, oldAppId: appId, backupId: backupId, oldApp: app, newApp: result });
@@ -1197,7 +1198,7 @@ function uninstall(appId, auditSource, callback) {
if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new AppsError(AppsError.NOT_FOUND, 'No such app'));
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error));
startAppTask(appId, {}, function (error, result) {
scheduleTask(appId, {}, function (error, result) {
if (error) return callback(error);
eventlog.add(eventlog.ACTION_APP_UNINSTALL, auditSource, { appId: appId, app: result });
@@ -1219,7 +1220,7 @@ function start(appId, callback) {
if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new AppsError(AppsError.BAD_STATE)); // might be a bad guess
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error));
startAppTask(appId, {}, callback);
scheduleTask(appId, {}, callback);
});
}
@@ -1233,7 +1234,7 @@ function stop(appId, callback) {
if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new AppsError(AppsError.BAD_STATE)); // might be a bad guess
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error));
startAppTask(appId, {}, callback);
scheduleTask(appId, {}, callback);
});
}
@@ -1381,7 +1382,7 @@ function backup(appId, callback) {
if (error && error.reason === DatabaseError.NOT_FOUND) return callback(new AppsError(AppsError.BAD_STATE)); // might be a bad guess
if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error));
startAppTask(appId, { }, (error, result) => {
scheduleTask(appId, { }, (error, result) => {
if (error) return callback(error);
callback(null, { taskId: result.taskId });