delayed_job_master 2.0.3 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +31 -34
- data/.gitignore +0 -2
- data/CHANGELOG.md +13 -0
- data/README.md +46 -33
- data/delayed_job_master.gemspec +8 -5
- data/lib/delayed/master/callbacks.rb +37 -0
- data/lib/delayed/master/command.rb +28 -5
- data/lib/delayed/master/config.rb +51 -58
- data/lib/delayed/master/core.rb +146 -0
- data/lib/delayed/master/database.rb +72 -0
- data/lib/delayed/master/file_reopener.rb +18 -0
- data/lib/delayed/master/forker.rb +30 -19
- data/lib/delayed/master/job_checker.rb +91 -47
- data/lib/delayed/master/job_finder.rb +31 -0
- data/lib/delayed/master/job_listener.rb +31 -0
- data/lib/delayed/master/monitoring.rb +37 -36
- data/lib/delayed/master/postgresql/job_listener.rb +73 -0
- data/lib/delayed/master/postgresql/job_notifier.rb +45 -0
- data/lib/delayed/master/safe_array.rb +30 -0
- data/lib/delayed/master/signaler.rb +17 -7
- data/lib/delayed/master/sleep.rb +18 -0
- data/lib/delayed/master/worker/backend/active_record.rb +41 -0
- data/lib/delayed/master/worker/extension.rb +14 -0
- data/lib/delayed/master/worker/lifecycle.rb +10 -0
- data/lib/delayed/master/worker/plugins/all.rb +17 -0
- data/lib/delayed/master/worker/plugins/executor_wrapper.rb +23 -0
- data/lib/delayed/master/worker/plugins/memory_checker.rb +28 -0
- data/lib/delayed/master/worker/plugins/signal_handler.rb +35 -0
- data/lib/delayed/master/worker/plugins/status_notifier.rb +21 -0
- data/lib/delayed/master/worker/thread_pool.rb +64 -0
- data/lib/delayed/master/worker/thread_worker.rb +65 -0
- data/lib/delayed/master/worker.rb +8 -7
- data/lib/delayed/master/worker_setting.rb +72 -0
- data/lib/delayed/master.rb +7 -100
- data/lib/delayed_job_master/railtie.rb +16 -0
- data/lib/delayed_job_master/version.rb +5 -0
- data/lib/delayed_job_master.rb +15 -1
- data/lib/generators/delayed_job_master/templates/config.rb +14 -14
- data/lib/generators/delayed_job_master/templates/script +1 -1
- metadata +71 -17
- data/gemfiles/rails50.gemfile +0 -7
- data/gemfiles/rails51.gemfile +0 -7
- data/gemfiles/rails52.gemfile +0 -7
- data/lib/delayed/master/database_detector.rb +0 -37
- data/lib/delayed/master/job_counter.rb +0 -26
- data/lib/delayed/master/plugins/memory_checker.rb +0 -24
- data/lib/delayed/master/plugins/signal_handler.rb +0 -31
- data/lib/delayed/master/plugins/status_notifier.rb +0 -17
- data/lib/delayed/master/util/file_reopener.rb +0 -18
- data/lib/delayed/master/version.rb +0 -5
- data/lib/delayed/master/worker_extension.rb +0 -19
data/lib/delayed/master.rb
CHANGED
@@ -1,105 +1,12 @@
|
|
1
|
-
|
2
|
-
require 'logger'
|
3
|
-
require_relative 'master/version'
|
4
|
-
require_relative 'master/command'
|
5
|
-
require_relative 'master/worker'
|
6
|
-
require_relative 'master/monitoring'
|
7
|
-
require_relative 'master/signaler'
|
8
|
-
require_relative 'master/util/file_reopener'
|
1
|
+
# frozen_string_literal: true
|
9
2
|
|
10
|
-
|
11
|
-
class Master
|
12
|
-
attr_reader :config, :logger, :workers
|
13
|
-
|
14
|
-
def initialize(argv)
|
15
|
-
@config = Command.new(argv).config
|
16
|
-
@logger = setup_logger(@config.log_file, @config.log_level)
|
17
|
-
@workers = []
|
18
|
-
|
19
|
-
@signaler = Signaler.new(self)
|
20
|
-
@monitoring = Monitoring.new(self)
|
21
|
-
end
|
22
|
-
|
23
|
-
def run
|
24
|
-
print_config
|
25
|
-
daemonize if @config.daemon
|
3
|
+
require_relative 'master/core'
|
26
4
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
@monitoring.monitor_while { stop? }
|
33
|
-
end
|
34
|
-
|
35
|
-
@logger.info "shut down master"
|
36
|
-
end
|
37
|
-
|
38
|
-
def prepared?
|
39
|
-
@prepared
|
40
|
-
end
|
41
|
-
|
42
|
-
def quit
|
43
|
-
@signaler.dispatch(:KILL)
|
44
|
-
@stop = true
|
45
|
-
end
|
46
|
-
|
47
|
-
def stop
|
48
|
-
@signaler.dispatch(:TERM)
|
49
|
-
@stop = true
|
50
|
-
end
|
51
|
-
|
52
|
-
def stop?
|
53
|
-
@stop == true
|
54
|
-
end
|
55
|
-
|
56
|
-
def reopen_files
|
57
|
-
@signaler.dispatch(:USR1)
|
58
|
-
@logger.info "reopening files..."
|
59
|
-
Util::FileReopener.reopen
|
60
|
-
@logger.info "reopened"
|
61
|
-
end
|
62
|
-
|
63
|
-
def restart
|
64
|
-
@signaler.dispatch(:USR2)
|
65
|
-
@logger.info "restarting master..."
|
66
|
-
exec(*([$0] + ARGV))
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
|
71
|
-
def setup_logger(log_file, log_level)
|
72
|
-
FileUtils.mkdir_p(File.dirname(log_file)) if log_file.is_a?(String)
|
73
|
-
logger = Logger.new(log_file)
|
74
|
-
logger.level = log_level
|
75
|
-
logger
|
76
|
-
end
|
77
|
-
|
78
|
-
def daemonize
|
79
|
-
Process.daemon(true)
|
80
|
-
end
|
81
|
-
|
82
|
-
def handle_pid_file
|
83
|
-
create_pid_file
|
84
|
-
yield
|
85
|
-
remove_pid_file
|
86
|
-
end
|
87
|
-
|
88
|
-
def create_pid_file
|
89
|
-
FileUtils.mkdir_p(File.dirname(@config.pid_file))
|
90
|
-
File.write(@config.pid_file, Process.pid)
|
91
|
-
end
|
92
|
-
|
93
|
-
def remove_pid_file
|
94
|
-
File.delete(@config.pid_file) if File.exist?(@config.pid_file)
|
95
|
-
end
|
96
|
-
|
97
|
-
def print_config
|
98
|
-
@logger.info "databases: #{@config.databases.join(', ')}" if @config.databases
|
99
|
-
@config.worker_settings.each do |setting|
|
100
|
-
message = "worker[#{setting.id}]: #{setting.count} processes"
|
101
|
-
message << " (#{setting.queues.join(', ')})" if setting.queues.respond_to?(:join)
|
102
|
-
@logger.info message
|
5
|
+
module Delayed
|
6
|
+
module Master
|
7
|
+
class << self
|
8
|
+
def new(argv)
|
9
|
+
Core.new(argv)
|
103
10
|
end
|
104
11
|
end
|
105
12
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module DelayedJobMaster
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
config.after_initialize do
|
4
|
+
case DelayedJobMaster.config.listener
|
5
|
+
when :postgresql
|
6
|
+
require_relative '../delayed/master/postgresql/job_notifier'
|
7
|
+
if defined?(Delayed::Backend::ActiveRecord)
|
8
|
+
Delayed::Backend::ActiveRecord::Job.include Delayed::Master::Postgresql::JobNotifier
|
9
|
+
end
|
10
|
+
if defined?(Delayed::Backend::Bulk)
|
11
|
+
Delayed::Backend::Bulk.include Delayed::Master::Postgresql::BulkJobNotifier
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/delayed_job_master.rb
CHANGED
@@ -1 +1,15 @@
|
|
1
|
-
require '
|
1
|
+
require 'active_support'
|
2
|
+
|
3
|
+
require_relative 'delayed_job_master/version'
|
4
|
+
require_relative 'delayed_job_master/railtie' if defined?(Rails)
|
5
|
+
|
6
|
+
module DelayedJobMaster
|
7
|
+
mattr_accessor :config, default: ActiveSupport::InheritableOptions.new
|
8
|
+
config.listener = :postgresql if defined?(PG)
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def configure
|
12
|
+
yield config
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,8 +1,11 @@
|
|
1
1
|
# working directory
|
2
2
|
working_directory Dir.pwd
|
3
3
|
|
4
|
-
# monitor
|
5
|
-
|
4
|
+
# monitor interval for events (in seconds)
|
5
|
+
monitor_interval 5
|
6
|
+
|
7
|
+
# polling interval for new jobs (in seconds)
|
8
|
+
polling_interval 5
|
6
9
|
|
7
10
|
# path to pid file
|
8
11
|
pid_file "#{Dir.pwd}/tmp/pids/delayed_job_master.pid"
|
@@ -18,9 +21,12 @@ add_worker do |worker|
|
|
18
21
|
# queue name for the worker
|
19
22
|
worker.queues %w(queue1)
|
20
23
|
|
21
|
-
#
|
22
|
-
worker.
|
24
|
+
# max process count
|
25
|
+
worker.max_processes 1
|
23
26
|
|
27
|
+
# max thread count for each worker
|
28
|
+
worker.max_threads 1
|
29
|
+
|
24
30
|
# max memory in MB
|
25
31
|
worker.max_memory 300
|
26
32
|
|
@@ -37,20 +43,14 @@ end
|
|
37
43
|
# worker2
|
38
44
|
add_worker do |worker|
|
39
45
|
worker.queues %w(queue2)
|
40
|
-
worker.
|
46
|
+
worker.max_processes 2
|
47
|
+
worker.max_threads 2
|
41
48
|
end
|
42
49
|
|
43
50
|
before_fork do |master, worker|
|
44
|
-
|
51
|
+
ActiveRecord::Base.connection.disconnect!
|
45
52
|
end
|
46
53
|
|
47
54
|
after_fork do |master, worker|
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
before_monitor do |master|
|
52
|
-
ActiveRecord::Base.connection.verify! if defined?(ActiveRecord::Base)
|
53
|
-
end
|
54
|
-
|
55
|
-
after_monitor do |master|
|
55
|
+
ActiveRecord::Base.establish_connection
|
56
56
|
end
|
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:
|
4
|
+
version: 3.0.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:
|
11
|
+
date: 2023-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: delayed_job
|
@@ -38,20 +38,34 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '6.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '6.0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rails
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
61
|
+
version: '6.0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
68
|
+
version: '6.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,7 +109,21 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: pg
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: mysql2
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
129
|
- - ">="
|
@@ -122,6 +150,20 @@ dependencies:
|
|
122
150
|
- - ">="
|
123
151
|
- !ruby/object:Gem::Version
|
124
152
|
version: '4.1'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: delayed_job_bulk
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 1.0.0
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 1.0.0
|
125
167
|
description: A simple delayed_job master process to control multiple workers
|
126
168
|
email:
|
127
169
|
- kaneta@sitebridge.co.jp
|
@@ -139,29 +181,41 @@ files:
|
|
139
181
|
- README.md
|
140
182
|
- Rakefile
|
141
183
|
- delayed_job_master.gemspec
|
142
|
-
- gemfiles/rails50.gemfile
|
143
|
-
- gemfiles/rails51.gemfile
|
144
|
-
- gemfiles/rails52.gemfile
|
145
184
|
- gemfiles/rails60.gemfile
|
146
185
|
- gemfiles/rails61.gemfile
|
147
186
|
- gemfiles/rails70.gemfile
|
148
187
|
- lib/delayed/master.rb
|
188
|
+
- lib/delayed/master/callbacks.rb
|
149
189
|
- lib/delayed/master/command.rb
|
150
190
|
- lib/delayed/master/config.rb
|
151
|
-
- lib/delayed/master/
|
191
|
+
- lib/delayed/master/core.rb
|
192
|
+
- lib/delayed/master/database.rb
|
193
|
+
- lib/delayed/master/file_reopener.rb
|
152
194
|
- lib/delayed/master/forker.rb
|
153
195
|
- lib/delayed/master/job_checker.rb
|
154
|
-
- lib/delayed/master/
|
196
|
+
- lib/delayed/master/job_finder.rb
|
197
|
+
- lib/delayed/master/job_listener.rb
|
155
198
|
- lib/delayed/master/monitoring.rb
|
156
|
-
- lib/delayed/master/
|
157
|
-
- lib/delayed/master/
|
158
|
-
- lib/delayed/master/
|
199
|
+
- lib/delayed/master/postgresql/job_listener.rb
|
200
|
+
- lib/delayed/master/postgresql/job_notifier.rb
|
201
|
+
- lib/delayed/master/safe_array.rb
|
159
202
|
- lib/delayed/master/signaler.rb
|
160
|
-
- lib/delayed/master/
|
161
|
-
- lib/delayed/master/version.rb
|
203
|
+
- lib/delayed/master/sleep.rb
|
162
204
|
- lib/delayed/master/worker.rb
|
163
|
-
- lib/delayed/master/
|
205
|
+
- lib/delayed/master/worker/backend/active_record.rb
|
206
|
+
- lib/delayed/master/worker/extension.rb
|
207
|
+
- lib/delayed/master/worker/lifecycle.rb
|
208
|
+
- lib/delayed/master/worker/plugins/all.rb
|
209
|
+
- lib/delayed/master/worker/plugins/executor_wrapper.rb
|
210
|
+
- lib/delayed/master/worker/plugins/memory_checker.rb
|
211
|
+
- lib/delayed/master/worker/plugins/signal_handler.rb
|
212
|
+
- lib/delayed/master/worker/plugins/status_notifier.rb
|
213
|
+
- lib/delayed/master/worker/thread_pool.rb
|
214
|
+
- lib/delayed/master/worker/thread_worker.rb
|
215
|
+
- lib/delayed/master/worker_setting.rb
|
164
216
|
- lib/delayed_job_master.rb
|
217
|
+
- lib/delayed_job_master/railtie.rb
|
218
|
+
- lib/delayed_job_master/version.rb
|
165
219
|
- lib/generators/delayed_job_master/config_generator.rb
|
166
220
|
- lib/generators/delayed_job_master/templates/config.rb
|
167
221
|
- lib/generators/delayed_job_master/templates/script
|
@@ -177,7 +231,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
231
|
requirements:
|
178
232
|
- - ">="
|
179
233
|
- !ruby/object:Gem::Version
|
180
|
-
version: '2.
|
234
|
+
version: '2.7'
|
181
235
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
236
|
requirements:
|
183
237
|
- - ">="
|
data/gemfiles/rails50.gemfile
DELETED
data/gemfiles/rails51.gemfile
DELETED
data/gemfiles/rails52.gemfile
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
module Delayed
|
2
|
-
class Master
|
3
|
-
class DatabaseDetector
|
4
|
-
def initialize
|
5
|
-
end
|
6
|
-
|
7
|
-
def call
|
8
|
-
load_spec_names.select { |spec_name| has_delayed_job_table?(spec_name) }
|
9
|
-
end
|
10
|
-
|
11
|
-
private
|
12
|
-
|
13
|
-
def load_spec_names
|
14
|
-
if Rails::VERSION::MAJOR >= 6
|
15
|
-
load_spec_names_from_multi_db_config
|
16
|
-
else
|
17
|
-
[Rails.env.to_sym]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def load_spec_names_from_multi_db_config
|
22
|
-
configs = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env)
|
23
|
-
configs.reject!(&:replica?)
|
24
|
-
if Rails::VERSION::MAJOR == 6
|
25
|
-
configs.map { |c| c.spec_name.to_sym }
|
26
|
-
else
|
27
|
-
configs.map { |c| c.name.to_sym }
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def has_delayed_job_table?(spec_name)
|
32
|
-
ActiveRecord::Base.establish_connection(spec_name)
|
33
|
-
ActiveRecord::Base.connection.tables.include?('delayed_jobs')
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# JobCounter depends on delayed_job_active_record.
|
2
|
-
# See https://github.com/collectiveidea/delayed_job_active_record/blob/master/lib/delayed/backend/active_record.rb
|
3
|
-
module Delayed
|
4
|
-
class Master
|
5
|
-
class JobCounter
|
6
|
-
def initialize(klass)
|
7
|
-
@klass = klass
|
8
|
-
end
|
9
|
-
|
10
|
-
def count(setting)
|
11
|
-
jobs = ready_to_run(setting.max_run_time || Delayed::Worker::DEFAULT_MAX_RUN_TIME)
|
12
|
-
jobs.where!("priority >= ?", setting.min_priority) if setting.min_priority
|
13
|
-
jobs.where!("priority <= ?", setting.max_priority) if setting.max_priority
|
14
|
-
jobs.where!(queue: setting.queues) if setting.queues.any?
|
15
|
-
jobs.count
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def ready_to_run(max_run_time)
|
21
|
-
db_time_now = @klass.db_time_now
|
22
|
-
@klass.where("(run_at <= ? AND (locked_at IS NULL OR locked_at < ?)) AND failed_at IS NULL", db_time_now, db_time_now - max_run_time)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'get_process_mem'
|
2
|
-
|
3
|
-
module Delayed
|
4
|
-
class Master
|
5
|
-
module Plugins
|
6
|
-
class MemoryChecker < Delayed::Plugin
|
7
|
-
callbacks do |lifecycle|
|
8
|
-
lifecycle.before(:perform) do |worker, job|
|
9
|
-
mem = GetProcessMem.new
|
10
|
-
worker.master_logger.info "performing #{job.name}, memory: #{mem.mb.to_i} MB"
|
11
|
-
end
|
12
|
-
lifecycle.after(:perform) do |worker, job|
|
13
|
-
mem = GetProcessMem.new
|
14
|
-
worker.master_logger.info "performed #{job.name}, memory: #{mem.mb.to_i} MB"
|
15
|
-
if worker.max_memory && mem.mb > worker.max_memory
|
16
|
-
worker.master_logger.info "shutting down worker #{Process.pid} because it consumes large memory..."
|
17
|
-
worker.stop
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module Delayed
|
2
|
-
class Master
|
3
|
-
module Plugins
|
4
|
-
class SignalHandler < Delayed::Plugin
|
5
|
-
callbacks do |lifecycle|
|
6
|
-
lifecycle.before(:execute) do |worker|
|
7
|
-
worker.instance_eval do
|
8
|
-
trap(:USR1) do
|
9
|
-
Thread.new do
|
10
|
-
master_logger.info "reopening files..."
|
11
|
-
Delayed::Master::Util::FileReopener.reopen
|
12
|
-
master_logger.info "reopened"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
trap(:USR2) do
|
16
|
-
Thread.new do
|
17
|
-
$0 = "#{$0} [OLD]"
|
18
|
-
master_logger.info "shutting down worker #{Process.pid}..."
|
19
|
-
stop
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
lifecycle.after(:execute) do |worker|
|
25
|
-
worker.master_logger.info "shut down worker #{Process.pid}"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Delayed
|
2
|
-
class Master
|
3
|
-
module Plugins
|
4
|
-
class StatusNotifier < Delayed::Plugin
|
5
|
-
callbacks do |lifecycle|
|
6
|
-
lifecycle.around(:perform) do |worker, job, &block|
|
7
|
-
title = $0
|
8
|
-
$0 = "#{title} [BUSY]"
|
9
|
-
ret = block.call
|
10
|
-
$0 = title
|
11
|
-
ret
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Delayed
|
2
|
-
class Master
|
3
|
-
class Util
|
4
|
-
class FileReopener
|
5
|
-
class << self
|
6
|
-
def reopen
|
7
|
-
ObjectSpace.each_object(File) do |file|
|
8
|
-
next if file.closed? || !file.sync
|
9
|
-
file.reopen file.path, 'a+'
|
10
|
-
file.sync = true
|
11
|
-
file.flush
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Delayed
|
2
|
-
class Worker
|
3
|
-
attr_accessor :master_logger, :max_memory
|
4
|
-
end
|
5
|
-
end
|
6
|
-
|
7
|
-
require_relative 'plugins/memory_checker'
|
8
|
-
require_relative 'plugins/signal_handler'
|
9
|
-
require_relative 'plugins/status_notifier'
|
10
|
-
|
11
|
-
[
|
12
|
-
Delayed::Master::Plugins::MemoryChecker,
|
13
|
-
Delayed::Master::Plugins::SignalHandler,
|
14
|
-
Delayed::Master::Plugins::StatusNotifier
|
15
|
-
].each do |plugin|
|
16
|
-
unless Delayed::Worker.plugins.include?(plugin)
|
17
|
-
Delayed::Worker.plugins << plugin
|
18
|
-
end
|
19
|
-
end
|