Distributed locking mechanism built on redis.
CoffeeScript Makefile JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.gitignore
.npmignore
LICENSE
Makefile
README.md
circle.yml
index.js
package.json

README.md

node-redis-reservation

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

constructor(by, host, port, heartbeat_interval, lock_ttl, log, password)

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

Arguments
  • 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
Example
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)

lock(resource, callback)

Attempts to lock the resource if it can.

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

wait_until_lock(resource, callback)

Waits until the lock can be acquired for the resource.

Arguments
  • 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.
Example
reservation.wait_until_lock job_name, (err, reserve_key) ->
  return err if err?
  do_job()

release(callback)

Releases the lock.

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