dynalock 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 854bd030d7806c8763eff00fc43d53ccc281c700
4
- data.tar.gz: 9d4e150b94b91c2e32b0d909ed329c309a652fe7
2
+ SHA256:
3
+ metadata.gz: 1f4a5e0eb8835887a34d6a5ea224408acd7422f25c24d3948b84e564ab9195d5
4
+ data.tar.gz: a2ee95736f0530e3ed8370d6f599c044f9be877cebfbbd13c0326cef051e17b2
5
5
  SHA512:
6
- metadata.gz: 37978f44c8b4510bf06a2ed61c5531c0254e07e0061a19aa61cbf0945cce4e36f5035fea85c692d015863308f3eef987fcc016a9ecb7c77f2f370ccc925c230f
7
- data.tar.gz: f5e526cbf19e456995c6e521f35d8ff8d43f9cd60dc543c26820a7d224fe404a22374c5fbf09e5034cd6c2907733ef7ec88ae3666ad50eaaa4ba24b35dab3132
6
+ metadata.gz: 8ddd7cccd14cf904a8ab1f5f3b1327c3fdbea9d6d7da15d87cb14504d387da2b151a284466e93c20da385b1febff9939ce4082c107bcd61e1fc47b3b6be3405d
7
+ data.tar.gz: 04bfe9235c7380e388cf0304fa3f4ceb15691585a03f9a0cc16b0497ae519b1f0435948cf7f60101b120416c73765153e9371111c714ddb1629ede1f0db015aa
@@ -0,0 +1,23 @@
1
+ version: 2
2
+
3
+ jobs:
4
+ build:
5
+ working_directory: ~/dynalock
6
+
7
+ docker:
8
+ - image: circleci/ruby:2.4
9
+
10
+ steps:
11
+ - checkout
12
+
13
+ # Dependencies
14
+ - restore_cache:
15
+ key: gem-cache-{{ checksum "Gemfile.lock" }}
16
+ - run: bundle install --jobs=4 --retry=3 --path vendor/bundle
17
+ - save_cache:
18
+ key: gem-cache-{{ checksum "Gemfile.lock" }}
19
+ paths:
20
+ - vendor/bundle
21
+
22
+ # Test
23
+ - run: bundle exec rake test
data/README.md CHANGED
@@ -1,16 +1,15 @@
1
1
  # Dynalock
2
2
 
3
- Dynalock is a distributed lock that uses dynamod db.
4
-
3
+ *Dynalock* is a distributed lock that uses *DynamoDB*.
5
4
 
6
5
  ## Background
7
6
 
8
- At tourlane we were running cronjobs through AWS ECS. Once the cluster become
9
- too big, Cloudwatch was scheduling tasks, even if the same task was already
10
- present. Dynalock solves this issue, ensuring that any new task exit and fails
7
+ At *Tourlane* we were running cronjobs through *Amazon ECS*. Once the cluster became
8
+ too big, *CloudWatch* was scheduling tasks, even if the same task was already
9
+ present. *Dynalock* solves this issue, ensuring that any new task exits and fails
11
10
  before starting the real work.
12
11
 
13
- The first assumption is that something like this should exists, but normally
12
+ The first assumption is that something like this should exist, but normally
14
13
  not as a command line program (if you found any, please let us know). So we
15
14
  created our own.
16
15
 
@@ -30,21 +29,17 @@ Or install it yourself as:
30
29
 
31
30
  $ gem install dynalock
32
31
 
33
- You need to create a table in dynamo db with "id" as a primary key, and "expires" as expires.
34
- The default table name is "locks"
35
-
32
+ You need to create a table in *DynamoDB* with "id" as a primary key, and "expires" as expires.
33
+ The default table name is "locks".
36
34
 
37
35
  ## Usage
38
36
 
39
-
40
- Set the environment variables to its proper values.
41
-
37
+ Set the following environment variables to their proper values:
42
38
 
43
39
  AWS_ACCESS_KEY_ID
44
40
  AWS_REGION
45
41
  AWS_SECRET_ACCESS_KEY
46
42
 
47
-
48
43
  ### Usage inside ruby
49
44
 
50
45
  ```ruby
@@ -52,7 +47,7 @@ require 'dynalock'
52
47
 
53
48
  include Dynalock::Lock
54
49
 
55
- adquire_lock(context: "my_lock", table: TABLE, owner: @owner, expire_time: 10)
50
+ acquire_lock(context: "my_lock", table: TABLE, owner: @owner, expire_time: 10)
56
51
  refresh_lock(context: "my_lock", table: TABLE, owner: @owner, expire_time: 10)
57
52
  with_lock(context: "my_lock", table: TABLE, owner: @owner) { "Only run this" }
58
53
  ```
@@ -60,19 +55,18 @@ with_lock(context: "my_lock", table: TABLE, owner: @owner) { "Only run this" }
60
55
  Most of the paramenters are optional
61
56
 
62
57
  ```ruby
63
- adquire_lock(context: "my_lock")
58
+ acquire_lock(context: "my_lock")
64
59
  refresh_lock(context: "my_lock")
65
60
  with_lock(context: "my_lock") { "Only run this" }
66
61
  ```
67
62
 
68
-
69
63
  ### Usage through the command line
70
64
 
71
65
  ```sh
72
66
  $ dynalock my_program
73
67
  ```
74
68
 
75
- This will try to adquire to a lock in dynamodb for 10 seconds, and refresh it every 5 seconds and run your program. The command will be context.
69
+ This will try to acquire a lock in *DynamoDB* for 10 seconds, and refresh it every 5 seconds and run your program. The command will be context.
76
70
 
77
71
  ## Development
78
72
 
@@ -88,8 +82,8 @@ git commits and tags, and push the `.gem` file to
88
82
 
89
83
  ## Contributing
90
84
 
91
- Bug reports and pull requests are welcome on GitHub at
92
- https://github.com/guillermo/dynalock. This project is intended to be a safe,
85
+ Bug reports and pull requests are welcome on *GitHub* at
86
+ https://github.com/tourlane/dynalock. This project is intended to be a safe,
93
87
  welcoming space for collaboration, and contributors are expected to adhere to
94
88
  the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
95
89
 
@@ -100,7 +94,7 @@ License](https://opensource.org/licenses/MIT).
100
94
 
101
95
  ## Code of Conduct
102
96
 
103
- Everyone interacting in the Dynalock project’s codebases, issue trackers, chat
97
+ Everyone interacting in the *Dynalock* project’s codebases, issue trackers, chat
104
98
  rooms and mailing lists is expected to follow the [code of
105
- conduct](https://github.com/guillermo/dynalock/blob/master/CODE_OF_CONDUCT.md).
99
+ conduct](https://github.com/tourlane/dynalock/blob/master/CODE_OF_CONDUCT.md).
106
100
 
@@ -6,16 +6,14 @@ require "dynalock/version"
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "dynalock"
8
8
  spec.version = Dynalock::VERSION
9
- spec.authors = ["Guillermo Alarez"]
9
+ spec.authors = ["Guillermo Ávarez"]
10
10
  spec.email = ["guillermo@cientifico.net"]
11
11
 
12
12
  spec.summary = %q{Distributed lock using dynamodb}
13
- spec.description = %q{dynalock is a distributed lock that uses Amazon Web Service Dynamod DB (Ruby api and command line... command)}
13
+ spec.description = %q{dynalock is a distributed lock that uses Amazon Web Service Dynamod DB}
14
14
  spec.homepage = "https://github.com/tourlane/dynalock"
15
15
  spec.license = "MIT"
16
16
 
17
- # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
- # to allow pushing to a single host or delete this section to allow pushing to any host.
19
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
18
  f.match(%r{^(test|spec|features)/})
21
19
  end
@@ -3,12 +3,12 @@ require 'aws-sdk-dynamodb'
3
3
  module Dynalock
4
4
  module Lock
5
5
  class Locked < Exception ; end
6
- def adquire_lock(context:, owner: lock_default_owner, table: "locks", expire_time: 10)
6
+ def acquire_lock(context:, owner: lock_default_owner, table: "locks", expire_time: 10)
7
7
  dynamodb_client.put_item(
8
8
  table_name: table,
9
9
  item: {
10
10
  id: context,
11
- lock_owner: owner,
11
+ lock_owner: owner,
12
12
  expires: Time.now.utc.to_i + expire_time
13
13
  },
14
14
  condition_expression: "attribute_not_exists(expires) OR expires < :expires",
@@ -27,7 +27,7 @@ module Dynalock
27
27
  key: { id: context },
28
28
  update_expression: "SET expires = :expires",
29
29
  condition_expression: "attribute_exists(expires) AND expires > :now AND lock_owner = :owner",
30
- expression_attribute_values: {
30
+ expression_attribute_values: {
31
31
  ":expires": Time.now.utc.to_i + expire_time,
32
32
  ":owner": owner,
33
33
  ":now": Time.now.utc.to_i
@@ -41,7 +41,7 @@ module Dynalock
41
41
  def with_lock(context:, owner: lock_default_owner, table: "locks")
42
42
  expire_time = 5
43
43
 
44
- result = adquire_lock(context: context, owner: owner, table: table, expire_time: expire_time)
44
+ result = acquire_lock(context: context, owner: owner, table: table, expire_time: expire_time)
45
45
  raise Locked.new if result == false
46
46
 
47
47
  thread = Thread.new {
@@ -1,3 +1,3 @@
1
1
  module Dynalock
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynalock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
- - Guillermo Alarez
7
+ - Guillermo Ávarez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-10 00:00:00.000000000 Z
11
+ date: 2018-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-dynamodb
@@ -67,7 +67,6 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '5.0'
69
69
  description: dynalock is a distributed lock that uses Amazon Web Service Dynamod DB
70
- (Ruby api and command line... command)
71
70
  email:
72
71
  - guillermo@cientifico.net
73
72
  executables:
@@ -75,8 +74,8 @@ executables:
75
74
  extensions: []
76
75
  extra_rdoc_files: []
77
76
  files:
77
+ - ".circleci/config.yml"
78
78
  - ".gitignore"
79
- - ".travis.yml"
80
79
  - CODE_OF_CONDUCT.md
81
80
  - Gemfile
82
81
  - Gemfile.lock
@@ -111,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
110
  version: '0'
112
111
  requirements: []
113
112
  rubyforge_project:
114
- rubygems_version: 2.6.8
113
+ rubygems_version: 2.7.8
115
114
  signing_key:
116
115
  specification_version: 4
117
116
  summary: Distributed lock using dynamodb
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4.0
5
- before_install: gem install bundler -v 1.16.0