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