From 4ab4e27724b27a9330b0e781bab201b7a77fb473 Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 13 Apr 2016 16:27:53 +0100 Subject: [PATCH] Include COUNT in lock and make RND per-process incase randomBytes blocks --- services/document-updater/app/coffee/LockManager.coffee | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/document-updater/app/coffee/LockManager.coffee b/services/document-updater/app/coffee/LockManager.coffee index 1c592c23f4..0c4eaad320 100644 --- a/services/document-updater/app/coffee/LockManager.coffee +++ b/services/document-updater/app/coffee/LockManager.coffee @@ -9,6 +9,8 @@ crypto = require "crypto" HOST = os.hostname() PID = process.pid +RND = crypto.randomBytes(4).toString('hex') +COUNT = 0 module.exports = LockManager = LOCK_TEST_INTERVAL: 50 # 50ms between each test of the lock @@ -20,8 +22,7 @@ module.exports = LockManager = # to prevent accidental unlocking by multiple processes randomLock : () -> time = Date.now() - RND = crypto.randomBytes(4).toString('hex') - return "locked:host=#{HOST}:pid=#{PID}:random=#{RND}:time=#{time}" + return "locked:host=#{HOST}:pid=#{PID}:random=#{RND}:time=#{time}:count=#{COUNT++}" unlockScript: 'if redis.call("get", KEYS[1]) == ARGV[1] then return redis.call("del", KEYS[1]) else return 0 end';