Sha256: baf477c14df95bf9e43170d23d5a394e218ccf2c9a2ba11fa9238d0681607dc5

Contents?: true

Size: 1.73 KB

Versions: 1

Compression:

Stored size: 1.73 KB

Contents

# SdbLock

Poor man's distributed lock using SimpleDB. It is useful when you don't want to
maintain distributed lock server by yourself.

## Installation

Add this line to your application's Gemfile:

    gem 'sdb_lock'

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install sdb_lock

## Usage

````
require 'sdb_lock'

lock = SdbLock.new(
  'my_app_lock_domain',  # SimpleDB domain name to use
  create_domain: true,   # At the first time, you will need to create domain. Note it might take long time.

  # Other hash members will be passed to AWS::SimpleDB#new as is.
  # You can set credential by other ways including environmental variables.
  # See https://github.com/amazonwebservices/aws-sdk-for-ruby

  # see http://docs.amazonwebservices.com/general/latest/gr/rande.html#sdb_region
  simple_db_endpoint: "sdb.ap-northeast-1.amazonaws.com",
  access_key_id: YOUR_AWS_ACCESS_KEY,
  secret_access_key: YOUR_AWS_SECRET
)

locked = lock.try_lock("a1") do
  # do some work
end

# if you want to block until gain lock, then
lock.lock("a1") do
  # do some work
end

# List locked resource names
lock.locked_resources

# Some times lock might remain because of network failure. Then we'll need
# a way to unlock these.
#
# Unlock older than 10 secs.
lock.unlock_old(10)

````

## Limitation

* Lock might remain by network failure or other reason. See `#unlock_old`.
* Number of domains are limited by SimpleDB.
* Each Lock is represented by an item in SimpleDB. Number of items are limited by SimpleDB.

## Contributing

1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Added some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sdb_lock-0.0.1 README.md