From 2e2f34f241464b94309d3ed37c6e2cd149c04b19 Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Thu, 26 May 2016 16:42:20 +0200 Subject: [PATCH] Fix retry code launch classes --- features/support/launch_classes.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/features/support/launch_classes.js b/features/support/launch_classes.js index acf2cdc19..eccdbcefe 100644 --- a/features/support/launch_classes.js +++ b/features/support/launch_classes.js @@ -3,6 +3,7 @@ var fs = require('fs'); var spawn = require('child_process').spawn; var util = require('util'); +var net = require('net'); var Timeout = require('node-timeout'); 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 runLaunch = (cb) => { - this.osrmUp(cb); + this.osrmUp(() => { this.waitForConnection(cb); }); }; runLaunch(limit((e) => { if (e) callback(e); else callback(); })); @@ -42,6 +43,24 @@ var OSRMBaseLoader = class { } 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) { var check = () => { if (!this.osrmIsRunning()) return callback(); @@ -130,7 +149,7 @@ module.exports = { this.loader = new OSRMDirectLoader(this.scope); this.loader.load(inputFile, callback); } else { - throw new Error('*** Unknown load method ' + method); + callback(new Error('*** Unknown load method ' + method)); } }