kopia lustrzana https://github.com/c9/core
only consider VFS servers from the same region
rodzic
d620d8db6f
commit
aee50cfda9
|
@ -6,6 +6,7 @@ define(function(require, exports, module) {
|
|||
"db",
|
||||
"c9.login",
|
||||
"preview.handler",
|
||||
"vfs.serverlist",
|
||||
"user-content.redirect",
|
||||
"connect.remote-address"
|
||||
];
|
||||
|
@ -13,21 +14,18 @@ define(function(require, exports, module) {
|
|||
return main;
|
||||
|
||||
function main(options, imports, register) {
|
||||
var maxVfsAge = options.maxVfsAge || 20 * 1000;
|
||||
var region = options.region;
|
||||
|
||||
var session = imports.session;
|
||||
var db = imports.db;
|
||||
var ensureLoggedIn = imports["c9.login"].ensureLoggedIn();
|
||||
var handler = imports["preview.handler"];
|
||||
var userContent = imports["user-content.redirect"];
|
||||
var getVfsServers = imports["vfs.serverlist"].getServers;
|
||||
|
||||
var frontdoor = require("frontdoor");
|
||||
var error = require("http-error");
|
||||
var requestTimeout = require("c9/request_timeout");
|
||||
|
||||
var api = frontdoor();
|
||||
var vfsServers;
|
||||
|
||||
api.registerType("username", /^[0-9a-z_\-]*$/i);
|
||||
api.registerType("projectname", /^[0-9a-z\-_]*$/i);
|
||||
|
@ -55,7 +53,7 @@ define(function(require, exports, module) {
|
|||
handler.getProjectSession(),
|
||||
handler.getRole(db),
|
||||
handler.getProxyUrl(function() {
|
||||
return vfsServers ? vfsServers[0] : null;
|
||||
return getVfsServers()[0] || null;
|
||||
}),
|
||||
handler.proxyCall()
|
||||
]);
|
||||
|
@ -82,52 +80,6 @@ define(function(require, exports, module) {
|
|||
res.redirect(req.url + "/");
|
||||
});
|
||||
|
||||
function updateVfsServerList(callback) {
|
||||
db.Vfs.findAllAndPurge(maxVfsAge, function(err, servers) {
|
||||
if (err)
|
||||
return callback(err);
|
||||
if (!servers.length)
|
||||
return callback(new Error("No VFS server available"));
|
||||
|
||||
vfsServers = shuffleServers(servers);
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
function shuffleServers(servers) {
|
||||
servers = servers.slice();
|
||||
var isBeta = region == "beta";
|
||||
servers = servers.filter(function(s) {
|
||||
return isBeta ? s.region == "beta" : s.region !== "beta";
|
||||
});
|
||||
return servers.sort(function(a, b) {
|
||||
if (a.region == b.region) {
|
||||
if (a.load < b.load)
|
||||
return -1;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
else if (a.region == region)
|
||||
return -1;
|
||||
else if (b.region == region)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
});
|
||||
}
|
||||
|
||||
load();
|
||||
function load() {
|
||||
updateVfsServerList(function(err) {
|
||||
if (err)
|
||||
return setTimeout(load, 20000);
|
||||
|
||||
setInterval(updateVfsServerList.bind(null, function(err) {
|
||||
if (err) console.error("Retrieving VFS server list failed", err);
|
||||
}), 20 * 1000);
|
||||
|
||||
register();
|
||||
});
|
||||
}
|
||||
register();
|
||||
}
|
||||
});
|
Ładowanie…
Reference in New Issue