mirror of https://gitee.com/bigwinds/arangodb
allow locking/unlocking of arbitrary keys
This commit is contained in:
parent
84c46ddb4d
commit
3176c772cf
|
@ -839,10 +839,6 @@ std::string AgencyComm::generateStamp () {
|
||||||
|
|
||||||
bool AgencyComm::checkLockType (std::string const& key,
|
bool AgencyComm::checkLockType (std::string const& key,
|
||||||
std::string const& value) {
|
std::string const& value) {
|
||||||
if (key != "Plan" && key != "Current" && key != "Target") {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (value != "READ" && value != "WRITE") {
|
if (value != "READ" && value != "WRITE") {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,9 +40,9 @@ function AgencySuite () {
|
||||||
var agency;
|
var agency;
|
||||||
|
|
||||||
var cleanupLocks = function () {
|
var cleanupLocks = function () {
|
||||||
agency.set("Target/Lock", "UNLOCKED");
|
agency.set("UnitTestsAgency/Target/Lock", "UNLOCKED");
|
||||||
agency.set("Plan/Lock", "UNLOCKED");
|
agency.set("UnitTestsAgency/Plan/Lock", "UNLOCKED");
|
||||||
agency.set("Current/Lock", "UNLOCKED");
|
agency.set("UnitTestsAgency/Current/Lock", "UNLOCKED");
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -125,25 +125,6 @@ function AgencySuite () {
|
||||||
}, values);
|
}, values);
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test lockRead
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testLockReadInvalid : function () {
|
|
||||||
cleanupLocks();
|
|
||||||
|
|
||||||
var invalidKeys = [ "foo", "bar", "baz", "plans", "PLAN" ];
|
|
||||||
|
|
||||||
invalidKeys.forEach (function (key) {
|
|
||||||
try {
|
|
||||||
agency.lockRead(key);
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// @brief test lockRead
|
/// @brief test lockRead
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -151,14 +132,14 @@ function AgencySuite () {
|
||||||
testLockRead : function () {
|
testLockRead : function () {
|
||||||
cleanupLocks();
|
cleanupLocks();
|
||||||
|
|
||||||
assertTrue(agency.lockRead("Target"));
|
assertTrue(agency.lockRead("UnitTestsAgency/Target"));
|
||||||
assertTrue(agency.unlockRead("Target"));
|
assertTrue(agency.unlockRead("UnitTestsAgency/Target"));
|
||||||
|
|
||||||
assertTrue(agency.lockRead("Plan"));
|
assertTrue(agency.lockRead("UnitTestsAgency/Plan"));
|
||||||
assertTrue(agency.unlockRead("Plan"));
|
assertTrue(agency.unlockRead("UnitTestsAgency/Plan"));
|
||||||
|
|
||||||
assertTrue(agency.lockRead("Current"));
|
assertTrue(agency.lockRead("UnitTestsAgency/Current"));
|
||||||
assertTrue(agency.unlockRead("Current"));
|
assertTrue(agency.unlockRead("UnitTestsAgency/Current"));
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -168,18 +149,18 @@ function AgencySuite () {
|
||||||
testLockReadNotExisting : function () {
|
testLockReadNotExisting : function () {
|
||||||
cleanupLocks();
|
cleanupLocks();
|
||||||
|
|
||||||
assertTrue(agency.remove("Target/Lock"));
|
assertTrue(agency.remove("UnitTestsAgency/Target/Lock"));
|
||||||
assertTrue(agency.remove("Plan/Lock"));
|
assertTrue(agency.remove("UnitTestsAgency/Plan/Lock"));
|
||||||
assertTrue(agency.remove("Current/Lock"));
|
assertTrue(agency.remove("UnitTestsAgency/Current/Lock"));
|
||||||
|
|
||||||
assertTrue(agency.lockRead("Target"));
|
assertTrue(agency.lockRead("UnitTestsAgency/Target"));
|
||||||
assertTrue(agency.unlockRead("Target"));
|
assertTrue(agency.unlockRead("UnitTestsAgency/Target"));
|
||||||
|
|
||||||
assertTrue(agency.lockRead("Plan"));
|
assertTrue(agency.lockRead("UnitTestsAgency/Plan"));
|
||||||
assertTrue(agency.unlockRead("Plan"));
|
assertTrue(agency.unlockRead("UnitTestsAgency/Plan"));
|
||||||
|
|
||||||
assertTrue(agency.lockRead("Current"));
|
assertTrue(agency.lockRead("UnitTestsAgency/Current"));
|
||||||
assertTrue(agency.unlockRead("Current"));
|
assertTrue(agency.unlockRead("UnitTestsAgency/Current"));
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -189,17 +170,17 @@ function AgencySuite () {
|
||||||
testLockReadDouble : function () {
|
testLockReadDouble : function () {
|
||||||
cleanupLocks();
|
cleanupLocks();
|
||||||
|
|
||||||
assertTrue(agency.lockRead("Target", 5));
|
assertTrue(agency.lockRead("UnitTestsAgency/Target", 5));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// this will fail because of a duplicate lock
|
// this will fail because of a duplicate lock
|
||||||
assertTrue(agency.lockRead("Target", 1, 1));
|
assertTrue(agency.lockRead("UnitTestsAgency/Target", 1, 1));
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
}
|
}
|
||||||
|
|
||||||
assertTrue(agency.unlockRead("Target"));
|
assertTrue(agency.unlockRead("UnitTestsAgency/Target"));
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -209,36 +190,17 @@ function AgencySuite () {
|
||||||
testLockReadWrongType : function () {
|
testLockReadWrongType : function () {
|
||||||
cleanupLocks();
|
cleanupLocks();
|
||||||
|
|
||||||
assertTrue(agency.lockRead("Target", 5));
|
assertTrue(agency.lockRead("UnitTestsAgency/Target", 5));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// unlock of a wrong type
|
// unlock of a wrong type
|
||||||
agency.unlockWrite("Target", 1);
|
agency.unlockWrite("UnitTestsAgency/Target", 1);
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
}
|
}
|
||||||
|
|
||||||
assertTrue(agency.unlockRead("Target"));
|
assertTrue(agency.unlockRead("UnitTestsAgency/Target"));
|
||||||
},
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// @brief test lockWrite
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
testLockWriteInvalid : function () {
|
|
||||||
cleanupLocks();
|
|
||||||
|
|
||||||
var invalidKeys = [ "foo", "bar", "baz", "plans", "PLAN" ];
|
|
||||||
|
|
||||||
invalidKeys.forEach (function (key) {
|
|
||||||
try {
|
|
||||||
agency.lockWrite(key);
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -248,14 +210,14 @@ function AgencySuite () {
|
||||||
testLockWrite : function () {
|
testLockWrite : function () {
|
||||||
cleanupLocks();
|
cleanupLocks();
|
||||||
|
|
||||||
assertTrue(agency.lockWrite("Target"));
|
assertTrue(agency.lockWrite("UnitTestsAgency/Target"));
|
||||||
assertTrue(agency.unlockWrite("Target"));
|
assertTrue(agency.unlockWrite("UnitTestsAgency/Target"));
|
||||||
|
|
||||||
assertTrue(agency.lockWrite("Plan"));
|
assertTrue(agency.lockWrite("UnitTestsAgency/Plan"));
|
||||||
assertTrue(agency.unlockWrite("Plan"));
|
assertTrue(agency.unlockWrite("UnitTestsAgency/Plan"));
|
||||||
|
|
||||||
assertTrue(agency.lockWrite("Current"));
|
assertTrue(agency.lockWrite("UnitTestsAgency/Current"));
|
||||||
assertTrue(agency.unlockWrite("Current"));
|
assertTrue(agency.unlockWrite("UnitTestsAgency/Current"));
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -265,17 +227,17 @@ function AgencySuite () {
|
||||||
testLockWriteDouble : function () {
|
testLockWriteDouble : function () {
|
||||||
cleanupLocks();
|
cleanupLocks();
|
||||||
|
|
||||||
assertTrue(agency.lockWrite("Target", 5));
|
assertTrue(agency.lockWrite("UnitTestsAgency/Target", 5));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// this will fail because of a duplicate lock
|
// this will fail because of a duplicate lock
|
||||||
assertTrue(agency.lockWrite("Target", 1, 1));
|
assertTrue(agency.lockWrite("UnitTestsAgency/Target", 1, 1));
|
||||||
fail();
|
fail();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
}
|
}
|
||||||
|
|
||||||
assertTrue(agency.unlockWrite("Target"));
|
assertTrue(agency.unlockWrite("UnitTestsAgency/Target"));
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -285,14 +247,14 @@ function AgencySuite () {
|
||||||
testLockRelock : function () {
|
testLockRelock : function () {
|
||||||
cleanupLocks();
|
cleanupLocks();
|
||||||
|
|
||||||
assertTrue(agency.lockRead("Target", 5));
|
assertTrue(agency.lockRead("UnitTestsAgency/Target", 5));
|
||||||
|
|
||||||
var start = require("internal").time();
|
var start = require("internal").time();
|
||||||
assertTrue(agency.lockWrite("Target", 5, 10));
|
assertTrue(agency.lockWrite("UnitTestsAgency/Target", 5, 10));
|
||||||
var end = require("internal").time();
|
var end = require("internal").time();
|
||||||
|
|
||||||
assertTrue(Math.round(end - start) >= 3);
|
assertTrue(Math.round(end - start) >= 3);
|
||||||
assertTrue(agency.unlockWrite("Target"));
|
assertTrue(agency.unlockWrite("UnitTestsAgency/Target"));
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue