uncharted-scheduler 0.1.2 → 0.1.3

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
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