Fix retry code launch classes

This commit is contained in:
Patrick Niklaus 2016-05-26 16:42:20 +02:00
parent cbbeef5c46
commit 2e2f34f241
No known key found for this signature in database
GPG Key ID: E426891B5F978B1B

View File

@ -3,6 +3,7 @@
var fs = require('fs'); var fs = require('fs');
var spawn = require('child_process').spawn; var spawn = require('child_process').spawn;
var util = require('util'); var util = require('util');
var net = require('net');
var Timeout = require('node-timeout'); var Timeout = require('node-timeout');
var OSRMBaseLoader = class { var OSRMBaseLoader = class {
@ -14,7 +15,7 @@ var OSRMBaseLoader = class {
var limit = Timeout(this.scope.TIMEOUT, { err: this.scope.RoutedError('Launching osrm-routed timed out.') }); var limit = Timeout(this.scope.TIMEOUT, { err: this.scope.RoutedError('Launching osrm-routed timed out.') });
var runLaunch = (cb) => { var runLaunch = (cb) => {
this.osrmUp(cb); this.osrmUp(() => { this.waitForConnection(cb); });
}; };
runLaunch(limit((e) => { if (e) callback(e); else callback(); })); runLaunch(limit((e) => { if (e) callback(e); else callback(); }));
@ -42,6 +43,24 @@ var OSRMBaseLoader = class {
} else callback(true); } else callback(true);
} }
waitForConnection (callback) {
var retryCount = 0;
var connectWithRetry = () => {
net.connect({ port: this.scope.OSRM_PORT, host: '127.0.0.1' })
.on('connect', () => { callback(); })
.on('error', () => {
if (retryCount < 2) {
retryCount++;
setTimeout(connectWithRetry, 100);
} else {
callback(new Error('Could not connect to osrm-routed after three retires'));
}
});
};
connectWithRetry();
}
waitForShutdown (callback) { waitForShutdown (callback) {
var check = () => { var check = () => {
if (!this.osrmIsRunning()) return callback(); if (!this.osrmIsRunning()) return callback();
@ -130,7 +149,7 @@ module.exports = {
this.loader = new OSRMDirectLoader(this.scope); this.loader = new OSRMDirectLoader(this.scope);
this.loader.load(inputFile, callback); this.loader.load(inputFile, callback);
} else { } else {
throw new Error('*** Unknown load method ' + method); callback(new Error('*** Unknown load method ' + method));
} }
} }