uncharted-scheduler 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 22af2912d477aba70cd7b7dd1a8e1990aeb970ea
4
- data.tar.gz: ddefcdf0e45a4c188e79190866f53410d4d8bf7e
3
+ metadata.gz: 2dd1f6a6377d75a590d7f3be87c19ff73d9211e6
4
+ data.tar.gz: 0aa6c2371c54cdd12ec83c6f5baefbe00921148c
5
5
  SHA512:
6
- metadata.gz: be6249a8da2ed34ab24191e7c7a944d98ae3a8d48062b5bd9f80b7d7f9673ba374f7349f4f8fcf7f91b85c760f3dffb9b1bebe49a412e32937441baa0160996a
7
- data.tar.gz: 83f00303e70044a5aaa4cb2cbff765df54ca362888115731492c84f0f582aa868de2f30539047c0716df48b8d531ce637ce560265a5fbbcfeb199dff43cc078f
6
+ metadata.gz: 2f5716b5c401687361fffb0f5be63844d29735773738fdb1c159e7813b119a9b471576c05a88f4bf7704bec4ddb36562facbfe1016ef8dbc125f9dd495c6a602
7
+ data.tar.gz: 425793a4501c963036c80570fa351caa1fdf1d3c7ae04d4fb94ef3c55e842ae107e35f77a4cf2035080b167c45d22a1d08a3bc005fa78fab9b48f18221e864d3
data/.travis.yml CHANGED
@@ -1,4 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.1.5
4
+
5
+ services:
6
+ - redis-server
7
+
4
8
  before_install: gem install bundler -v 1.10.5
data/README.md CHANGED
@@ -10,8 +10,7 @@ Uncharted Scheduler allows for scheduling of recurring jobs with [Sidekiq](https
10
10
  Add this line to your application's Gemfile:
11
11
 
12
12
  ```ruby
13
- gem 'uncharted-scheduler',
14
- git: 'https://github.com/unchartedcode/scheduler'
13
+ gem 'uncharted-scheduler'
15
14
  ```
16
15
 
17
16
  And then execute:
@@ -1,52 +1,27 @@
1
+ require 'redlock'
2
+ require 'byebug'
3
+
1
4
  # Cross-process locking using Redis.
2
5
  class DistributedMutex
3
-
4
- def self.synchronize(key, redis=nil, &blk)
5
- self.new(key, redis).synchronize(&blk)
6
+ def self.synchronize(key, redis=nil, timeout=60, &blk)
7
+ self.new(key, redis, timeout).synchronize(&blk)
6
8
  end
7
9
 
8
- def initialize(key, redis=nil)
10
+ def initialize(key, redis=nil, timeout=60)
9
11
  @key = key
10
12
  @redis = redis || $redis
13
+ @lock_manager = Redlock::Client.new([@redis])
14
+ @timeout = timeout
11
15
  @mutex = Mutex.new
12
16
  end
13
17
 
14
18
  # NOTE wrapped in mutex to maintain its semantics
15
19
  def synchronize
16
20
  @mutex.lock
17
- while !try_to_get_lock
18
- sleep 0.001
21
+ @lock_manager.lock(@key, @timeout) do |lock_info|
22
+ yield lock_info
19
23
  end
20
-
21
- yield
22
-
23
24
  ensure
24
- @redis.del @key
25
25
  @mutex.unlock
26
26
  end
27
-
28
- private
29
-
30
- def try_to_get_lock
31
- got_lock = false
32
- if @redis.setnx @key, Time.now.to_i + 60
33
- @redis.expire @key, 60
34
- got_lock = true
35
- else
36
- begin
37
- @redis.watch @key
38
- time = @redis.get @key
39
- if time && time.to_i < Time.now.to_i
40
- got_lock = @redis.multi do
41
- @redis.set @key, Time.now.to_i + 60
42
- end
43
- end
44
- ensure
45
- @redis.unwatch
46
- end
47
- end
48
-
49
- got_lock
50
- end
51
-
52
27
  end
@@ -1,3 +1,3 @@
1
1
  module Scheduler
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/scheduler.gemspec CHANGED
@@ -23,11 +23,11 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
24
  spec.add_development_dependency "rspec"
25
25
  spec.add_development_dependency "sqlite3"
26
- spec.add_development_dependency "mock_redis"
27
26
  spec.add_development_dependency "byebug"
28
27
  spec.add_development_dependency "coveralls"
29
28
 
30
- spec.add_dependency "rails"
29
+ spec.add_dependency "rails", "< 5.0"
31
30
  spec.add_dependency "redis"
32
31
  spec.add_dependency "sidekiq"
32
+ spec.add_dependency "redlock", "0.1.8"
33
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uncharted-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-05-10 00:00:00.000000000 Z
12
+ date: 2016-12-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -68,7 +68,7 @@ dependencies:
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  - !ruby/object:Gem::Dependency
71
- name: mock_redis
71
+ name: byebug
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - ">="
@@ -82,7 +82,7 @@ dependencies:
82
82
  - !ruby/object:Gem::Version
83
83
  version: '0'
84
84
  - !ruby/object:Gem::Dependency
85
- name: byebug
85
+ name: coveralls
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - ">="
@@ -96,21 +96,21 @@ dependencies:
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  - !ruby/object:Gem::Dependency
99
- name: coveralls
99
+ name: rails
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - ">="
102
+ - - "<"
103
103
  - !ruby/object:Gem::Version
104
- version: '0'
105
- type: :development
104
+ version: '5.0'
105
+ type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - ">="
109
+ - - "<"
110
110
  - !ruby/object:Gem::Version
111
- version: '0'
111
+ version: '5.0'
112
112
  - !ruby/object:Gem::Dependency
113
- name: rails
113
+ name: redis
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - ">="
@@ -124,7 +124,7 @@ dependencies:
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
127
- name: redis
127
+ name: sidekiq
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - ">="
@@ -138,19 +138,19 @@ dependencies:
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  - !ruby/object:Gem::Dependency
141
- name: sidekiq
141
+ name: redlock
142
142
  requirement: !ruby/object:Gem::Requirement
143
143
  requirements:
144
- - - ">="
144
+ - - '='
145
145
  - !ruby/object:Gem::Version
146
- version: '0'
146
+ version: 0.1.8
147
147
  type: :runtime
148
148
  prerelease: false
149
149
  version_requirements: !ruby/object:Gem::Requirement
150
150
  requirements:
151
- - - ">="
151
+ - - '='
152
152
  - !ruby/object:Gem::Version
153
- version: '0'
153
+ version: 0.1.8
154
154
  description: Allows you to define recurring workers for Sidekiq without requiring
155
155
  a dedicated job server
156
156
  email:
@@ -202,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
202
202
  version: '0'
203
203
  requirements: []
204
204
  rubyforge_project:
205
- rubygems_version: 2.4.3
205
+ rubygems_version: 2.4.5.1
206
206
  signing_key:
207
207
  specification_version: 4
208
208
  summary: Performance friendly recurring jobs for Sidekiq