Skip to content

Instantly share code, notes, and snippets.

@othiym23
Created August 15, 2014 21:47
Show Gist options
  • Save othiym23/0e79c0c4f4865e803bc6 to your computer and use it in GitHub Desktop.
Save othiym23/0e79c0c4f4865e803bc6 to your computer and use it in GitHub Desktop.
lockfile tester
var resolve = require("path").resolve
var lock = require("lockfile").lock
var FILE = resolve(__dirname, "LOCKFILE")
var PID = process.pid
var OPTIONS = {retries : 0}
var SCALE = 16
var results = []
var running = SCALE
var timestamp
function getlock(id) {
process.nextTick(function () {
lock(FILE, OPTIONS, function (er) {
results.push({
pid : PID,
id : id,
locked : !er,
delta : process.hrtime(timestamp)
})
running--
if (!running) process.send(results)
})
})
}
process.on("message", function (message) {
if (message.code === "go") {
timestamp = message.timestamp
for (var i = 0; i < SCALE; i++) getlock(i)
}
else if (message.code === "done") {
process.exit(0)
}
})
process.send("ready")
var resolve = require("path").resolve
var fork = require("child_process").fork
var MODULE = resolve(__dirname, "bam.js")
var SCALE = 16
var STARTUP = process.hrtime()
var results = []
var starting = SCALE
var finished = 0
var children = []
for (var i = 0; i < SCALE; i++) {
children[i] = fork(MODULE)
children[i].on("message", onMessage)
}
function onMessage(message) {
if (message === "ready") {
starting--
if (!starting) go()
}
else {
results = results.concat(message)
finished++
if (finished === SCALE) done()
}
}
function go() {
for (var j = 0; j < SCALE; j++) {
children[j].send({code : "go", timestamp : STARTUP})
}
}
function done() {
var j
for (j = 0; j < SCALE; j++) children[j].send({code : "done"})
results.sort(function (a, b) { return a.delta[1] - b.delta[1] })
for (j = 0; j < results.length; j++) {
var result = results[j]
console.log(
"%s %s\t%s\t%s",
result.locked ? "LOCK" : " ",
result.pid,
result.id,
result.delta[1]
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment