resqued 0.7.4 → 0.7.6
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/lib/resqued/listener.rb +13 -7
- data/lib/resqued/master.rb +1 -1
- data/lib/resqued/version.rb +1 -1
- data/lib/resqued/worker.rb +4 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4fb0bcb7e96b0df5bfa4dfa32340b99a5eea002
|
4
|
+
data.tar.gz: 76710f5182ec2f97a5136619a0ac573c40c6d96a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9fddc96d14a8c6905d4b8220debe910d88a2a7bc8c6566b9b933117bb7b0f9752a0a339d0c59e6fb06f15894b6779894b776393679ef835f9e2f5afddfdf4649
|
7
|
+
data.tar.gz: dbea0b63b9e6c85593540cb76a2f74e427def5a34e492dcd8a4f9ab7f4d5d32b84078c92ad7c3b85b87e9e451cf5f721b2c6cb39cfe702a7194ccd709329eff2
|
data/lib/resqued/listener.rb
CHANGED
@@ -19,7 +19,7 @@ module Resqued
|
|
19
19
|
# Runs in the master process.
|
20
20
|
def initialize(options)
|
21
21
|
@config_paths = options.fetch(:config_paths)
|
22
|
-
@
|
22
|
+
@old_workers = options.fetch(:old_workers) { [] }.freeze
|
23
23
|
@socket = options.fetch(:socket)
|
24
24
|
@listener_id = options.fetch(:listener_id) { nil }
|
25
25
|
end
|
@@ -31,7 +31,7 @@ module Resqued
|
|
31
31
|
socket_fd = @socket.to_i
|
32
32
|
ENV['RESQUED_SOCKET'] = socket_fd.to_s
|
33
33
|
ENV['RESQUED_CONFIG_PATH'] = @config_paths.join(':')
|
34
|
-
ENV['RESQUED_STATE'] = (@
|
34
|
+
ENV['RESQUED_STATE'] = (@old_workers.map { |r| "#{r[:pid]}|#{r[:queue]}" }.join('||'))
|
35
35
|
ENV['RESQUED_LISTENER_ID'] = @listener_id.to_s
|
36
36
|
ENV['RESQUED_MASTER_VERSION'] = Resqued::VERSION
|
37
37
|
log "exec: #{Resqued::START_CTX['$0']} listener"
|
@@ -48,7 +48,7 @@ module Resqued
|
|
48
48
|
options[:config_paths] = path.split(':')
|
49
49
|
end
|
50
50
|
if state = ENV['RESQUED_STATE']
|
51
|
-
options[:
|
51
|
+
options[:old_workers] = state.split('||').map { |s| Hash[[:pid,:queue].zip(s.split('|'))] }
|
52
52
|
end
|
53
53
|
if listener_id = ENV['RESQUED_LISTENER_ID']
|
54
54
|
options[:listener_id] = listener_id
|
@@ -127,8 +127,9 @@ module Resqued
|
|
127
127
|
|
128
128
|
# Private: send a signal to all the workers.
|
129
129
|
def kill_all(signal)
|
130
|
-
|
131
|
-
|
130
|
+
idle, running = partition_workers
|
131
|
+
log "kill -#{signal} #{running.map { |r| r.pid }.inspect}"
|
132
|
+
running.each { |worker| worker.kill(signal) }
|
132
133
|
end
|
133
134
|
|
134
135
|
# Private: all available workers
|
@@ -136,7 +137,12 @@ module Resqued
|
|
136
137
|
|
137
138
|
# Private: just the running workers.
|
138
139
|
def running_workers
|
139
|
-
|
140
|
+
partition_workers.last
|
141
|
+
end
|
142
|
+
|
143
|
+
# Private: Split the workers into [not-running, running]
|
144
|
+
def partition_workers
|
145
|
+
workers.partition { |worker| worker.idle? }
|
140
146
|
end
|
141
147
|
|
142
148
|
# Private.
|
@@ -204,7 +210,7 @@ module Resqued
|
|
204
210
|
# Private.
|
205
211
|
def init_workers(config)
|
206
212
|
@workers = config.build_workers
|
207
|
-
@
|
213
|
+
@old_workers.each do |running_worker|
|
208
214
|
if blocked_worker = @workers.detect { |worker| worker.idle? && worker.queue_key == running_worker[:queue] }
|
209
215
|
blocked_worker.wait_for(running_worker[:pid].to_i)
|
210
216
|
end
|
data/lib/resqued/master.rb
CHANGED
@@ -111,7 +111,7 @@ module Resqued
|
|
111
111
|
|
112
112
|
def start_listener
|
113
113
|
return if @current_listener || @listener_backoff.wait?
|
114
|
-
@current_listener = ListenerProxy.new(:config_paths => @config_paths, :
|
114
|
+
@current_listener = ListenerProxy.new(:config_paths => @config_paths, :old_workers => all_listeners.map { |l| l.running_workers }.flatten, :listener_id => next_listener_id)
|
115
115
|
@current_listener.run
|
116
116
|
listener_status @current_listener, 'start'
|
117
117
|
@listener_backoff.started
|
data/lib/resqued/version.rb
CHANGED
data/lib/resqued/worker.rb
CHANGED
@@ -13,6 +13,7 @@ module Resqued
|
|
13
13
|
@config = options.fetch(:config)
|
14
14
|
@interval = options[:interval]
|
15
15
|
@backoff = Backoff.new
|
16
|
+
@pids = []
|
16
17
|
end
|
17
18
|
|
18
19
|
# Public: The pid of the worker process.
|
@@ -35,11 +36,13 @@ module Resqued
|
|
35
36
|
def wait_for(pid)
|
36
37
|
raise "Already running #{@pid} (can't wait for #{pid})" if @pid
|
37
38
|
@self_started = false
|
39
|
+
@pids << pid
|
38
40
|
@pid = pid
|
39
41
|
end
|
40
42
|
|
41
43
|
# Public: The old worker process finished!
|
42
44
|
def finished!(process_status)
|
45
|
+
log :debug, "I (#{@pid}/#{@pids.inspect}/self_started=#{@self_started}/killed=#{@killed}) died like this: #{process_status}"
|
43
46
|
@pid = nil
|
44
47
|
@backoff.died unless @killed
|
45
48
|
end
|
@@ -56,6 +59,7 @@ module Resqued
|
|
56
59
|
@self_started = true
|
57
60
|
@killed = false
|
58
61
|
if @pid = fork
|
62
|
+
@pids << @pid
|
59
63
|
# still in the listener
|
60
64
|
log "Forked worker #{@pid}"
|
61
65
|
else
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resqued
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Burke
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kgio
|