Merge remote-tracking branch 'origin/master' into fix/vfs-multi-attempt

Conflicts:
	plugins/c9.vfs.client/endpoint.js
pull/43/merge
Tim Robinson 2015-05-11 13:03:57 +00:00
rodzic 2957589336
commit 747ab7f543
2 zmienionych plików z 34 dodań i 11 usunięć

Wyświetl plik

@ -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",

Wyświetl plik

@ -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) {