Skip to content

Commit

Permalink
made assets service to sync with cluster master instantiation resolve… (
Browse files Browse the repository at this point in the history
#587)

* made assets service to sync with cluster master instantiation resolves #584

* encapsulated asset online logic in closure
  • Loading branch information
jsnoble authored and kstaken committed Oct 30, 2017
1 parent 604fd97 commit 73feeb2
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 6 deletions.
34 changes: 34 additions & 0 deletions lib/cluster/cluster_master.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ module.exports = function(context) {

var services = [];

const assetServiceOnline = assetServicelistener();

require('./services/cluster')(context, server)
.then(function(cluster_service) {
logger.trace('cluster_service has instantiated');
Expand All @@ -29,6 +31,9 @@ module.exports = function(context) {
.then(function(jobs_service) {
logger.trace('jobs_service has instantiated');
services.push(jobs_service);
return assetServiceOnline();
})
.then(function() {
return require('./services/api')(context, app, services);
})
.then(function(api_service) {
Expand Down Expand Up @@ -68,4 +73,33 @@ module.exports = function(context) {
});
});

function assetServicelistener() {
let assetsServiceIsReady = false;
let assetsServiceError = false;

messaging.register('assets:service:available', (assetServiceResponse) => {
if (assetServiceResponse.error) {
assetsServiceError = true;
} else {
assetsServiceIsReady = true;
}
});
return () => new Promise(((resolve, reject) => {
if (assetsServiceIsReady) {
resolve(true);
} else {
const assetReady = setInterval(() => {
if (assetsServiceIsReady) {
clearInterval(assetReady);
resolve(true);
}
if (assetsServiceError) {
clearInterval(assetReady);
reject('An error occurred while instantiating the assets service');
}
}, 100);
}
}));
}

};
12 changes: 9 additions & 3 deletions lib/cluster/node_master.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ module.exports = function(context) {
deleteDir(`${assets_path}/${assetID}`)
.catch(function(err) {
var errMsg = parseError(err);
logger.error(errMsg)
})
logger.error(errMsg);
});
});

messaging.register('assets:preloaded', function(assetsMsg) {
Expand Down Expand Up @@ -251,7 +251,13 @@ module.exports = function(context) {

messaging.register('cluster:job:pause', function(data) {
messageWorkers(context, data, {message: 'cluster:job:pause'}, function(worker) {
return worker.ex_id === data.ex_id && worker.assignment === 'slicer'
return worker.ex_id === data.ex_id && worker.assignment === 'slicer';
});
});

messaging.register('assets:service:available', function(assetsMsg) {
messageWorkers(context, assetsMsg, assetsMsg, function(worker) {
return worker.assignment === 'cluster_master';
});
});

Expand Down
5 changes: 3 additions & 2 deletions lib/cluster/services/assets.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,15 +79,16 @@ module.exports = function(context) {
assets_store = store;
var port = process.env.port;
logger.info(`assets_service is listening on port ${port}`);

app.listen(port);
messaging.send({message: 'assets:service:available'});
})
.catch(function(err) {
var errMsg = parseError(err);
logger.error(`Error while creating assets_service, error: ${errMsg}`);
messaging.send({ message: 'assets:service:available', error: errMsg });
setTimeout(function() {
process.exit(0)
}, 10)
}, 100)
});

function createAssetTable(query, req, res) {
Expand Down
3 changes: 2 additions & 1 deletion lib/cluster/services/messaging.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ var processMapping = {
'shutdown': 'worker:shutdown',
'assets:loaded': 'assets:loaded',
'jobs_service:verify_assets': 'jobs_service:verify_assets',
'assets:preloaded': 'assets:preloaded'
'assets:preloaded': 'assets:preloaded',
'assets:service:available': 'assets:service:available'
};

//needed so slicer can listen for a process message from node master (originally a network call from cluster)
Expand Down

0 comments on commit 73feeb2

Please sign in to comment.