diff --git a/client.html b/client.html
index 01611d8..a650994 100644
--- a/client.html
+++ b/client.html
@@ -51,53 +51,6 @@ var runTry = null;
-/*
-
-function sendLocks(addr) {
- for (var i in testLocks) {
- log ("testLog[" + i + "]");
- var l = testLocks[i];
- var m = new Object();
-
- m["query"] = "addLock";
- m["type"] = "test";
- m["name"] = l["name"];
- m["addr"] = l["addr"];
- m["locked"] = l["locked"];
- m["perjob"] =
-
-
- m["time"] = l["time"];
- if (l.running) {
- m["running"] = true;
- m["min"] = l["min"];
- m["max"] = l["max"];
- m["perjob"] = l["perjob"];
- }
- sendMsg(m, addr);
- }
- for (var i in rangeLocks) {
- var r = rangeLocks[i];
- while(r) {
- log("rangeLock[" + i +" [" + r.start + "-" + r.end +"]]");
- var m = new Object();
- m["query"] = "addLock";
- m["type"] = "range";
- m["name"] = i;
- m["addr"] = r["addr"]
- m["locked"] = r["locked"];
- m["start"] = r["start"];
- m["end"] = r["end"];
- m["done"] = r["done"];
- if (r['results'])
- m["results"] = r["results"];
-
- sendMsg(m, addr);
- r = r.next;
- }
- }
-} */
-
function sendTests(addr) {
for(var i in tests) {
var m = makeTestMsg(name);
@@ -105,34 +58,6 @@ function sendTests(addr) {
}
}
-/*
-function handleAddLock(resp) {
- if(resp['locked'] == null)
- resp['locked'] = false;
- // dont add/overwrite if exists?
- var lock = retrieveLock(resp);
-
- if (resp['type'] == "test" ) {//&& (lock == null || lock.addr == null)) {
- var locks = getLockType(resp['type']);
-
-
- locks[resp['name']] = resp
- if(resp['running'] == true) {
- runningTests.push(resp['name']);
- }
- } else if(resp['type'] == "range" && lock.addr == null) {
- log("Add range lock: " + resp['name'] + " (" + resp['start'] + " to " + resp['end'] + ") : ");
- var lock = getRangeLock(resp['name'], resp['start'], resp['end']);
-
- lock.addr = resp['addr'];
- lock.locked = resp['locked'];
- lock.done = resp['done'];
- lock.results = resp['results'];
- lock.name = resp['name'];
- }
-}
-*/
-
function packArray(arr) {
if (arr instanceof Object) {
var str = "{";
@@ -204,51 +129,6 @@ function packResults(res) {
}
-/*
-function removeNodeRangeLocks(addr) {
- for(var i in rangeLocks) {
- log("freeing " + i + " locks");
- var rlock = rangeLocks[i];
- while (rlock != null) {
- log("looking at " + i + " (" + rlock.start + " to " + rlock.end + ") : " + rlock.addr);
- if (rlock.addr == addr) {
- log("unlocking");
- rlock.locked = false;
- }
- rlock = rlock.next;
- }
- }
-}
-*/
-
-function disconnect(addr) {
-/* log("--------------DISCONNECT " + addr + "----------");
- // remove from connections list
- for (var i=0; i < connections.length; i++) {
- if (connections[i] == addr) {
- connections.splice(i,1);
- numberOfNodes--;
- break;
- }
- }*/
- // remove locks
- // test locks
- /*for(var i in testLocks) {
- var lock = testLocks[i];
- if (!lock)
- continue;
- if (lock.addr == addr) {
- lock.locked = false;
- }
- }*/
- // range locks
- //removeNodeRangeLocks(addr);
-
- log("disconnect: freeing range locks");
-}
-
-
-
function encodeStr(str) {
var res="";
for(i=0; i end) {
- log("GAP between (" + rlock.start + " to " + rlock.end + ") and (" + rlock.next.start + " to " + rlock.next.end + ") where we should be so MAKING THERE");
- var nlock = rlock.next;
- rlock.next = genRangeCell(name, start, end);
- rlock.next.next = nlock;
- return rlock.next;
- }
-
- rlock = rlock.next;
- }
- log("SEARCH ended");
- if (rlock.start == start && rlock.end == end) {
- log("Found it!");
- return rlock;
- } else {
- if (rlock.end < start) {
- log("There is space at the end to make what we want");
- rlock.next = genRangeCell(name, start, end);
- return rlock.next;
- } else {
- log("search ended after what we wanted, FAIL");
- return null;
- }
- }
-
-}
-*/
-
function makeRangeLock(tlock, suggestedSize) {
suggestedSize--;
diff --git a/cortexLocks.js b/cortexLocks.js
index 70bd618..a83ea0b 100644
--- a/cortexLocks.js
+++ b/cortexLocks.js
@@ -23,18 +23,18 @@ function registerLockFn(ltype, fnName, fn) {
}
function execLockFn(family, fnName, args) {
+ args["family"] = family;
ltype = locks[family].type;
args["locks"] = locks[family].locks;
return execFn("locks."+ltype+"."+fnName, args);
}
/**** Lock Functions
- * BR retriveLock(details) # get lock data struct (lookup?)
- * BR removeLocks(addr/owner)
+ * BR lookup(details) # get lock data struct (lookup?)
+ * BR remove(addr/owner)
* BR isLocked(details)
- * getLock(details) # aquire lock (aquire?)
- * equals(a, b)
- * lock
+ * BR aquire(details) # aquire lock (aquire?)
+ * BR equals(a, b)
* release
* make?
*/
@@ -134,7 +134,7 @@ function (args) {
});
-registerLockFn("basic", "removeLocks",
+registerLockFn("basic", "remove",
function(args) {
for(var i in args['locks']) {
var lock = args['locks'][i];
@@ -147,7 +147,7 @@ function(args) {
});
-registerLockFn("range", "removeLocks",
+registerLockFn("range", "remove",
function(args) {
for(var i in args['locks']) {
log("freeing " + i + " locks");
@@ -163,6 +163,113 @@ function(args) {
}
});
+function genLockTry(lockTry) {
+ lockTry.time = getTime();
+ lockTry.dlc = dlc+1;
+ lockTry.name = name;
+ lockTry.addr = localNodeAddr;
+ lockTry.type = type;
+ lockTry.okay = 1;
+ lockTry.locked = false;
+ var d = new Date();
+ lockTry.localTime = d.getTime();
+}
+
+function genGetLockMsg() {
+ var m = new Object();
+ m["query"] = "getLock";
+ m["time"] = lockTry.time;
+ m["addr"] = localNodeAddr;
+ return m;
+}
+
+registerLockFn("basic", "aquire",
+function(args) {
+ var locks = args['locks'];
+ var name = args['name'];
+ var lockTry;
+
+ if(locks[name] == null) {
+ locks[name] = new Object();
+ }
+ lockTry = locks[name];
+
+ genLockTry(lockTry);
+
+ lockTrys[args['family']] = lockTry;
+ setTestStatus("Acquiring lock for test '" + name + "' " + lockTry.okay + "/" + numberOfNodes + "...", "yellow");
+
+ var m = getLockMsg();
+ m["name"] = name;
+ m["type"] = "basic";
+
+ bcastMsg(m);
+});
+
+registerLockFn("range", "aquire",
+function(args) {
+ var name = args['name'];
+ var start = args['start'];
+ var end = args['end'];
+
+ lockTry = getRangeLock(args['locks'], name, start, end);
+ if (!lockTry) {
+ error("Cannot get range lock in getLock(" + name +", "+ start + ", " + end + ")");
+ return;
+ }
+
+ genLockTry(lockTry);
+
+ lockTrys[args['family']] = lockTry;
+ setWorkStatus("Acquiring lock for work '" + name + "' (" + lockTry.start + " to " + lockTry.end + ")" + lockTry.okay + "/" + numberOfNodes + "...", "yellow");
+
+ var m = getLockMsg();
+ m["name"] = name;
+ m["type"] = "range";
+
+
+ m["start"] = start;
+ m["end"] = end;
+
+ bcastMsg(m);
+});
+
+function lockTypesEqual(a, b) {
+ if(a == null || b == null)
+ return false;
+ if(a['type'] != b['type'])
+ return false;
+ return true;
+}
+
+registerLockFn("basic", "equals",
+function(args) { // locksEqual(a, b)
+ var a = args['a'];
+ var b = arbs['b'];
+ if (!lockTypesEqual(a, b))
+ return false;
+ if (a.name == b.name)
+ return true;
+ else
+ return false;
+});
+
+registerLockFn("range", "equals",
+function(args) { // locksEqual(a, b)
+ var a = args['a'];
+ var b = arbs['b'];
+ if (!lockTypesEqual(a, b))
+ return false;
+
+ log("locksEqual? " + a.name + " (" + a.start + " to " + a.end + ") and " + b.name + " (" + b.start + " to " + b.end + ")");
+ if (a.name == b.name && a.start == b.start && a.end == b.end) {
+ log("true");
+ return true;
+ } else {
+ log("false");
+ return false;
+ }
+});
/**** Logical Lock using functions