From 747ab7f54340d74a7b6fccdc551fd035853d9230 Mon Sep 17 00:00:00 2001 From: Tim Robinson Date: Mon, 11 May 2015 13:03:57 +0000 Subject: [PATCH] Merge remote-tracking branch 'origin/master' into fix/vfs-multi-attempt Conflicts: plugins/c9.vfs.client/endpoint.js --- package.json | 12 +++++------ plugins/c9.vfs.client/endpoint.js | 33 ++++++++++++++++++++++++++----- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 8328d0e0..e49a5744 100644 --- a/package.json +++ b/package.json @@ -60,15 +60,15 @@ "c9.ide.language.css": "#ef8a28943e", "c9.ide.language.generic": "#32986699ac", "c9.ide.language.html": "#bbe81afed1", - "c9.ide.language.html.diff": "#24f3608d26", + "c9.ide.language.html.diff": "#a7311cfc9f", "c9.ide.language.javascript": "#8479d0a9c1", - "c9.ide.language.javascript.immediate": "#0535804ada", + "c9.ide.language.javascript.immediate": "#9a2cce9121", "c9.ide.language.javascript.eslint": "#2db744b1a3", "c9.ide.language.javascript.tern": "#7aab8b0b6a", "c9.ide.language.javascript.infer": "#cfec494a3c", "c9.ide.language.jsonalyzer": "#dab3edfca5", "c9.ide.collab": "#e9dd74e31e", - "c9.ide.local": "#a9703b630c", + "c9.ide.local": "#2bfd7ff051", "c9.ide.find": "#6cc6d3379d", "c9.ide.find.infiles": "#72582de3cd", "c9.ide.find.replace": "#e4daf722b8", @@ -77,7 +77,7 @@ "c9.ide.ace.emmet": "#e5f1a92ac3", "c9.ide.ace.gotoline": "#4d1a93172c", "c9.ide.ace.keymaps": "#43445d6306", - "c9.ide.ace.repl": "#f3a62c1f2a", + "c9.ide.ace.repl": "#ada99852fa", "c9.ide.ace.split": "#0ae0151c78", "c9.ide.ace.statusbar": "#d95be89d53", "c9.ide.ace.stripws": "#cf0f42ac59", @@ -91,14 +91,14 @@ "c9.ide.imgeditor": "#ed89162aa7", "c9.ide.immediate": "#6845a93705", "c9.ide.installer": "#70bb0e85f4", - "c9.ide.mount": "#896ebf836e", + "c9.ide.mount": "#32e79866ee", "c9.ide.navigate": "#7c58c7f3d7", "c9.ide.newresource": "#f1f0624768", "c9.ide.openfiles": "#28a4f5af16", "c9.ide.preview": "#0bd8dd6e8c", "c9.ide.preview.browser": "#ac18aaf31d", "c9.ide.preview.markdown": "#ab8d30ad9f", - "c9.ide.pubsub": "#a85fb27eca", + "c9.ide.pubsub": "#92ec19ed3a", "c9.ide.readonly": "#f6f07bbe42", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#cd45e81d2f", diff --git a/plugins/c9.vfs.client/endpoint.js b/plugins/c9.vfs.client/endpoint.js index 6da0c793..a19d93dc 100644 --- a/plugins/c9.vfs.client/endpoint.js +++ b/plugins/c9.vfs.client/endpoint.js @@ -3,6 +3,9 @@ define(function(require, exports, module) { main.consumes = ["Plugin", "auth", "http", "api", "error_handler", "metrics"]; main.provides = ["vfs.endpoint"]; + + var PARALLEL_SEARCHES=3; + return main; function main(options, imports, register) { @@ -168,10 +171,24 @@ define(function(require, exports, module) { // check for version if (servers.length && !servers.filter(function(s) { return s.version !== version; }).length) return onProtocolChange(callback); - + + var nextServer = 0; + var foundServer = false; + + /* Create a callback that is only ever called once */ + var mainCallback = callback; + callback = function() { + if (!foundServer) { + foundServer = true; + var args = Array.prototype.slice.call(arguments); + return mainCallback.apply(this, args); + } + }; + // just take the first server that doesn't return an error - (function tryNext(i) { - if (i >= servers.length) { + function tryNext(i) { + if (foundServer) return false; + if (i >= servers.length) metrics.increment("vfs.failed.connect_all", 1, true); return callback(new Error("Disconnected: Could not reach your workspace. Please try again later.")); } @@ -233,7 +250,7 @@ define(function(require, exports, module) { if (err) { setTimeout(function() { - tryNext(i+1); + tryNext(++nextServer); }, 2000); return; } @@ -241,7 +258,13 @@ define(function(require, exports, module) { var vfs = rememberVfs(server, res.vfsid); callback(null, vfs.vfsid, server.url, server.region); }); - })(0); + }; + + + // Kick off some parallel runners to find a vfs server. + for (var s = 0; s < servers.length && s < PARALLEL_SEARCHES; s++) { + tryNext(nextServer++); + } } function onProtocolChange(callback) {