postburner 1.0.0.pre.2 → 1.0.0.pre.4

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.
@@ -27,7 +27,7 @@ module Postburner
27
27
  #
28
28
  def with(params={})
29
29
  self.args.merge!(
30
- 'params' => ActiveJob::Arguments.serialize(params)
30
+ 'params' => ::ActiveJob::Arguments.serialize(params)
31
31
  )
32
32
  self
33
33
  end
@@ -62,7 +62,7 @@ module Postburner
62
62
  # Get the deserialized params.
63
63
  #
64
64
  def params
65
- ActiveJob::Arguments.deserialize(self.args['params']).to_h
65
+ ::ActiveJob::Arguments.deserialize(self.args['params']).to_h
66
66
  end
67
67
 
68
68
  def perform(args)
@@ -6,8 +6,8 @@
6
6
  (#{@job.run_at.to_i - Time.zone.now.to_i} seconds)
7
7
 
8
8
  %h3 Stats
9
- - if @job.beanstalk_job
10
- %pre= JSON.pretty_generate @job.beanstalk_job.stats.as_json
9
+ - if @job.bk
10
+ %pre= JSON.pretty_generate @job.bk.stats.as_json
11
11
 
12
12
  %h3 Job
13
13
  %pre= JSON.pretty_generate @job.as_json
@@ -20,7 +20,7 @@
20
20
  # Scale by adjusting forks and threads per worker:
21
21
  # - Development: forks=0, threads=1 (single-threaded, easiest debugging)
22
22
  # - Staging: forks=0, threads=10 (multi-threaded, moderate load)
23
- # - Production: forks=4, threads=10 (40 concurrent jobs per queue)
23
+ # - Production: forks=4, threads=10 (40 concurrent jobs per worker)
24
24
  #
25
25
 
26
26
  default: &default
@@ -34,7 +34,7 @@ development:
34
34
  workers:
35
35
  default:
36
36
  # Single-threaded, single process (simplest for debugging)
37
- # Defaults: forks=0, threads=1, gc_limit=nil
37
+ # If not specified, uses env-level defaults
38
38
  queues:
39
39
  - default
40
40
  - mailers
@@ -45,34 +45,39 @@ test:
45
45
  workers:
46
46
  default:
47
47
  # Test mode uses inline strategies automatically
48
- # Defaults: forks=0, threads=1, gc_limit=nil
49
48
  queues:
50
49
  - default
51
50
 
52
- staging:
51
+ staging: # <- environment config
53
52
  <<: *default
54
53
 
55
- workers:
54
+ # Env-level defaults (use default_ prefix)
55
+ default_threads: 10
56
+ default_gc_limit: 5000
57
+
58
+ workers: # <- worker config overrides
56
59
  default:
57
60
  # Multi-threaded, single process (moderate concurrency)
58
- default_threads: 10
59
- default_gc_limit: 5000
61
+ # Uses env-level defaults: default_threads=10, default_gc_limit=5000
60
62
  queues:
61
63
  - critical
62
64
  - default
63
65
  - mailers
64
66
 
65
- production:
67
+ production: # <- environment config, i.e. defaults, NOT worker config
66
68
  <<: *default
67
69
 
68
- # Example 1: Single worker processing all queues with same settings
70
+ # Env-level defaults (use default_ prefix)
71
+ default_forks: 2
72
+ default_threads: 10
73
+ default_gc_limit: 5000
74
+
75
+ # Example 1: Single worker using env defaults
69
76
  # Run: bin/postburner
70
77
  #
71
78
  # workers:
72
79
  # default:
73
- # default_forks: 4
74
- # default_threads: 10
75
- # default_gc_limit: 5000
80
+ # # Uses default_forks=2, default_threads=10
76
81
  # queues:
77
82
  # - critical
78
83
  # - default
@@ -84,21 +89,20 @@ production:
84
89
  # bin/postburner --worker imports (4 forks, 1 thread each)
85
90
  # bin/postburner --worker general (2 forks, 100 threads each)
86
91
  #
87
- workers:
92
+ workers: # <- worker config, i.e. overrides, NOT environment config
88
93
  # Heavy, memory-intensive jobs - more processes, fewer threads
89
94
  imports:
90
- default_forks: 4
91
- default_threads: 1
92
- default_gc_limit: 500
95
+ forks: 4 # Overrides default_forks
96
+ threads: 1 # Overrides default_threads
97
+ gc_limit: 500 # Overrides default_gc_limit
93
98
  queues:
94
99
  - imports
95
100
  - data_processing
96
101
 
97
- # General jobs - fewer processes, many threads
102
+ # General jobs - uses env defaults (forks=2, threads=10)
103
+ # Override threads for higher concurrency
98
104
  general:
99
- default_forks: 2
100
- default_threads: 100
101
- default_gc_limit: 5000
105
+ threads: 100 # Overrides default_threads (forks uses default_forks=2)
102
106
  queues:
103
107
  - default
104
108
  - mailers
@@ -112,27 +116,25 @@ production:
112
116
  #
113
117
  # workers:
114
118
  # critical:
115
- # default_forks: 1
116
- # default_threads: 1
117
- # default_gc_limit: 100
119
+ # forks: 1
120
+ # threads: 1
121
+ # gc_limit: 100
118
122
  # queues:
119
123
  # - critical
120
124
  #
121
125
  # default:
122
- # default_forks: 4
123
- # default_threads: 10
124
- # default_gc_limit: 5000
126
+ # forks: 4
127
+ # threads: 10
125
128
  # queues:
126
129
  # - default
127
130
  #
128
131
  # mailers:
129
- # default_forks: 2
130
- # default_threads: 5
131
- # default_gc_limit: 2000
132
+ # forks: 2
133
+ # threads: 5
132
134
  # queues:
133
135
  # - mailers
134
136
 
135
- # Global Defaults (can be overridden per worker):
137
+ # Env-Level Defaults (can be overridden per worker):
136
138
  #
137
139
  # default_queue: default # Default queue name (optional)
138
140
  # default_priority: 65536 # Lower = higher priority (optional, 0 is highest)
@@ -20,7 +20,7 @@
20
20
  # Scale by adjusting forks and threads per worker:
21
21
  # - Development: forks=0, threads=1 (single-threaded, easiest debugging)
22
22
  # - Staging: forks=0, threads=10 (multi-threaded, moderate load)
23
- # - Production: forks=4, threads=10 (40 concurrent jobs per queue)
23
+ # - Production: forks=4, threads=10 (40 concurrent jobs per worker)
24
24
  #
25
25
 
26
26
  default: &default
@@ -34,7 +34,7 @@ development:
34
34
  workers:
35
35
  default:
36
36
  # Single-threaded, single process (simplest for debugging)
37
- # Defaults: forks=0, threads=1, gc_limit=nil
37
+ # If not specified, uses env-level defaults
38
38
  queues:
39
39
  - default
40
40
  - mailers
@@ -45,34 +45,39 @@ test:
45
45
  workers:
46
46
  default:
47
47
  # Test mode uses inline strategies automatically
48
- # Defaults: forks=0, threads=1, gc_limit=nil
49
48
  queues:
50
49
  - default
51
50
 
52
- staging:
51
+ staging: # <- environment config
53
52
  <<: *default
54
53
 
55
- workers:
54
+ # Env-level defaults (use default_ prefix)
55
+ default_threads: 10
56
+ default_gc_limit: 5000
57
+
58
+ workers: # <- worker config overrides
56
59
  default:
57
60
  # Multi-threaded, single process (moderate concurrency)
58
- default_threads: 10
59
- default_gc_limit: 5000
61
+ # Uses env-level defaults: default_threads=10, default_gc_limit=5000
60
62
  queues:
61
63
  - critical
62
64
  - default
63
65
  - mailers
64
66
 
65
- production:
67
+ production: # <- environment config, i.e. defaults, NOT worker config
66
68
  <<: *default
67
69
 
68
- # Example 1: Single worker processing all queues with same settings
70
+ # Env-level defaults (use default_ prefix)
71
+ default_forks: 2
72
+ default_threads: 10
73
+ default_gc_limit: 5000
74
+
75
+ # Example 1: Single worker using env defaults
69
76
  # Run: bin/postburner
70
77
  #
71
78
  # workers:
72
79
  # default:
73
- # default_forks: 4
74
- # default_threads: 10
75
- # default_gc_limit: 5000
80
+ # # Uses default_forks=2, default_threads=10
76
81
  # queues:
77
82
  # - critical
78
83
  # - default
@@ -84,21 +89,20 @@ production:
84
89
  # bin/postburner --worker imports (4 forks, 1 thread each)
85
90
  # bin/postburner --worker general (2 forks, 100 threads each)
86
91
  #
87
- workers:
92
+ workers: # <- worker config, i.e. overrides, NOT environment config
88
93
  # Heavy, memory-intensive jobs - more processes, fewer threads
89
94
  imports:
90
- default_forks: 4
91
- default_threads: 1
92
- default_gc_limit: 500
95
+ forks: 4 # Overrides default_forks
96
+ threads: 1 # Overrides default_threads
97
+ gc_limit: 500 # Overrides default_gc_limit
93
98
  queues:
94
99
  - imports
95
100
  - data_processing
96
101
 
97
- # General jobs - fewer processes, many threads
102
+ # General jobs - uses env defaults (forks=2, threads=10)
103
+ # Override threads for higher concurrency
98
104
  general:
99
- default_forks: 2
100
- default_threads: 100
101
- default_gc_limit: 5000
105
+ threads: 100 # Overrides default_threads (forks uses default_forks=2)
102
106
  queues:
103
107
  - default
104
108
  - mailers
@@ -112,27 +116,25 @@ production:
112
116
  #
113
117
  # workers:
114
118
  # critical:
115
- # default_forks: 1
116
- # default_threads: 1
117
- # default_gc_limit: 100
119
+ # forks: 1
120
+ # threads: 1
121
+ # gc_limit: 100
118
122
  # queues:
119
123
  # - critical
120
124
  #
121
125
  # default:
122
- # default_forks: 4
123
- # default_threads: 10
124
- # default_gc_limit: 5000
126
+ # forks: 4
127
+ # threads: 10
125
128
  # queues:
126
129
  # - default
127
130
  #
128
131
  # mailers:
129
- # default_forks: 2
130
- # default_threads: 5
131
- # default_gc_limit: 2000
132
+ # forks: 2
133
+ # threads: 5
132
134
  # queues:
133
135
  # - mailers
134
136
 
135
- # Global Defaults (can be overridden per worker):
137
+ # Env-Level Defaults (can be overridden per worker):
136
138
  #
137
139
  # default_queue: default # Default queue name (optional)
138
140
  # default_priority: 65536 # Lower = higher priority (optional, 0 is highest)
@@ -100,7 +100,7 @@ module ActiveJob
100
100
  # Create Postburner::TrackedJob record
101
101
  tracked_job = Postburner::TrackedJob.create!(
102
102
  args: Postburner::ActiveJob::Payload.serialize_for_tracked(job),
103
- run_at: timestamp,
103
+ run_at: timestamp ? Time.zone.at(timestamp) : nil,
104
104
  queued_at: Time.zone.now
105
105
  )
106
106
 
@@ -111,10 +111,10 @@ module ActiveJob
111
111
  Postburner.connected do |conn|
112
112
  tube_name = expand_tube_name(job.queue_name)
113
113
 
114
- # Get priority and TTR from class configuration or fall back to defaults
115
- pri = job.class.respond_to?(:queue_priority) && job.class.queue_priority ||
116
- Postburner.configuration.default_priority
117
- ttr = job.class.respond_to?(:queue_ttr) && job.class.queue_ttr ||
114
+ # Get priority and TTR
115
+ # Priority order: job.priority (from .set or class.priority) > default
116
+ pri = job.priority || Postburner.configuration.default_priority
117
+ ttr = job.class.respond_to?(:postburner_ttr) && job.class.postburner_ttr ||
118
118
  Postburner.configuration.default_ttr
119
119
 
120
120
  bkid = conn.tubes[tube_name].put(
@@ -145,10 +145,10 @@ module ActiveJob
145
145
  Postburner.connected do |conn|
146
146
  tube_name = expand_tube_name(job.queue_name)
147
147
 
148
- # Get priority and TTR from class configuration or fall back to defaults
149
- pri = job.class.respond_to?(:queue_priority) && job.class.queue_priority ||
150
- Postburner.configuration.default_priority
151
- ttr = job.class.respond_to?(:queue_ttr) && job.class.queue_ttr ||
148
+ # Get priority and TTR
149
+ # Priority order: job.priority (from .set or class.priority) > default
150
+ pri = job.priority || Postburner.configuration.default_priority
151
+ ttr = job.class.respond_to?(:postburner_ttr) && job.class.postburner_ttr ||
152
152
  Postburner.configuration.default_ttr
153
153
 
154
154
  conn.tubes[tube_name].put(
@@ -3,9 +3,9 @@
3
3
  module Postburner
4
4
  # Beanstalkd-specific configuration DSL for ActiveJob classes using Postburner.
5
5
  #
6
- # Provides consistent API with Postburner::Job for setting Beanstalkd queue
7
- # priority and TTR (time-to-run). Include this module in your ActiveJob classes
8
- # to use Beanstalkd-specific configuration.
6
+ # Provides TTR (time-to-run) configuration for Beanstalkd. For priority, use
7
+ # ActiveJob's built-in `priority` method. Include this module in your ActiveJob
8
+ # classes to use Beanstalkd-specific configuration.
9
9
  #
10
10
  # @note Automatically included when you include Postburner::Tracked
11
11
  #
@@ -14,8 +14,8 @@ module Postburner
14
14
  # include Postburner::Beanstalkd
15
15
  #
16
16
  # queue_as :critical
17
- # queue_priority 0 # Highest priority
18
- # queue_ttr 300 # 5 minutes to complete
17
+ # priority 0 # Highest priority (uses ActiveJob's priority)
18
+ # ttr 300 # 5 minutes to complete
19
19
  #
20
20
  # def perform(payment_id)
21
21
  # # ...
@@ -26,8 +26,8 @@ module Postburner
26
26
  # class ProcessPayment < ApplicationJob
27
27
  # include Postburner::Tracked # Includes Beanstalkd automatically
28
28
  #
29
- # queue_priority 0
30
- # queue_ttr 600
29
+ # priority 0
30
+ # ttr 600
31
31
  #
32
32
  # def perform(payment_id)
33
33
  # log "Processing payment"
@@ -39,54 +39,33 @@ module Postburner
39
39
  extend ActiveSupport::Concern
40
40
 
41
41
  included do
42
- class_attribute :postburner_priority, default: nil
43
42
  class_attribute :postburner_ttr, default: nil
44
43
  end
45
44
 
46
45
  class_methods do
47
- # Sets or returns the queue priority.
48
- #
49
- # Lower numbers = higher priority in Beanstalkd (0 is highest).
50
- # Falls back to Postburner.configuration.default_priority if not set.
51
- #
52
- # @param pri [Integer, nil] Priority to set (0-4294967295), or nil to get current value
53
- #
54
- # @return [Integer, nil] Current priority when getting, nil when setting
55
- #
56
- # @example Set priority
57
- # queue_priority 0 # Highest priority
58
- #
59
- # @example Get priority
60
- # ProcessPayment.queue_priority # => 0
61
- #
62
- def queue_priority(pri = nil)
63
- if pri
64
- self.postburner_priority = pri
65
- nil
66
- else
67
- postburner_priority
68
- end
69
- end
70
-
71
- # Sets or returns the queue TTR (time to run).
46
+ # Sets or returns the TTR (time to run).
72
47
  #
73
48
  # Number of seconds Beanstalkd will wait for job completion before
74
49
  # making it available again. Falls back to Postburner.configuration.default_ttr
75
50
  # if not set.
76
51
  #
77
- # @param ttr [Integer, nil] Timeout in seconds, or nil to get current value
52
+ # From Beanstalkd: If the worker does not delete, release, or bury the
53
+ # job within <ttr> seconds, the job will time out and the server will
54
+ # release the job.
55
+ #
56
+ # @param seconds [Integer, nil] Timeout in seconds, or nil to get current value
78
57
  #
79
58
  # @return [Integer, nil] Current TTR when getting, nil when setting
80
59
  #
81
60
  # @example Set TTR
82
- # queue_ttr 300 # 5 minutes
61
+ # ttr 300 # 5 minutes
83
62
  #
84
63
  # @example Get TTR
85
- # ProcessPayment.queue_ttr # => 300
64
+ # ProcessPayment.ttr # => 300
86
65
  #
87
- def queue_ttr(ttr = nil)
88
- if ttr
89
- self.postburner_ttr = ttr
66
+ def ttr(seconds = nil)
67
+ if seconds
68
+ self.postburner_ttr = seconds
90
69
  nil
91
70
  else
92
71
  postburner_ttr
@@ -27,8 +27,8 @@ module Postburner
27
27
  # @option options [String] :default_queue Default queue name (default: 'default')
28
28
  # @option options [Integer] :default_priority Default job priority (default: 65536, lower = higher priority)
29
29
  # @option options [Integer] :default_ttr Default time-to-run in seconds (default: 300)
30
- # @option options [Integer] :default_threads Default thread count per queue (default: 1)
31
- # @option options [Integer] :default_forks Default fork count per queue (default: 0, single process)
30
+ # @option options [Integer] :default_threads Default thread count per fork (default: 1)
31
+ # @option options [Integer] :default_forks Default fork count (default: 0, single process)
32
32
  # @option options [Integer] :default_gc_limit Default GC limit for worker restarts (default: nil, no limit)
33
33
  #
34
34
  def initialize(options = {})
@@ -62,13 +62,36 @@ module Postburner
62
62
  # @example Multiple workers (must specify)
63
63
  # config = Postburner::Configuration.load_yaml('config/postburner.yml', 'production', 'imports')
64
64
  #
65
+ # @example config/postburner.yml example
66
+ #
67
+ # default: &default
68
+ # beanstalk_url: beanstalk://localhost:11300
69
+ # default_priority: 131072 # change default priority from 65536 to 131072
70
+ #
71
+ # production: # <- environment config, i.e. defaults, NOT worker config
72
+ # <<: *default
73
+ # default_forks: 2
74
+ # default_threads: 10
75
+ # default_gc_limit: 5000
76
+ # default_ttr: 300
77
+ # workers: # <- worker config, i.e. overrides, NOT environment config
78
+ # imports: # <- worker "group" name
79
+ # forks: 4 # Overrides default_forks
80
+ # threads: 1 # Overrides default_threads
81
+ # gc_limit: 500 # Overrides default_gc_limit
82
+ # # ttr: 60 # Use default from production, i.e. 300 because not set
83
+ # queues:
84
+ # - imports
85
+ # - data_processing
86
+ #
65
87
  def self.load_yaml(path, env = 'development', worker_name = nil)
66
88
  yaml = YAML.load_file(path, aliases: true)
67
- env_config = yaml[env.to_s] || yaml[env.to_sym]
89
+ # env_defaults = top-level environment config (development:, production:, etc.)
90
+ env_defaults = yaml[env.to_s] || yaml[env.to_sym]
68
91
 
69
- raise ArgumentError, "Environment '#{env}' not found in #{path}" unless env_config
92
+ raise ArgumentError, "Environment '#{env}' not found in #{path}" unless env_defaults
70
93
 
71
- workers = env_config['workers']
94
+ workers = env_defaults['workers']
72
95
  raise ArgumentError, "No 'workers:' section found in #{path} for environment '#{env}'" unless workers
73
96
 
74
97
  # Auto-select single worker or validate worker_name
@@ -84,24 +107,28 @@ module Postburner
84
107
  end
85
108
  end
86
109
 
110
+ # worker_config = specific worker configuration (workers: imports:)
87
111
  worker_config = workers[worker_name]
88
112
 
89
- # Convert queue array to hash format expected by rest of system
113
+ # Convert queue array to hash format (queues no longer have per-queue config)
90
114
  queue_list = worker_config['queues'] || []
91
115
  queues_hash = {}
92
116
  queue_list.each do |queue_name|
93
- queues_hash[queue_name] = {}
117
+ queues_hash[queue_name] = {} # Empty hash - queues run in worker pool
94
118
  end
95
119
 
120
+ # Cascade: worker-level overrides env-level defaults
121
+ # Worker uses: forks, threads, gc_limit, ttr, priority (NO default_ prefix)
122
+ # Env uses: default_forks, default_threads, etc. (WITH default_ prefix)
96
123
  options = {
97
- beanstalk_url: env_config['beanstalk_url'],
124
+ beanstalk_url: env_defaults['beanstalk_url'],
98
125
  queues: queues_hash,
99
- default_queue: worker_config['default_queue'] || env_config['default_queue'],
100
- default_priority: worker_config['default_priority'] || env_config['default_priority'],
101
- default_ttr: worker_config['default_ttr'] || env_config['default_ttr'],
102
- default_threads: worker_config['default_threads'] || env_config['default_threads'],
103
- default_forks: worker_config['default_forks'] || env_config['default_forks'],
104
- default_gc_limit: worker_config['default_gc_limit'] || env_config['default_gc_limit']
126
+ default_queue: worker_config['default_queue'] || env_defaults['default_queue'],
127
+ default_priority: worker_config['priority'] || env_defaults['default_priority'],
128
+ default_ttr: worker_config['ttr'] || env_defaults['default_ttr'],
129
+ default_threads: worker_config['threads'] || env_defaults['default_threads'],
130
+ default_forks: worker_config['forks'] || env_defaults['default_forks'],
131
+ default_gc_limit: worker_config['gc_limit'] || env_defaults['default_gc_limit']
105
132
  }
106
133
 
107
134
  new(options)
@@ -76,20 +76,30 @@ module Postburner
76
76
  #debugger
77
77
  Postburner::Job.transaction do
78
78
  Postburner.connected do |conn|
79
- tube_name = job.tube_name
79
+ tube_name = job.expanded_tube_name
80
80
  data = { class: job.class.name, args: [job.id] }
81
81
 
82
82
  # Get priority, TTR from job instance (respects instance overrides) or options
83
- pri = options[:pri] || job.queue_priority || Postburner.configuration.default_priority
83
+ pri = options[:pri] || job.priority || Postburner.configuration.default_priority
84
84
  delay = options[:delay] || 0
85
- ttr = options[:ttr] || job.queue_ttr || Postburner.configuration.default_ttr
85
+ ttr = options[:ttr] || job.ttr || Postburner.configuration.default_ttr
86
86
 
87
- response = conn.tubes[tube_name].put(
88
- JSON.generate(data),
89
- pri: pri,
90
- delay: delay,
91
- ttr: ttr
92
- )
87
+ begin
88
+ response = conn.tubes[tube_name].put(
89
+ JSON.generate(data),
90
+ pri: pri,
91
+ delay: delay,
92
+ ttr: ttr
93
+ )
94
+ rescue Beaneater::BadFormatError => e
95
+ Rails.logger.error "Beanstalkd BAD_FORMAT error from:"
96
+ Rails.logger.error " tube: #{tube_name}"
97
+ Rails.logger.error " data: #{JSON.generate(data)}"
98
+ Rails.logger.error " pri: #{pri.inspect} (#{pri.class})"
99
+ Rails.logger.error " delay: #{delay.inspect} (#{delay.class})"
100
+ Rails.logger.error " ttr: #{ttr.inspect} (#{ttr.class})"
101
+ raise
102
+ end
93
103
 
94
104
  response
95
105
  end
@@ -1,3 +1,3 @@
1
1
  module Postburner
2
- VERSION = '1.0.0.pre.2'
2
+ VERSION = '1.0.0.pre.4'
3
3
  end
@@ -43,63 +43,62 @@ module Postburner
43
43
  #
44
44
  # **Development:**
45
45
  # ```yaml
46
- # default_forks: 0
47
- # default_threads: 1
46
+ # forks: 0
47
+ # threads: 1
48
48
  # ```
49
49
  # Single-threaded, single-process (simplest debugging)
50
50
  #
51
51
  # **Staging:**
52
52
  # ```yaml
53
- # default_forks: 0
54
- # default_threads: 10
53
+ # forks: 0
54
+ # threads: 10
55
55
  # ```
56
56
  # Multi-threaded, single-process (moderate concurrency)
57
57
  #
58
58
  # **Production:**
59
59
  # ```yaml
60
- # default_forks: 4
61
- # default_threads: 10
60
+ # forks: 4
61
+ # threads: 10
62
62
  # ```
63
63
  # 4 processes × 10 threads = 40 concurrent jobs per queue
64
64
  #
65
65
  # ## Configuration
66
66
  #
67
67
  # @example Development (single-threaded)
68
- # development:
68
+ # development: # <- environment config, i.e. defaults
69
69
  # default_forks: 0
70
70
  # default_threads: 1
71
- # queues:
72
- # default: {}
73
- # mailers: {}
71
+ # workers: # <- worker config, i.e. overrides
72
+ # default:
73
+ # queues:
74
+ # - default
75
+ # - mailers
74
76
  #
75
77
  # @example Staging (multi-threaded, single process)
76
- # staging:
78
+ # staging: # <- environment config, i.e. defaults
77
79
  # default_forks: 0
78
80
  # default_threads: 10
79
81
  # default_gc_limit: 5000
80
- # queues:
81
- # critical:
82
- # threads: 1 # Single-threaded for critical jobs
82
+ # workers: # <- worker config, i.e. overrides
83
83
  # default:
84
- # threads: 10 # 10 concurrent threads
85
- # mailers:
86
- # threads: 5 # 5 concurrent emails
84
+ # queues:
85
+ # - critical
86
+ # - default
87
+ # - mailers
87
88
  #
88
- # @example Production (Puma-style: forks × threads)
89
- # production:
89
+ # @example Production (Puma-style: forks × threads with worker overrides)
90
+ # production: # <- environment config, i.e. defaults
90
91
  # default_forks: 2
91
92
  # default_threads: 10
92
93
  # default_gc_limit: 5000
93
- # queues:
94
- # critical:
95
- # forks: 1 # Single fork
96
- # threads: 1 # Single thread = 1 concurrent job
94
+ # workers: # <- worker config, i.e. overrides
97
95
  # default:
98
- # forks: 4 # 4 forks (Puma-style)
99
- # threads: 10 # 10 threads per fork = 40 total concurrent jobs
100
- # mailers:
101
- # forks: 2
102
- # threads: 5 # 2×5 = 10 total email senders
96
+ # forks: 4 # Overrides default_forks
97
+ # threads: 10 # Overrides default_threads
98
+ # queues:
99
+ # - critical
100
+ # - default
101
+ # - mailers
103
102
  #
104
103
  class Worker < Base
105
104
  # Starts the worker.
data/lib/postburner.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require "postburner/version"
2
2
  require "postburner/configuration"
3
3
  require "postburner/connection"
4
- require "postburner/queue_config"
5
4
  require "postburner/beanstalkd"
6
5
  require "postburner/tracked"
7
6
  require "postburner/active_job/payload"