mirror of https://gitee.com/bigwinds/arangodb
Added target Coordinators and DatabaseList to high level agency communication.
This commit is contained in:
parent
5bed79017e
commit
7b745854db
|
@ -69,6 +69,9 @@ exports.Communication = function() {
|
||||||
},
|
},
|
||||||
checkVersion: function(route) {
|
checkVersion: function(route) {
|
||||||
return false;
|
return false;
|
||||||
|
},
|
||||||
|
list: function(route) {
|
||||||
|
return _agency.list(route).sort();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var addLevel = function(base, name, route, functions) {
|
var addLevel = function(base, name, route, functions) {
|
||||||
|
@ -90,6 +93,8 @@ exports.Communication = function() {
|
||||||
};
|
};
|
||||||
var target = addLevel(this, "target", "Target");
|
var target = addLevel(this, "target", "Target");
|
||||||
addLevel(target, "dbServers", "DBServers", ["get", "set", "remove", "checkVersion"]);
|
addLevel(target, "dbServers", "DBServers", ["get", "set", "remove", "checkVersion"]);
|
||||||
|
addLevel(target, "db", "Collections", ["list"]);
|
||||||
|
addLevel(target, "coordinators", "Coordinators", ["list", "set", "remove", "checkVersion"]);
|
||||||
var plan = addLevel(this, "plan", "Plan");
|
var plan = addLevel(this, "plan", "Plan");
|
||||||
addLevel(plan, "dbServers", "DBServers", ["get"]);
|
addLevel(plan, "dbServers", "DBServers", ["get"]);
|
||||||
|
|
||||||
|
@ -202,24 +207,23 @@ exports.Communication = function() {
|
||||||
|
|
||||||
Target = function() {
|
Target = function() {
|
||||||
var DBServers;
|
var DBServers;
|
||||||
|
var Databases;
|
||||||
|
var Coordinators;
|
||||||
|
|
||||||
this.DBServers = function() {
|
var DBServersObject = function() {
|
||||||
if (!DBServers) {
|
this.getList = function() {
|
||||||
//Add DBServer specific functions
|
|
||||||
DBServers = {
|
|
||||||
getList: function() {
|
|
||||||
return cache.getTarget();
|
return cache.getTarget();
|
||||||
},
|
};
|
||||||
addPrimary: function(name) {
|
this.addPrimary = function(name) {
|
||||||
return agency.target.dbServers.set(name, "none");
|
return agency.target.dbServers.set(name, "none");
|
||||||
},
|
};
|
||||||
addSecondary: function(name, primaryName) {
|
this.addSecondary = function(name, primaryName) {
|
||||||
return agency.target.dbServers.set(primaryName, name);
|
return agency.target.dbServers.set(primaryName, name);
|
||||||
},
|
};
|
||||||
addPair: function(primaryName, secondaryName) {
|
this.addPair = function(primaryName, secondaryName) {
|
||||||
return agency.target.dbServers.set(primaryName, secondaryName);
|
return agency.target.dbServers.set(primaryName, secondaryName);
|
||||||
},
|
},
|
||||||
removeServer: function(name) {
|
this.removeServer = function(name) {
|
||||||
var res = -1;
|
var res = -1;
|
||||||
_.each(cache.getTarget(), function(opts, n) {
|
_.each(cache.getTarget(), function(opts, n) {
|
||||||
if (n === name) {
|
if (n === name) {
|
||||||
|
@ -248,10 +252,44 @@ exports.Communication = function() {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
var DatabasesObject = function() {
|
||||||
|
this.getList = function() {
|
||||||
|
return agency.target.db.list();
|
||||||
|
};
|
||||||
|
};
|
||||||
|
var CoordinatorsObject = function() {
|
||||||
|
this.getList = function() {
|
||||||
|
return agency.target.coordinators.list();
|
||||||
|
};
|
||||||
|
this.add = function(name) {
|
||||||
|
return agency.target.coordinators.set(name, true);
|
||||||
|
};
|
||||||
|
this.remove = function(name) {
|
||||||
|
return agency.target.coordinators.remove(name);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
this.DBServers = function() {
|
||||||
|
if (!DBServers) {
|
||||||
|
DBServers = new DBServersObject();
|
||||||
}
|
}
|
||||||
return DBServers;
|
return DBServers;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.Databases = function() {
|
||||||
|
if (!Databases) {
|
||||||
|
Databases = new DatabasesObject();
|
||||||
|
}
|
||||||
|
return Databases;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.Coordinators = function() {
|
||||||
|
if (!Coordinators) {
|
||||||
|
Coordinators = new CoordinatorsObject();
|
||||||
|
}
|
||||||
|
return Coordinators;
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
|
@ -59,7 +59,7 @@ function runGoodCaseTests(test) {
|
||||||
var agencyRoutes;
|
var agencyRoutes;
|
||||||
var setup;
|
var setup;
|
||||||
var teardown;
|
var teardown;
|
||||||
var agencyTargetServers;
|
var dummy;
|
||||||
var plannedServers;
|
var plannedServers;
|
||||||
var registered;
|
var registered;
|
||||||
|
|
||||||
|
@ -72,11 +72,19 @@ function runGoodCaseTests(test) {
|
||||||
};
|
};
|
||||||
|
|
||||||
resetToDefault = function() {
|
resetToDefault = function() {
|
||||||
agencyTargetServers = createResult([agencyRoutes.target, "DBServers"], {
|
dummy = {};
|
||||||
|
dummy.target = {};
|
||||||
|
dummy.target.servers = createResult([agencyRoutes.target, "DBServers"], {
|
||||||
"pavel": "sandro",
|
"pavel": "sandro",
|
||||||
"paul": "sally",
|
"paul": "sally",
|
||||||
"patricia": "sandra"
|
"patricia": "sandra"
|
||||||
});
|
});
|
||||||
|
dummy.target.coordinators = createResult([agencyRoutes.target, "Coordinators"], {
|
||||||
|
"cindy": 2,
|
||||||
|
"carlos": true,
|
||||||
|
"charly": "alice"
|
||||||
|
});
|
||||||
|
dummy.target.databases = ["_system", "z_db", "a_db", "b_db"];
|
||||||
plannedServers = createResult([agencyRoutes.plan, "DBServers"], {
|
plannedServers = createResult([agencyRoutes.plan, "DBServers"], {
|
||||||
"pavel": "sandro",
|
"pavel": "sandro",
|
||||||
"paul": "sally",
|
"paul": "sally",
|
||||||
|
@ -94,6 +102,7 @@ function runGoodCaseTests(test) {
|
||||||
|
|
||||||
setup = function() {
|
setup = function() {
|
||||||
resetToDefault();
|
resetToDefault();
|
||||||
|
comm = new Communication.Communication();
|
||||||
};
|
};
|
||||||
|
|
||||||
teardown = function() {
|
teardown = function() {
|
||||||
|
@ -106,7 +115,7 @@ function runGoodCaseTests(test) {
|
||||||
switch (parts[0]) {
|
switch (parts[0]) {
|
||||||
case agencyRoutes.target:
|
case agencyRoutes.target:
|
||||||
if (parts[1] === "DBServers" && recursive) {
|
if (parts[1] === "DBServers" && recursive) {
|
||||||
return agencyTargetServers;
|
return dummy.target.servers;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case agencyRoutes.plan:
|
case agencyRoutes.plan:
|
||||||
|
@ -122,14 +131,32 @@ function runGoodCaseTests(test) {
|
||||||
default:
|
default:
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
list: function(route) {
|
||||||
|
var parts = route.split("/");
|
||||||
|
switch (parts[0]) {
|
||||||
|
case agencyRoutes.target:
|
||||||
|
if (parts[1] === "Collections") {
|
||||||
|
return dummy.target.databases;
|
||||||
|
}
|
||||||
|
if (parts[1] === "Coordinators") {
|
||||||
|
return _.map(
|
||||||
|
_.keys(dummy.target.coordinators),
|
||||||
|
function(k) {
|
||||||
|
var splits = k.split("/");
|
||||||
|
return splits[splits.length-1];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
fail();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Communication._createAgency = function() {
|
Communication._createAgency = function() {
|
||||||
return agencyMock;
|
return agencyMock;
|
||||||
};
|
};
|
||||||
|
|
||||||
comm = new Communication.Communication();
|
|
||||||
|
|
||||||
function VisionSuite() {
|
function VisionSuite() {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -189,7 +216,7 @@ function runGoodCaseTests(test) {
|
||||||
agencyMock.set = function(route, value) {
|
agencyMock.set = function(route, value) {
|
||||||
assertEqual(route, [agencyRoutes.target, "DBServers", name].join("/"));
|
assertEqual(route, [agencyRoutes.target, "DBServers", name].join("/"));
|
||||||
assertEqual(value, "none");
|
assertEqual(value, "none");
|
||||||
agencyTargetServers[route] = value;
|
dummy.target.servers[route] = value;
|
||||||
wasCalled = true;
|
wasCalled = true;
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
@ -210,7 +237,7 @@ function runGoodCaseTests(test) {
|
||||||
assertEqual(route, [agencyRoutes.target, "DBServers", name].join("/"));
|
assertEqual(route, [agencyRoutes.target, "DBServers", name].join("/"));
|
||||||
assertEqual(value, "none");
|
assertEqual(value, "none");
|
||||||
assertFalse(wasCalled, "Set has been called multiple times");
|
assertFalse(wasCalled, "Set has been called multiple times");
|
||||||
agencyTargetServers[route] = value;
|
dummy.target.servers[route] = value;
|
||||||
wasCalled = true;
|
wasCalled = true;
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
@ -221,7 +248,7 @@ function runGoodCaseTests(test) {
|
||||||
assertEqual(route, [agencyRoutes.target, "DBServers", name].join("/"));
|
assertEqual(route, [agencyRoutes.target, "DBServers", name].join("/"));
|
||||||
assertEqual(value, secName);
|
assertEqual(value, secName);
|
||||||
assertFalse(wasCalled, "Set has been called multiple times");
|
assertFalse(wasCalled, "Set has been called multiple times");
|
||||||
agencyTargetServers[route] = value;
|
dummy.target.servers[route] = value;
|
||||||
wasCalled = true;
|
wasCalled = true;
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
@ -244,7 +271,7 @@ function runGoodCaseTests(test) {
|
||||||
assertEqual(route, [agencyRoutes.target, "DBServers", name].join("/"));
|
assertEqual(route, [agencyRoutes.target, "DBServers", name].join("/"));
|
||||||
assertEqual(value, secName);
|
assertEqual(value, secName);
|
||||||
assertFalse(wasCalled, "Set has been called multiple times");
|
assertFalse(wasCalled, "Set has been called multiple times");
|
||||||
agencyTargetServers[route] = value;
|
dummy.target.servers[route] = value;
|
||||||
wasCalled = true;
|
wasCalled = true;
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
@ -266,7 +293,7 @@ function runGoodCaseTests(test) {
|
||||||
assertEqual(route, [agencyRoutes.target, "DBServers", secondaryName].join("/"));
|
assertEqual(route, [agencyRoutes.target, "DBServers", secondaryName].join("/"));
|
||||||
assertEqual(value, "none");
|
assertEqual(value, "none");
|
||||||
assertFalse(setWasCalled, "Set has been called multiple times");
|
assertFalse(setWasCalled, "Set has been called multiple times");
|
||||||
agencyTargetServers[route] = value;
|
dummy.target.servers[route] = value;
|
||||||
setWasCalled = true;
|
setWasCalled = true;
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
@ -274,7 +301,7 @@ function runGoodCaseTests(test) {
|
||||||
agencyMock.remove = function(route) {
|
agencyMock.remove = function(route) {
|
||||||
assertEqual(route, [agencyRoutes.target, "DBServers", name].join("/"));
|
assertEqual(route, [agencyRoutes.target, "DBServers", name].join("/"));
|
||||||
assertFalse(delWasCalled, "Delete has been called multiple times");
|
assertFalse(delWasCalled, "Delete has been called multiple times");
|
||||||
delete agencyTargetServers[route];
|
delete dummy.target.servers[route];
|
||||||
delWasCalled = true;
|
delWasCalled = true;
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
@ -297,7 +324,7 @@ function runGoodCaseTests(test) {
|
||||||
assertEqual(route, [agencyRoutes.target, "DBServers", pName].join("/"));
|
assertEqual(route, [agencyRoutes.target, "DBServers", pName].join("/"));
|
||||||
assertEqual(value, "none");
|
assertEqual(value, "none");
|
||||||
assertFalse(wasCalled, "Set has been called multiple times");
|
assertFalse(wasCalled, "Set has been called multiple times");
|
||||||
agencyTargetServers[route] = value;
|
dummy.target.servers[route] = value;
|
||||||
wasCalled = true;
|
wasCalled = true;
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
@ -309,36 +336,110 @@ function runGoodCaseTests(test) {
|
||||||
assertEqual(newList[pName].role, "primary");
|
assertEqual(newList[pName].role, "primary");
|
||||||
assertUndefined(newList[pName].secondary);
|
assertUndefined(newList[pName].secondary);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
function TargetCoordinatorSuite() {
|
||||||
|
var targetCoordinators;
|
||||||
|
|
||||||
|
return {
|
||||||
|
setUp: function() {
|
||||||
|
setup();
|
||||||
|
targetCoordinators = comm.target.Coordinators();
|
||||||
|
},
|
||||||
|
tearDown: teardown,
|
||||||
|
|
||||||
|
testGetCoordinatorList: function() {
|
||||||
|
var list = [
|
||||||
|
"carlos",
|
||||||
|
"charly",
|
||||||
|
"cindy"
|
||||||
|
].sort();
|
||||||
|
assertEqual(targetCoordinators.getList(), list);
|
||||||
|
},
|
||||||
|
|
||||||
|
testAddCoordinator: function() {
|
||||||
|
var name = "carol";
|
||||||
|
var wasCalled = false;
|
||||||
|
agencyMock.set = function(route, value) {
|
||||||
|
assertEqual(route, [agencyRoutes.target, "Coordinators", name].join("/"));
|
||||||
|
assertEqual(value, true);
|
||||||
|
dummy.target.coordinators[route] = value;
|
||||||
|
wasCalled = true;
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
assertTrue(targetCoordinators.add(name), "Failed to insert a new coordinator.");
|
||||||
|
assertTrue(wasCalled, "Agency has not been informed to insert coordinator.");
|
||||||
|
var list = [
|
||||||
|
"carlos",
|
||||||
|
"charly",
|
||||||
|
"cindy",
|
||||||
|
name
|
||||||
|
].sort();
|
||||||
|
assertEqual(targetCoordinators.getList(), list);
|
||||||
|
},
|
||||||
|
|
||||||
|
testRemoveCoordinator: function() {
|
||||||
|
var name = "cindy";
|
||||||
|
var delWasCalled = false;
|
||||||
|
agencyMock.remove = function(route) {
|
||||||
|
assertEqual(route, [agencyRoutes.target, "Coordinators", name].join("/"));
|
||||||
|
assertFalse(delWasCalled, "Delete has been called multiple times");
|
||||||
|
delete dummy.target.coordinators[route];
|
||||||
|
internal.print(route);
|
||||||
|
internal.print(dummy.target.coordinators);
|
||||||
|
delWasCalled = true;
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
assertTrue(targetCoordinators.remove(name), "Failed to remove a coordinator.");
|
||||||
|
assertTrue(delWasCalled, "Agency has not been informed to remove a coordinator.");
|
||||||
|
var list = [
|
||||||
|
"carlos",
|
||||||
|
"charly"
|
||||||
|
].sort();
|
||||||
|
assertEqual(targetCoordinators.getList(), list);
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function TargetShardSuite() {
|
function TargetDataSuite() {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
setUp: setup,
|
setUp: setup,
|
||||||
tearDown: teardown,
|
tearDown: teardown,
|
||||||
|
|
||||||
testGetDatabaseList: function() {
|
testGetDatabaseList: function() {
|
||||||
/*
|
|
||||||
var list = [
|
var list = [
|
||||||
"_system",
|
"_system",
|
||||||
"a_db",
|
"a_db",
|
||||||
"b_db",
|
"b_db",
|
||||||
"z_db"
|
"z_db"
|
||||||
];
|
].sort();
|
||||||
|
var targetDBs = comm.target.Databases();
|
||||||
assertEqual(targetDBs.getList(), list);
|
assertEqual(targetDBs.getList(), list);
|
||||||
|
},
|
||||||
|
/*
|
||||||
|
testGetCollectionListForDatabase: function() {
|
||||||
|
var list = [
|
||||||
|
"_graphs",
|
||||||
|
"v",
|
||||||
|
"e"
|
||||||
|
].sort();
|
||||||
|
var targetColls = comm.target._system();
|
||||||
|
assertEqual(targetColls.getList(), list);
|
||||||
|
}
|
||||||
|
}
|
||||||
*/
|
*/
|
||||||
assertTrue(true);
|
};
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// test.run(VisionSuite);
|
// test.run(VisionSuite);
|
||||||
test.run(TargetDBServersSuite);
|
test.run(TargetDBServersSuite);
|
||||||
test.run(TargetShardSuite);
|
test.run(TargetCoordinatorSuite);
|
||||||
|
test.run(TargetDataSuite);
|
||||||
};
|
};
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue