0.03
No release in over 3 years
Low commit activity in last 3 years
This library implements application mutexes using Redis. The mutexes are shared between separate threads, processes, or machines. Locks are acquired with an expiration time so if process that holds a lock dies unexpectedly, the lock is released automatically after a certain duration.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.1.4
>= 12.3.3
~> 3.0

Runtime

>= 3.0, < 5
 Project Readme

MasterLock

Build Status Coverage Status Gem Version

MasterLock is a Ruby library for interprocess locking using Redis. Critical sections of code can be wrapped in a MasterLock block that ensures only one thread will run the code at a time. The locks are resilient to process failures by expiring after the thread obtaining them dies.

Installation

Add this line to your application's Gemfile:

gem 'master_lock'

And then execute:

$ bundle

Or install it yourself as:

$ gem install master_lock

Usage

def perform_safe_operation
  MasterLock.synchronize("perform_safe_operation") do
    # Code executes within locked context
  end
end

# Call MasterLock.start when your application boots up.
# This starts a background thread to prevent locks from expiring.
MasterLock.start

See documentation for advanced usage.

Development

After checking out the repo, run bundle install to install the gem dependencies.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Testing

If you do not have Redis set up, run brew install redis. This gives you access to redis-server.

To set up the redis instance, run redis-server in the project level directory. The default config should be located at /usr/local/etc/redis.conf.

To set up the redis cluster, copy your redis-server executable to cluster-test/redis-server. Open up 6 terminal tabs, and in every tab, start every instance:

cd cluster-test/7000
../redis-server ./redis.conf

Assuming you have at least Redis 5, create your cluster by running the following:

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1

Then, run rake spec to run the tests.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/coinbase/master_lock.

License

The gem is available as open source under the terms of the MIT License.