delayed_job_master 1.0.0 → 1.1.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/.travis.yml +2 -2
- data/README.md +10 -3
- data/lib/delayed/master/callback.rb +1 -1
- data/lib/delayed/master/dsl.rb +1 -1
- data/lib/delayed/master/signal_handler.rb +10 -6
- data/lib/delayed/master/version.rb +1 -1
- data/lib/delayed/master/worker_pool.rb +12 -2
- data/lib/delayed/worker/plugins/memory_checker.rb +12 -8
- data/lib/delayed/worker/plugins/signal_handler.rb +22 -18
- data/lib/delayed/worker/plugins/status_notifier.rb +12 -8
- data/lib/generators/delayed_job_master/config_generator.rb +16 -0
- data/lib/generators/{templates → delayed_job_master/templates}/config.rb +7 -0
- data/lib/generators/{templates → delayed_job_master/templates}/script +0 -0
- metadata +5 -5
- data/lib/generators/delayed_job_master_generator.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac6f45642e4c4848deea50d7819bfef1f0d17b8c
|
4
|
+
data.tar.gz: ac6ba6a5386a2f3d2cb72f495ce5c4bc06f5e266
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74016c0784861d3f3b2c43b8ff6bc2cd2dfe2252918f4848d752073218aea50b53bb372307e823c9f9b3cf8dc596d5617a0b1d0740e1d12873e289e0fcc074c3
|
7
|
+
data.tar.gz: 9ca2c253636b19f8810ba693ea9bc5c8ac6d2b8278a33aec12af5548cb17712f1f90cd0d94e8025daac1c539ffb805b84ee497ce86cdcd95cb61636b7ce1cdcb
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -16,7 +16,7 @@ A simple delayed_job master process to control multiple workers.
|
|
16
16
|
* ruby 2.3+
|
17
17
|
* delayed_job 4.1
|
18
18
|
|
19
|
-
Supported delayed_job backends
|
19
|
+
## Supported delayed_job backends
|
20
20
|
|
21
21
|
* delayed_job_active_record 4.1
|
22
22
|
* delayed_job_mongoid 2.3
|
@@ -33,9 +33,9 @@ And then execute:
|
|
33
33
|
|
34
34
|
$ bundle
|
35
35
|
|
36
|
-
Create
|
36
|
+
Create config files:
|
37
37
|
|
38
|
-
$ rails generate delayed_job_master
|
38
|
+
$ rails generate delayed_job_master:config
|
39
39
|
|
40
40
|
This command creates `bin/delayed_job_master` and `config/delayed_job_master.rb`.
|
41
41
|
|
@@ -96,6 +96,13 @@ end
|
|
96
96
|
after_fork do |master, worker_info|
|
97
97
|
Delayed::Worker.after_fork if defined?(Delayed::Worker)
|
98
98
|
end
|
99
|
+
|
100
|
+
before_monitor do |master|
|
101
|
+
ActiveRecord::Base.connection.verify! if defined?(ActiveRecord::Base)
|
102
|
+
end
|
103
|
+
|
104
|
+
after_monitor do |master|
|
105
|
+
end
|
99
106
|
```
|
100
107
|
|
101
108
|
## Usage
|
@@ -2,7 +2,7 @@ module Delayed
|
|
2
2
|
class Master
|
3
3
|
class Callback
|
4
4
|
def initialize(config = {})
|
5
|
-
@config = config.select { |k, _|
|
5
|
+
@config = config.select { |k, _| Delayed::Master::DSL::CALLBACK_CONFIGS.include?(k) }
|
6
6
|
end
|
7
7
|
|
8
8
|
def run(name, *args)
|
data/lib/delayed/master/dsl.rb
CHANGED
@@ -2,7 +2,7 @@ module Delayed
|
|
2
2
|
class Master
|
3
3
|
class DSL
|
4
4
|
SIMPLE_CONFIGS = [:working_directory, :log_file, :log_level, :pid_file, :monitor_wait]
|
5
|
-
CALLBACK_CONFIGS = [:before_fork, :after_fork]
|
5
|
+
CALLBACK_CONFIGS = [:before_fork, :after_fork, :before_monitor, :after_monitor]
|
6
6
|
|
7
7
|
attr_reader :config
|
8
8
|
|
@@ -30,14 +30,18 @@ module Delayed
|
|
30
30
|
def dispatch(signal)
|
31
31
|
@worker_infos.each do |worker_info|
|
32
32
|
next unless worker_info.pid
|
33
|
-
|
34
|
-
Process.kill signal, worker_info.pid
|
35
|
-
@logger.info "sent #{signal} signal to worker #{worker_info.pid}"
|
36
|
-
rescue
|
37
|
-
@logger.error "failed to send #{signal} signal to worker #{worker_info.pid}"
|
38
|
-
end
|
33
|
+
dispatch_to(signal, worker_info.pid)
|
39
34
|
end
|
40
35
|
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def dispatch_to(signal, pid)
|
40
|
+
Process.kill signal, pid
|
41
|
+
@logger.info "sent #{signal} signal to worker #{pid}"
|
42
|
+
rescue
|
43
|
+
@logger.error "failed to send #{signal} signal to worker #{pid}"
|
44
|
+
end
|
41
45
|
end
|
42
46
|
end
|
43
47
|
end
|
@@ -27,8 +27,10 @@ module Delayed
|
|
27
27
|
def monitor_while(&block)
|
28
28
|
loop do
|
29
29
|
break if block.call
|
30
|
-
|
31
|
-
|
30
|
+
monitor do
|
31
|
+
check_pid
|
32
|
+
check_dynamic_worker
|
33
|
+
end
|
32
34
|
sleep @config.monitor_wait.to_i
|
33
35
|
end
|
34
36
|
end
|
@@ -63,6 +65,14 @@ module Delayed
|
|
63
65
|
worker
|
64
66
|
end
|
65
67
|
|
68
|
+
def monitor
|
69
|
+
@callback.run(:before_monitor, @master)
|
70
|
+
yield
|
71
|
+
@callback.run(:after_monitor, @master)
|
72
|
+
rescue Exception => e
|
73
|
+
@logger.warn "#{e.class}: #{e.message} at #{__FILE__}: #{__LINE__}"
|
74
|
+
end
|
75
|
+
|
66
76
|
def check_pid
|
67
77
|
pid = wait_pid
|
68
78
|
return unless pid
|
@@ -1,13 +1,17 @@
|
|
1
1
|
require 'get_process_mem'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
module Delayed
|
4
|
+
module Plugins
|
5
|
+
class WorkerMemoryChecker < Delayed::Plugin
|
6
|
+
callbacks do |lifecycle|
|
7
|
+
lifecycle.after(:perform) do |worker, job|
|
8
|
+
next unless worker.max_memory
|
9
|
+
mem = GetProcessMem.new
|
10
|
+
if mem.mb > worker.max_memory
|
11
|
+
worker.master_logger.info "shutting down worker #{Process.pid} because it consumes large memory #{mem.mb.to_i} MB..."
|
12
|
+
worker.stop
|
13
|
+
end
|
14
|
+
end
|
11
15
|
end
|
12
16
|
end
|
13
17
|
end
|
@@ -1,26 +1,30 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
module Delayed
|
2
|
+
module Plugins
|
3
|
+
class SignalHandler < Delayed::Plugin
|
4
|
+
callbacks do |lifecycle|
|
5
|
+
lifecycle.before(:execute) do |worker|
|
6
|
+
worker.instance_eval do
|
7
|
+
trap('USR1') do
|
8
|
+
Thread.new do
|
9
|
+
master_logger.info "reopening files..."
|
10
|
+
Delayed::Util::FileReopener.reopen
|
11
|
+
master_logger.info "reopened"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
trap('USR2') do
|
15
|
+
Thread.new do
|
16
|
+
$0 = "#{$0} [OLD]"
|
17
|
+
master_logger.info "shutting down worker #{Process.pid}..."
|
18
|
+
stop
|
19
|
+
end
|
20
|
+
end
|
10
21
|
end
|
11
22
|
end
|
12
|
-
|
13
|
-
|
14
|
-
$0 = "#{$0} [OLD]"
|
15
|
-
master_logger.info "shutting down worker #{Process.pid}..."
|
16
|
-
stop
|
17
|
-
end
|
23
|
+
lifecycle.after(:execute) do |worker|
|
24
|
+
worker.master_logger.info "shut down worker #{Process.pid}"
|
18
25
|
end
|
19
26
|
end
|
20
27
|
end
|
21
|
-
lifecycle.after(:execute) do |worker|
|
22
|
-
worker.master_logger.info "shut down worker #{Process.pid}"
|
23
|
-
end
|
24
28
|
end
|
25
29
|
end
|
26
30
|
|
@@ -1,11 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
module Delayed
|
2
|
+
module Plugins
|
3
|
+
class StatusNotifier < Delayed::Plugin
|
4
|
+
callbacks do |lifecycle|
|
5
|
+
lifecycle.around(:perform) do |worker, job, &block|
|
6
|
+
title = $0
|
7
|
+
$0 = "#{title} [BUSY]"
|
8
|
+
ret = block.call
|
9
|
+
$0 = title
|
10
|
+
ret
|
11
|
+
end
|
12
|
+
end
|
9
13
|
end
|
10
14
|
end
|
11
15
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module DelayedJobMaster
|
4
|
+
class ConfigGenerator < Rails::Generators::Base
|
5
|
+
source_root File.join(File.dirname(__FILE__), 'templates')
|
6
|
+
|
7
|
+
def create_script_file
|
8
|
+
template 'script', 'bin/delayed_job_master'
|
9
|
+
chmod 'bin/delayed_job_master', 0o755
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_config_file
|
13
|
+
template 'config.rb', 'config/delayed_job_master.rb'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -50,3 +50,10 @@ end
|
|
50
50
|
after_fork do |master, worker_info|
|
51
51
|
Delayed::Worker.after_fork if defined?(Delayed::Worker)
|
52
52
|
end
|
53
|
+
|
54
|
+
before_monitor do |master|
|
55
|
+
ActiveRecord::Base.connection.verify! if defined?(ActiveRecord::Base)
|
56
|
+
end
|
57
|
+
|
58
|
+
after_monitor do |master|
|
59
|
+
end
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_job_master
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshikazu Kaneta
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: delayed_job
|
@@ -170,9 +170,9 @@ files:
|
|
170
170
|
- lib/delayed/worker/plugins/memory_checker.rb
|
171
171
|
- lib/delayed/worker/plugins/signal_handler.rb
|
172
172
|
- lib/delayed/worker/plugins/status_notifier.rb
|
173
|
-
- lib/generators/
|
174
|
-
- lib/generators/templates/config.rb
|
175
|
-
- lib/generators/templates/script
|
173
|
+
- lib/generators/delayed_job_master/config_generator.rb
|
174
|
+
- lib/generators/delayed_job_master/templates/config.rb
|
175
|
+
- lib/generators/delayed_job_master/templates/script
|
176
176
|
homepage: https://github.com/kanety/delayed_job_master
|
177
177
|
licenses:
|
178
178
|
- MIT
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'rails/generators'
|
2
|
-
|
3
|
-
class DelayedJobMasterGenerator < Rails::Generators::Base
|
4
|
-
source_root File.join(File.dirname(__FILE__), 'templates')
|
5
|
-
|
6
|
-
def create_script_file
|
7
|
-
template 'script', 'bin/delayed_job_master'
|
8
|
-
chmod 'bin/delayed_job_master', 0o755
|
9
|
-
end
|
10
|
-
|
11
|
-
def create_config_file
|
12
|
-
template 'config.rb', 'config/delayed_job_master.rb'
|
13
|
-
end
|
14
|
-
end
|