rocketjob 3.4.3 → 3.5.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.
Files changed (64) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +27 -0
  3. data/bin/rocketjob +1 -1
  4. data/lib/rocket_job/active_worker.rb +4 -3
  5. data/lib/rocket_job/cli.rb +13 -12
  6. data/lib/rocket_job/config.rb +17 -13
  7. data/lib/rocket_job/dirmon_entry.rb +88 -91
  8. data/lib/rocket_job/extensions/mongo/logging.rb +8 -4
  9. data/lib/rocket_job/extensions/mongoid/factory.rb +8 -6
  10. data/lib/rocket_job/extensions/rocket_job_adapter.rb +2 -4
  11. data/lib/rocket_job/heartbeat.rb +7 -8
  12. data/lib/rocket_job/job_exception.rb +6 -5
  13. data/lib/rocket_job/jobs/dirmon_job.rb +5 -7
  14. data/lib/rocket_job/jobs/housekeeping_job.rb +3 -2
  15. data/lib/rocket_job/jobs/on_demand_job.rb +104 -0
  16. data/lib/rocket_job/jobs/simple_job.rb +0 -2
  17. data/lib/rocket_job/jobs/upload_file_job.rb +100 -0
  18. data/lib/rocket_job/performance.rb +15 -10
  19. data/lib/rocket_job/plugins/cron.rb +7 -124
  20. data/lib/rocket_job/plugins/document.rb +8 -10
  21. data/lib/rocket_job/plugins/job/callbacks.rb +0 -1
  22. data/lib/rocket_job/plugins/job/logger.rb +0 -1
  23. data/lib/rocket_job/plugins/job/model.rb +15 -20
  24. data/lib/rocket_job/plugins/job/persistence.rb +3 -13
  25. data/lib/rocket_job/plugins/job/state_machine.rb +1 -2
  26. data/lib/rocket_job/plugins/job/throttle.rb +16 -12
  27. data/lib/rocket_job/plugins/job/worker.rb +15 -19
  28. data/lib/rocket_job/plugins/processing_window.rb +2 -2
  29. data/lib/rocket_job/plugins/restart.rb +3 -4
  30. data/lib/rocket_job/plugins/retry.rb +2 -3
  31. data/lib/rocket_job/plugins/singleton.rb +2 -3
  32. data/lib/rocket_job/plugins/state_machine.rb +19 -23
  33. data/lib/rocket_job/rocket_job.rb +4 -5
  34. data/lib/rocket_job/server.rb +35 -41
  35. data/lib/rocket_job/version.rb +2 -2
  36. data/lib/rocket_job/worker.rb +22 -21
  37. data/lib/rocketjob.rb +2 -0
  38. data/test/config/mongoid.yml +2 -2
  39. data/test/config_test.rb +0 -2
  40. data/test/dirmon_entry_test.rb +161 -134
  41. data/test/dirmon_job_test.rb +80 -78
  42. data/test/job_test.rb +0 -2
  43. data/test/jobs/housekeeping_job_test.rb +0 -1
  44. data/test/jobs/on_demand_job_test.rb +59 -0
  45. data/test/jobs/upload_file_job_test.rb +99 -0
  46. data/test/plugins/cron_test.rb +1 -3
  47. data/test/plugins/job/callbacks_test.rb +8 -13
  48. data/test/plugins/job/defaults_test.rb +0 -1
  49. data/test/plugins/job/logger_test.rb +2 -4
  50. data/test/plugins/job/model_test.rb +1 -2
  51. data/test/plugins/job/persistence_test.rb +0 -2
  52. data/test/plugins/job/state_machine_test.rb +0 -2
  53. data/test/plugins/job/throttle_test.rb +6 -8
  54. data/test/plugins/job/worker_test.rb +1 -2
  55. data/test/plugins/processing_window_test.rb +0 -2
  56. data/test/plugins/restart_test.rb +0 -1
  57. data/test/plugins/retry_test.rb +1 -2
  58. data/test/plugins/singleton_test.rb +0 -2
  59. data/test/plugins/state_machine_event_callbacks_test.rb +1 -2
  60. data/test/plugins/state_machine_test.rb +0 -2
  61. data/test/plugins/transaction_test.rb +5 -7
  62. data/test/test_db.sqlite3 +0 -0
  63. data/test/test_helper.rb +2 -1
  64. metadata +42 -36
@@ -2,129 +2,7 @@ require 'active_support/concern'
2
2
 
3
3
  module RocketJob
4
4
  module Plugins
5
- # Automatically schedules the job to start based on the supplied `cron_schedule`.
6
- # Once started the job will automatically restart on completion and will only run again
7
- # according to the `cron_schedule`.
8
- # Failed jobs are aborted so that they cannot be restarted since a new instance has already
9
- # been enqueued.
10
- #
11
- # Include RocketJob::Plugins::Singleton to prevent multiple copies of the job from running at
12
- # the same time.
13
- #
14
- # Unlike cron, if a job is already running, another one is not queued when the cron
15
- # schedule needs another started, but rather on completion of the current job. This prevents
16
- # multiple instances of the same job from running at the same time. The next instance of the
17
- # job is only scheduled on completion of the current job instance.
18
- #
19
- # For example if the job takes 10 minutes to complete, and is scheduled to run every 5 minutes,
20
- # it will only be run every 10 minutes.
21
- #
22
- # Their is no centralized scheduler or need to start schedulers anywhere, since the jobs
23
- # can be picked up by any Rocket Job worker. Once processing is complete a new instance is then
24
- # automatically scheduled based on the `cron_schedule`.
25
- #
26
- # A job is only queued to run at the specified `cron_schedule`, it will only run if there are workers
27
- # available to run. For example if workers are busy working on higher priority jobs, then the job
28
- # will only run once those jobs have completed, or their priority lowered. Additionally, while the
29
- # job is queued no additional instances will be enqueued, even if the next cron interval has been reached.
30
- #
31
- # Notes:
32
- # - The job will not be restarted if:
33
- # - A validation fails after cloning this job.
34
- # - The job has expired.
35
- # - Any time the `cron_schedule` is changed, the `run_at` is automatically set before saving the changes.
36
- # - However, if the `run_at` is explicitly set then it will not be overridden.
37
- # - `cron_schedule` is not a required field so that the same job class
38
- # - can be scheduled to run at regular intervals,
39
- # - and run on an ad-hoc basis with custom values.
40
- # - On job failure
41
- # - a new future instance is created immediately.
42
- # - the current instance is marked as failed and its cron schedule is set to nil.
43
- # - Prevents the failed instance from creating a new future instance when it completes.
44
- #
45
- # Example, schedule the job to run at regular intervals:
46
- #
47
- # class MyCronJob < RocketJob::Job
48
- # include RocketJob::Plugins::Cron
49
- #
50
- # # Set the default cron_schedule
51
- # self.cron_schedule = "* 1 * * * UTC"
52
- #
53
- # def perform
54
- # puts "DONE"
55
- # end
56
- # end
57
- #
58
- # # Queue the job for processing using the default cron_schedule specified above.
59
- # MyCronJob.create!
60
- #
61
- #
62
- # Example, a job that can run at regular intervals, and can be run for ad-hoc reporting etc.:
63
- #
64
- # class ReportJob < RocketJob::Job
65
- # # Do not set a default cron_schedule so that the job can also be used for ad-hoc work.
66
- # include RocketJob::Plugins::Cron
67
- #
68
- # field :start_date, type: Date
69
- # field :end_date, type: Date
70
- #
71
- # def perform
72
- # # Uses `scheduled_at` to take into account any possible delays.
73
- # self.start_at ||= scheduled_at.beginning_of_week.to_date
74
- # self.end_at ||= scheduled_at.end_of_week.to_date
75
- #
76
- # puts "Running report, starting at #{start_date}, ending at #{end_date}"
77
- # end
78
- # end
79
- #
80
- # # Queue the job for processing using a cron_schedule.
81
- # # On completion the job will create a new instance to run at a future date.
82
- # ReportJob.create!(cron_schedule: '* 1 * * * America/New_York')
83
- #
84
- # # Queue the job for processing outside of the above cron schedule.
85
- # # On completion the job will _not_ create a new instance to run at a future date.
86
- # job = ReportJob.create!(start_date: 30.days.ago, end_date: 10.days.ago)
87
- #
88
- #
89
- # To prevent multiple instances of the job from running at the same time, add the singleton plug-in:
90
- # include RocketJob::Plugins::Singleton
91
- #
92
- # Example: Only allow one instance of this job to be active at the same time (running, queued, scheduled, or failed):
93
- #
94
- # class MyCronJob < RocketJob::Job
95
- # # Add `cron_schedule`
96
- # include RocketJob::Plugins::Cron
97
- # # Prevents mutiple instances from being queued or run at the same time
98
- # include RocketJob::Plugins::Singleton
99
- #
100
- # # Set the default cron_schedule
101
- # self.cron_schedule = "* 1 * * * UTC"
102
- #
103
- # def perform
104
- # puts "DONE"
105
- # end
106
- # end
107
- #
108
- # Note: The cron_schedule field is formatted as follows:
109
- #
110
- # * * * * * *
111
- # ┬ ┬ ┬ ┬ ┬ ┬
112
- # │ │ │ │ │ │
113
- # │ │ │ │ │ └ Optional: Timezone, for example: 'America/New_York', 'UTC'
114
- # │ │ │ │ └───── day_of_week (0-7) (0 or 7 is Sun, or use 3-letter names)
115
- # │ │ │ └────────── month (1-12, or use 3-letter names)
116
- # │ │ └─────────────── day_of_month (1-31)
117
- # │ └──────────────────── hour (0-23)
118
- # └───────────────────────── minute (0-59)
119
- #
120
- # * When specifying day of week, both day 0 and day 7 is Sunday.
121
- # * Ranges & Lists of numbers are allowed.
122
- # * Ranges or lists of names are not allowed.
123
- # * Ranges can include 'steps', so `1-9/2` is the same as `1,3,5,7,9`.
124
- # * Months or days of the week can be specified by name.
125
- # * Use the first three letters of the particular day or month (case doesn't matter).
126
- # * The timezone is recommended to prevent any issues with possible default timezone
127
- # differences across servers, or environments.
5
+ # Schedule jobs to run at set intervals.
128
6
  module Cron
129
7
  extend ActiveSupport::Concern
130
8
 
@@ -176,6 +54,12 @@ module RocketJob
176
54
  run_at || created_at
177
55
  end
178
56
 
57
+ # Make this job run now, regardless of the cron schedule.
58
+ # Upon completion the job will automatically reschedule itself.
59
+ def run_now!
60
+ update_attributes(run_at: nil) if cron_schedule
61
+ end
62
+
179
63
  # Returns [Time] the next time this job will be scheduled to run at.
180
64
  #
181
65
  # Parameters
@@ -192,7 +76,6 @@ module RocketJob
192
76
  return unless cron_schedule
193
77
  self.run_at = rocket_job_cron_next_time if cron_schedule_changed? && !run_at_changed?
194
78
  end
195
-
196
79
  end
197
80
  end
198
81
  end
@@ -34,17 +34,15 @@ module RocketJob
34
34
  # Apply changes to this document returning the updated document from the database.
35
35
  # Allows other changes to be made on the server that will be loaded.
36
36
  def find_and_update(attrs)
37
- if doc = collection.find(_id: id).find_one_and_update({'$set' => attrs}, return_document: :after)
38
- # Clear out keys that are not returned during the reload from MongoDB
39
- (fields.keys + embedded_relations.keys - doc.keys).each { |key| send("#{key}=", nil) }
40
- @attributes = doc
41
- apply_defaults
42
- self
43
- else
44
- raise(Mongoid::Errors::DocumentNotFound.new(self.class, id))
45
- end
37
+ doc = collection.find(_id: id).find_one_and_update({'$set' => attrs}, return_document: :after)
38
+ raise(Mongoid::Errors::DocumentNotFound.new(self.class, id)) unless doc
39
+
40
+ # Clear out keys that are not returned during the reload from MongoDB
41
+ (fields.keys + embedded_relations.keys - doc.keys).each { |key| send("#{key}=", nil) }
42
+ @attributes = doc
43
+ apply_defaults
44
+ self
46
45
  end
47
-
48
46
  end
49
47
  end
50
48
  end
@@ -84,7 +84,6 @@ module RocketJob
84
84
  set_callback(:perform, :around, *filters, &blk)
85
85
  end
86
86
  end
87
-
88
87
  end
89
88
  end
90
89
  end
@@ -28,7 +28,6 @@ module RocketJob
28
28
  &block
29
29
  )
30
30
  end
31
-
32
31
  end
33
32
  end
34
33
  end
@@ -9,7 +9,7 @@ module RocketJob
9
9
 
10
10
  included do
11
11
  # Fields that are end user editable.
12
- # For example are editable in Rocket Job Mission Control.
12
+ # For example are editable in Rocket Job Web Interface.
13
13
  class_attribute :user_editable_fields, instance_accessor: false
14
14
  self.user_editable_fields = []
15
15
 
@@ -156,7 +156,7 @@ module RocketJob
156
156
  # Scope for queued jobs that can run now
157
157
  # I.e. Queued jobs excluding scheduled jobs
158
158
  def queued_now
159
- queued.or({:run_at => nil}, {:run_at.lte => Time.now})
159
+ queued.or({run_at: nil}, :run_at.lte => Time.now)
160
160
  end
161
161
 
162
162
  # Defines all the fields that are accessible on the Document
@@ -182,10 +182,8 @@ module RocketJob
182
182
  end
183
183
  if options.delete(:class_attribute) == true
184
184
  class_attribute(name, instance_accessor: false)
185
- if options.has_key?(:default)
186
- public_send("#{name}=", options[:default])
187
- end
188
- options[:default] = lambda { self.class.public_send(name) }
185
+ public_send("#{name}=", options[:default]) if options.key?(:default)
186
+ options[:default] = -> { self.class.public_send(name) }
189
187
  end
190
188
  if options.delete(:copy_on_restart) == true
191
189
  self.rocket_job_restart_attributes += [name.to_sym] unless rocket_job_restart_attributes.include?(name.to_sym)
@@ -248,7 +246,7 @@ module RocketJob
248
246
  # Return [true|false] whether this job is sleeping.
249
247
  # I.e. No workers currently working on this job even if it is running.
250
248
  def sleeping?
251
- running? && (worker_count == 0)
249
+ running? && worker_count.zero?
252
250
  end
253
251
 
254
252
  # Returns [Integer] the number of workers currently working on this job.
@@ -263,32 +261,31 @@ module RocketJob
263
261
 
264
262
  # Returns [Hash] status of this job
265
263
  def as_json
266
- attrs = serializable_hash(methods: [:seconds, :duration])
264
+ attrs = serializable_hash(methods: %i[seconds duration])
267
265
  attrs.delete('result') unless collect_output?
268
- attrs.delete('failure_count') unless failure_count > 0
269
- case
270
- when queued?
266
+ attrs.delete('failure_count') unless failure_count.positive?
267
+ if queued?
271
268
  attrs.delete('started_at')
272
269
  attrs.delete('completed_at')
273
270
  attrs.delete('result')
274
271
  attrs
275
- when running?
272
+ elsif running?
276
273
  attrs.delete('completed_at')
277
274
  attrs.delete('result')
278
275
  attrs
279
- when completed?
276
+ elsif completed?
280
277
  attrs.delete('percent_complete')
281
278
  attrs
282
- when paused?
279
+ elsif paused?
283
280
  attrs.delete('completed_at')
284
281
  attrs.delete('result')
285
282
  # Ensure 'paused_at' appears first in the hash
286
283
  {'paused_at' => completed_at}.merge(attrs)
287
- when aborted?
284
+ elsif aborted?
288
285
  attrs.delete('completed_at')
289
286
  attrs.delete('result')
290
287
  {'aborted_at' => completed_at}.merge(attrs)
291
- when failed?
288
+ elsif failed?
292
289
  attrs.delete('completed_at')
293
290
  attrs.delete('result')
294
291
  {'failed_at' => completed_at}.merge(attrs)
@@ -302,10 +299,9 @@ module RocketJob
302
299
  h = as_json
303
300
  h.delete('seconds')
304
301
  h.dup.each_pair do |k, v|
305
- case
306
- when v.is_a?(Time)
302
+ if v.is_a?(Time)
307
303
  h[k] = v.in_time_zone(time_zone).to_s
308
- when v.is_a?(BSON::ObjectId)
304
+ elsif v.is_a?(BSON::ObjectId)
309
305
  h[k] = v.to_s
310
306
  end
311
307
  end
@@ -317,7 +313,6 @@ module RocketJob
317
313
  return false unless worker_name.present? && server_name.present?
318
314
  worker_name.start_with?(server_name)
319
315
  end
320
-
321
316
  end
322
317
  end
323
318
  end
@@ -10,8 +10,6 @@ module RocketJob
10
10
  included do
11
11
  # Store all job types in this collection
12
12
  store_in collection: 'rocket_job.jobs'
13
-
14
- after_initialize :remove_arguments
15
13
  end
16
14
 
17
15
  module ClassMethods
@@ -84,11 +82,11 @@ module RocketJob
84
82
  end
85
83
 
86
84
  # Calculate :queued_now and :scheduled if there are queued jobs
87
- if queued_count = counts[:queued]
85
+ if (queued_count = counts[:queued])
88
86
  scheduled_count = RocketJob::Job.scheduled.count
89
- if scheduled_count > 0
87
+ if scheduled_count.positive?
90
88
  queued_now_count = queued_count - scheduled_count
91
- counts[:queued_now] = queued_count - scheduled_count if queued_now_count > 0
89
+ counts[:queued_now] = queued_count - scheduled_count if queued_now_count.positive?
92
90
  counts[:scheduled] = scheduled_count
93
91
  else
94
92
  counts[:queued_now] = queued_count
@@ -112,14 +110,6 @@ module RocketJob
112
110
  self
113
111
  end
114
112
  end
115
-
116
- private
117
-
118
- # Remove old style arguments that were stored as an array
119
- def remove_arguments
120
- attributes.delete('arguments') unless respond_to?('arguments='.to_sym)
121
- end
122
-
123
113
  end
124
114
  end
125
115
  end
@@ -78,7 +78,7 @@ module RocketJob
78
78
 
79
79
  event :requeue do
80
80
  transitions from: :running, to: :queued,
81
- if: -> server_name { worker_on_server?(server_name) },
81
+ if: ->(server_name) { worker_on_server?(server_name) },
82
82
  after: :rocket_job_clear_started_at
83
83
  end
84
84
  end
@@ -165,7 +165,6 @@ module RocketJob
165
165
  destroy if destroy_on_complete && !new_record?
166
166
  end
167
167
  end
168
-
169
168
  end
170
169
  end
171
170
  end
@@ -47,21 +47,28 @@ module RocketJob
47
47
  #
48
48
  # Note: Throttles are executed in the order they are defined.
49
49
  def define_throttle(method_name, filter: :throttle_filter_class)
50
- raise(ArgumentError, "Filter for #{method_name} must be a Symbol or Proc") unless filter.is_a?(Symbol) || filter.is_a?(Proc)
51
- raise(ArgumentError, "Cannot define #{method_name} twice, undefine previous throttle first") if has_throttle?(method_name)
50
+ unless filter.is_a?(Symbol) || filter.is_a?(Proc)
51
+ raise(ArgumentError, "Filter for #{method_name} must be a Symbol or Proc")
52
+ end
53
+ if throttle?(method_name)
54
+ raise(ArgumentError, "Cannot define #{method_name} twice, undefine previous throttle first")
55
+ end
52
56
 
53
57
  self.rocket_job_throttles += [ThrottleDefinition.new(method_name, filter)]
54
58
  end
55
59
 
56
60
  # Undefine a previously defined throttle
57
- def undefine_throttle(method_name)
58
- rocket_job_throttles.delete_if { |throttle| throttle.method_name }
61
+ def undefine_throttle(_method_name)
62
+ rocket_job_throttles.delete_if(&:method_name)
59
63
  end
60
64
 
61
65
  # Has a throttle been defined?
62
- def has_throttle?(method_name)
66
+ def throttle?(method_name)
63
67
  rocket_job_throttles.find { |throttle| throttle.method_name == method_name }
64
68
  end
69
+
70
+ # DEPRECATED
71
+ alias has_throttle? throttle?
65
72
  end
66
73
 
67
74
  # Default throttle to use when the throttle is exceeded.
@@ -86,17 +93,14 @@ module RocketJob
86
93
  def rocket_job_evaluate_throttles
87
94
  rocket_job_throttles.each do |throttle|
88
95
  # Throttle exceeded?
89
- if send(throttle.method_name)
90
- logger.debug { "Throttle: #{throttle.method_name} has been exceeded. #{self.class.name}:#{id}" }
91
- filter = throttle.filter
92
- return filter.is_a?(Proc) ? filter.call(self) : send(filter)
93
- end
96
+ next unless send(throttle.method_name)
97
+ logger.debug { "Throttle: #{throttle.method_name} has been exceeded. #{self.class.name}:#{id}" }
98
+ filter = throttle.filter
99
+ return filter.is_a?(Proc) ? filter.call(self) : send(filter)
94
100
  end
95
101
  nil
96
102
  end
97
-
98
103
  end
99
-
100
104
  end
101
105
  end
102
106
  end
@@ -10,15 +10,15 @@ module RocketJob
10
10
  module ClassMethods
11
11
  # Run this job now.
12
12
  #
13
- # The job is not saved to the database since it is processed entriely in memory
13
+ # The job is not saved to the database since it is processed entirely in memory
14
14
  # As a result before_save and before_destroy callbacks will not be called.
15
15
  # Validations are still called however prior to calling #perform
16
16
  #
17
17
  # Note:
18
18
  # - Only batch throttles are checked when perform_now is called.
19
- def perform_now(args, &block)
19
+ def perform_now(args)
20
20
  job = new(args)
21
- block.call(job) if block
21
+ yield(job) if block_given?
22
22
  job.perform_now
23
23
  job
24
24
  end
@@ -38,14 +38,13 @@ module RocketJob
38
38
  # If a job is in queued state it will be started
39
39
  def rocket_job_next_job(worker_name, filter = {})
40
40
  while (job = rocket_job_retrieve(worker_name, filter))
41
- case
42
- when job.running?
43
- # Batch Job
44
- return job
45
- when job.expired?
41
+ # Batch Job?
42
+ return job if job.running?
43
+
44
+ if job.expired?
46
45
  job.rocket_job_fail_on_exception!(worker_name) { job.destroy }
47
46
  logger.info "Destroyed expired job #{job.class.name}, id:#{job.id}"
48
- when new_filter = job.send(:rocket_job_evaluate_throttles)
47
+ elsif (new_filter = job.send(:rocket_job_evaluate_throttles))
49
48
  rocket_job_merge_filter(filter, new_filter)
50
49
  # Restore retrieved job so that other workers can process it later
51
50
  job.set(worker_name: nil, state: :queued)
@@ -62,7 +61,7 @@ module RocketJob
62
61
  # Requeues all jobs that were running on a server that died
63
62
  def requeue_dead_server(server_name)
64
63
  # Need to requeue paused, failed since user may have transitioned job before it finished
65
- where(:state.in => [:running, :paused, :failed]).each do |job|
64
+ where(:state.in => %i[running paused failed]).each do |job|
66
65
  job.requeue!(server_name) if job.may_requeue?(server_name)
67
66
  end
68
67
  end
@@ -73,7 +72,7 @@ module RocketJob
73
72
  perform_now(args, &block)
74
73
  else
75
74
  job = new(args)
76
- block.call(job) if block
75
+ yield(job) if block
77
76
  job.save!
78
77
  job
79
78
  end
@@ -84,7 +83,7 @@ module RocketJob
84
83
  def rocket_job_merge_filter(target, source)
85
84
  source.each_pair do |k, v|
86
85
  target[k] =
87
- if previous = target[k]
86
+ if (previous = target[k])
88
87
  v.is_a?(Array) ? previous + v : v
89
88
  else
90
89
  v
@@ -136,12 +135,10 @@ module RocketJob
136
135
  self.exception = JobException.from_exception(exc)
137
136
  exception.worker_name = worker_name
138
137
  save! unless new_record? || destroyed?
138
+ elsif new_record? || destroyed?
139
+ fail(worker_name, exc)
139
140
  else
140
- if new_record? || destroyed?
141
- fail(worker_name, exc)
142
- else
143
- fail!(worker_name, exc)
144
- end
141
+ fail!(worker_name, exc)
145
142
  end
146
143
  raise exc if re_raise_exceptions
147
144
  end
@@ -154,7 +151,7 @@ module RocketJob
154
151
  # is set in the job itself.
155
152
  #
156
153
  # Thread-safe, can be called by multiple threads at the same time
157
- def rocket_job_work(worker, re_raise_exceptions = false, filter = nil)
154
+ def rocket_job_work(worker, re_raise_exceptions = false, _filter = nil)
158
155
  raise(ArgumentError, 'Job must be started before calling #rocket_job_work') unless running?
159
156
  rocket_job_fail_on_exception!(worker.name, re_raise_exceptions) do
160
157
  if _perform_callbacks.empty?
@@ -186,7 +183,6 @@ module RocketJob
186
183
  return [] if !running? || (server_name && !worker_on_server?(server_name))
187
184
  [ActiveWorker.new(worker_name, started_at, self)]
188
185
  end
189
-
190
186
  end
191
187
  end
192
188
  end