rocketjob 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0725e6ae6b369e365e609d97bd8ee41fe5e34966
4
- data.tar.gz: 19a23fd15b27daad4767f4e560506857b71935b5
3
+ metadata.gz: 75e6c5434b4b1968db94743e4b81fcc0a68cabc3
4
+ data.tar.gz: 735b0996986532d05ee46c546df4033a2b0d3c95
5
5
  SHA512:
6
- metadata.gz: 5d86348478486ad2acd418d55d82bf17c7a6ad2080f711f497a9d561cb23c7debf67b680d3d2546efa201070431dea98a53281be8ea88ff0053321c5ecee1f9b
7
- data.tar.gz: 64fe3f0a32fef2122728edabf494964a3d77b76c51d360fbe8343d04e4afe93c3640a4d0bd051b323c761ab91bbcfdeb3da6465a7e15e9f1b05f41fa6c168939
6
+ metadata.gz: 0556e6e99fa676eaa9eea871b5c32ffa372794ad5358a16f1daa11f28e0739bfc7954760d00a1d1d358ad135dfcf88e08823cdd22957fc41a5fbeb47b71fd0bd
7
+ data.tar.gz: f780fa752304a93234e9dee155ab47a1949011c20d4a7cd2a949b068e0c65e195296a6edf7469d95af695d9c83d2f8041bcc3d53964fe2e71814d2a28dafeb5c
@@ -129,7 +129,7 @@ module RocketJob
129
129
  validates_presence_of :pattern, :job_class_name, :perform_method
130
130
 
131
131
  validates_each :perform_method do |record, attr, value|
132
- if (klass = record.job_class) && !klass.instance_method(value)
132
+ if (klass = record.job_class) && !klass.instance_methods.include?(value)
133
133
  record.errors.add(attr, "Method not implemented by #{record.job_class_name}")
134
134
  end
135
135
  end
@@ -145,7 +145,7 @@ module RocketJob
145
145
  end
146
146
 
147
147
  validates_each :arguments do |record, attr, value|
148
- if (klass = record.job_class)
148
+ if (klass = record.job_class) && klass.instance_methods.include?(record.perform_method)
149
149
  count = klass.argument_count(record.perform_method)
150
150
  record.errors.add(attr, "There must be #{count} argument(s)") if value.size != count
151
151
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: UTF-8
2
2
  module RocketJob #:nodoc
3
- VERSION = '1.1.1'
3
+ VERSION = '1.1.2'
4
4
  end
@@ -117,11 +117,14 @@ module RocketJob
117
117
  # Destroy's all instances of zombie workers and requeues any jobs still "running"
118
118
  # on those workers
119
119
  def self.destroy_zombies
120
+ count = 0
120
121
  each do |worker|
121
- next unless zombie?
122
+ next unless worker.zombie?
122
123
  logger.warn "Destroying zombie worker #{worker.name}, and requeueing its jobs"
123
124
  worker.destroy
125
+ count += 1
124
126
  end
127
+ count
125
128
  end
126
129
 
127
130
  def self.destroy_dead_workers
@@ -220,8 +223,9 @@ module RocketJob
220
223
  # - The worker process is "hanging"
221
224
  # - The worker is no longer able to communicate with the MongoDB Server
222
225
  def zombie?(missed = 4)
226
+ return false unless running?
223
227
  dead_seconds = Config.instance.heartbeat_seconds * missed
224
- (Time.now - worker.heartbeat.updated_at) >= dead_seconds
228
+ (Time.now - heartbeat.updated_at) >= dead_seconds
225
229
  end
226
230
 
227
231
  protected
@@ -97,6 +97,16 @@ class DirmonEntryTest < Minitest::Test
97
97
  assert_equal ["can't be blank"], entry.errors[:pattern], entry.errors.inspect
98
98
  end
99
99
 
100
+ context 'perform_method' do
101
+ context 'with an invalid method' do
102
+ should 'add errors to the entry' do
103
+ entry = RocketJob::DirmonEntry.new(job_class_name: 'Jobs::TestJob', perform_method: :missing_perform_method)
104
+ assert_equal false, entry.valid?
105
+ assert_equal ['Method not implemented by Jobs::TestJob'], entry.errors[:perform_method], entry.errors.inspect
106
+ end
107
+ end
108
+ end
109
+
100
110
  context 'job_class_name' do
101
111
  should 'ensure presence' do
102
112
  assert entry = RocketJob::DirmonEntry.new(pattern: '/abc/**')
@@ -106,6 +116,16 @@ class DirmonEntryTest < Minitest::Test
106
116
  end
107
117
 
108
118
  context 'arguments' do
119
+ should 'allow no arguments' do
120
+ assert entry = RocketJob::DirmonEntry.new(
121
+ job_class_name: 'Jobs::TestJob',
122
+ pattern: '/abc/**',
123
+ perform_method: :result
124
+ )
125
+ assert_equal true, entry.valid?, entry.errors.inspect
126
+ assert_equal [], entry.errors[:arguments], entry.errors.inspect
127
+ end
128
+
109
129
  should 'ensure correct number of arguments' do
110
130
  assert entry = RocketJob::DirmonEntry.new(
111
131
  job_class_name: 'Jobs::TestJob',
data/test/worker_test.rb CHANGED
@@ -20,6 +20,7 @@ class WorkerTest < Minitest::Test
20
20
 
21
21
  teardown do
22
22
  @job.destroy if @job && !@job.new_record?
23
+ @worker.destroy if @worker && !@worker.new_record?
23
24
  end
24
25
 
25
26
  context '.config' do
@@ -39,5 +40,58 @@ class WorkerTest < Minitest::Test
39
40
  end
40
41
  end
41
42
 
43
+ context '#zombie?' do
44
+ setup do
45
+ RocketJob::Config.instance.heartbeat_seconds = 1
46
+ end
47
+
48
+ should 'when not a zombie' do
49
+ @worker.build_heartbeat(
50
+ updated_at: 2.seconds.ago,
51
+ current_threads: 3
52
+ )
53
+ @worker.started!
54
+ assert_equal false, @worker.zombie?
55
+ assert_equal false, @worker.zombie?(4)
56
+ assert_equal true, @worker.zombie?(1)
57
+ end
58
+
59
+ should 'when a zombie' do
60
+ @worker.build_heartbeat(
61
+ updated_at: 1.hour.ago,
62
+ current_threads: 5
63
+ )
64
+ @worker.started!
65
+ assert_equal true, @worker.zombie?
66
+ end
67
+ end
68
+
69
+ context '.destroy_zombies' do
70
+ setup do
71
+ RocketJob::Config.instance.heartbeat_seconds = 1
72
+ end
73
+
74
+ should 'when not a zombie' do
75
+ @worker.build_heartbeat(
76
+ updated_at: 2.seconds.ago,
77
+ current_threads: 3
78
+ )
79
+ @worker.started!
80
+ assert_equal 0, RocketJob::Worker.destroy_zombies
81
+ assert_equal true, RocketJob::Worker.where(id: @worker.id).exist?
82
+ end
83
+
84
+ should 'when a zombie' do
85
+ @worker.build_heartbeat(
86
+ updated_at: 10.seconds.ago,
87
+ current_threads: 3
88
+ )
89
+ @worker.started!
90
+ assert_equal 1, RocketJob::Worker.destroy_zombies
91
+ assert_equal false, RocketJob::Worker.where(id: @worker.id).exist?
92
+ end
93
+
94
+ end
95
+
42
96
  end
43
97
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocketjob
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-25 00:00:00.000000000 Z
11
+ date: 2015-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm