redis-reservation

Resource reservation (locking) libraries using a Redis backend, with customizable timeouts and keep-alive support.

node-redis-reservation

redis reservations are like locks/mutexes except they can expire.

Creates a new redis-reservation which includes setting up redis connection credentials.

  • by - The worker name
  • host - Redis host to connect to
  • port - Redis port to connect to
  • heartbeat_interval - Renew the lock at every heartbeat_interval milliseconds
  • lock_ttl - Renew the lock for lock_ttl seconds
  • log - Log to use or else defaults to console.log
  • password - Password to authenticate with redis server
ReserveResource = require 'redis-reservation'
 
reservation = new ReserveResource
  'worker-name',
  process.env.REDIS_HOST,
  process.env.REDIS_PORT,
  10 * 60 * 1000,           # 10 minutes
  30 * 60                   # 30 minutes
  # log,                     # defaults to console.log
  # password                # defaults to no password (empty string)

Attempts to lock the resource if it can.

  • resource - The key to use to uniquely identify this lock
  • callback(err, lock_status) - lock_status is true if lock was acquired, false otherwise.
reservation.lock job_name, (err, lock_status) ->
  return err if err?
  if lock_status
    do_job()
  else
    console.log 'Reservation already held'

Waits until the lock can be acquired for the resource.

  • resource - The key to use to uniquely identify this lock
  • callback(err, reserve_key) - callback is called only when the lock can be acquired. reserve_key is the name of the key in redis that was used to acquire the lock.
reservation.wait_until_lock job_name, (err, reserve_key) ->
  return err if err?
  do_job()

Releases the lock.

  • callback(err) - Callback to be called once the lock is released, or error.
reservation.release (err) ->
  if err?
    console.log 'Could not release lock, maybe the reservation was already lost?'
  return err