Skip to content

SmartThingsOSS/cqllock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cqllock

Command-line tool to create and delete distributed locks using Cassandra and lightweight transactions. These tools are useful for managing distributed jobs on multiple hosts.

Usage

Set up a config file at ~/.cqllockrc or /etc/cqllock.yaml in the following YAML format:

seeds:
- cassandra-seed1.domain.com
- optional-cassandra-seed2.domain.com
- etc
keyspace: keyspace_containing_lock_table
table: lock_table_name
username: optional-username-if-using-auth
password: optional-password-if-using-auth
certpath: /path/to/optional/client/cert/if/using/SSL.pem
keypath: /path/to/optional/client/key/if/using/SSL.key
timeout: 10  # This is the Cassandra connectiont timeout in seconds
retries: 3   # This is the number of times to retry failed Cassandra queries

Possible scenarios

Ensure a process only runs once ever, regardless of how many times or on what host it's attempted:
cqllock ProcessLock && ./myProcess.sh

The first call to cqllock that successfully acquires the lock will hold it forever. Further calls to cqllock will return non-zero, so ./myProcess.sh won't run again. This command can be run on multiple hosts.

Multiple hosts run a job, but only allow one at a time:
cqllock -t 1d -r 5m jobLock && ./myJob.sh ; cqllock -u jobLock

The first host to acquire the lock will hold it until ./myJob.sh finishes. Other hosts will attempt to acquire the lock every five minutes and will wait up to one day trying to reaquire the lock.

There are likely other useful scenarios.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •