mini_scheduler 0.10.0 → 0.11.0
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/app/models/mini_scheduler/stat.rb +2 -0
- data/lib/generators/mini_scheduler/install/install_generator.rb +2 -0
- data/lib/generators/mini_scheduler/install/templates/create_mini_scheduler_stats.rb +2 -0
- data/lib/generators/mini_scheduler/install/templates/mini_scheduler_initializer.rb +2 -0
- data/lib/mini_scheduler.rb +1 -0
- data/lib/mini_scheduler/distributed_mutex.rb +19 -1
- data/lib/mini_scheduler/engine.rb +2 -0
- data/lib/mini_scheduler/manager.rb +15 -10
- data/lib/mini_scheduler/schedule.rb +2 -0
- data/lib/mini_scheduler/schedule_info.rb +2 -0
- data/lib/mini_scheduler/version.rb +3 -1
- data/lib/mini_scheduler/web.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d84546928a92e57ef72f4af8a5125c6d1ac12cddd32cd3b4203f819754b8c754
|
4
|
+
data.tar.gz: a5a8406b9c15ef74ea8729991137ebcc37f80ea4a367e7f9ce5da11cc6620ab9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8b0a9e24bc8b785ffb0a4a01b4cef24a403604ec92851d862533b306ceab23008dad5419a7833e7c4f625d32206604f3308360db8942f61b7c254b0c2603a1d
|
7
|
+
data.tar.gz: e2f99830e4ede44cd66fba4d206cb6d2c16e712e0df30888a8677ec8b5ac6db78d3538da92769985cc84e8f211025f1682c51aa41716a034e39a5b49cdeeb56a
|
data/CHANGELOG.md
CHANGED
data/lib/mini_scheduler.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MiniScheduler
|
2
4
|
class DistributedMutex
|
5
|
+
class Timeout < StandardError; end
|
3
6
|
|
4
7
|
@default_redis = nil
|
5
8
|
|
@@ -18,11 +21,26 @@ module MiniScheduler
|
|
18
21
|
@mutex = Mutex.new
|
19
22
|
end
|
20
23
|
|
24
|
+
MAX_POLLING_ATTEMPTS ||= 60
|
25
|
+
BASE_SLEEP_DURATION ||= 0.001
|
26
|
+
MAX_SLEEP_DURATION ||= 1
|
27
|
+
|
21
28
|
# NOTE wrapped in mutex to maintain its semantics
|
22
29
|
def synchronize
|
23
30
|
@mutex.lock
|
31
|
+
|
32
|
+
attempts = 0
|
33
|
+
sleep_duration = BASE_SLEEP_DURATION
|
24
34
|
while !try_to_get_lock
|
25
|
-
|
35
|
+
|
36
|
+
sleep(sleep_duration)
|
37
|
+
|
38
|
+
if sleep_duration < MAX_SLEEP_DURATION
|
39
|
+
sleep_duration = [sleep_duration * 2, MAX_SLEEP_DURATION].min
|
40
|
+
end
|
41
|
+
|
42
|
+
attempts += 1
|
43
|
+
raise Timeout if attempts >= MAX_POLLING_ATTEMPTS
|
26
44
|
end
|
27
45
|
|
28
46
|
yield
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MiniScheduler
|
2
4
|
class Manager
|
3
5
|
attr_accessor :random_ratio, :redis, :enable_stats, :queue
|
@@ -8,6 +10,8 @@ module MiniScheduler
|
|
8
10
|
@mutex = Mutex.new
|
9
11
|
@queue = Queue.new
|
10
12
|
@manager = manager
|
13
|
+
@hostname = manager.hostname
|
14
|
+
|
11
15
|
@reschedule_orphans_thread = Thread.new do
|
12
16
|
while !@stopped
|
13
17
|
sleep 60
|
@@ -45,20 +49,17 @@ module MiniScheduler
|
|
45
49
|
end
|
46
50
|
|
47
51
|
def hostname
|
48
|
-
@hostname
|
49
|
-
`hostname`
|
50
|
-
rescue
|
51
|
-
"unknown"
|
52
|
-
end
|
52
|
+
@hostname
|
53
53
|
end
|
54
54
|
|
55
55
|
def process_queue
|
56
56
|
|
57
57
|
klass = @queue.deq
|
58
|
-
return unless klass
|
59
|
-
|
60
58
|
# hack alert, I need to both deq and set @running atomically.
|
61
59
|
@running = true
|
60
|
+
|
61
|
+
return if !klass
|
62
|
+
|
62
63
|
failed = false
|
63
64
|
start = Time.now.to_f
|
64
65
|
info = @mutex.synchronize { @manager.schedule_info(klass) }
|
@@ -145,7 +146,8 @@ module MiniScheduler
|
|
145
146
|
sleep 0.001
|
146
147
|
end
|
147
148
|
# this is a hack, but is only used for test anyway
|
148
|
-
|
149
|
+
# if tests fail that depend on this we are forced to increase it.
|
150
|
+
sleep 0.010
|
149
151
|
while @running
|
150
152
|
sleep 0.001
|
151
153
|
end
|
@@ -169,7 +171,6 @@ module MiniScheduler
|
|
169
171
|
|
170
172
|
def initialize(options = nil)
|
171
173
|
@queue = options && options[:queue] || "default"
|
172
|
-
|
173
174
|
@redis = MiniScheduler.redis
|
174
175
|
@random_ratio = 0.1
|
175
176
|
unless options && options[:skip_runner]
|
@@ -192,7 +193,11 @@ module MiniScheduler
|
|
192
193
|
end
|
193
194
|
|
194
195
|
def hostname
|
195
|
-
@hostname ||=
|
196
|
+
@hostname ||= begin
|
197
|
+
`hostname`.strip
|
198
|
+
rescue
|
199
|
+
"unknown"
|
200
|
+
end
|
196
201
|
end
|
197
202
|
|
198
203
|
def schedule_info(klass)
|
data/lib/mini_scheduler/web.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-06-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sidekiq
|