Class: Swarm::Engine::Worker
- Inherits:
-
Object
- Object
- Swarm::Engine::Worker
show all
- Defined in:
- lib/swarm/engine/worker.rb,
lib/swarm/engine/worker/command.rb
Defined Under Namespace
Classes: Command, NotRunningError
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(hive: Hive.default) ⇒ Worker
Returns a new instance of Worker.
10
11
12
|
# File 'lib/swarm/engine/worker.rb', line 10
def initialize(hive: Hive.default)
@hive = hive
end
|
Instance Attribute Details
#hive ⇒ Object
Returns the value of attribute hive.
8
9
10
|
# File 'lib/swarm/engine/worker.rb', line 8
def hive
@hive
end
|
#queue ⇒ Object
Returns the value of attribute queue.
8
9
10
|
# File 'lib/swarm/engine/worker.rb', line 8
def queue
@queue
end
|
Instance Method Details
#process_next_job ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/swarm/engine/worker.rb', line 31
def process_next_job
begin
@current_job = queue.reserve_job(self)
@working = true
work_on(@current_job)
queue.delete_job(@current_job) if @current_job
rescue Queue::JobReservationFailed
retry
rescue StandardError
queue.bury_job(@current_job) if @current_job
ensure
queue.clean_up_job(@current_job) if @current_job
@working = false
@current_job = nil
end
end
|
#run! ⇒ Object
22
23
24
25
26
27
28
29
|
# File 'lib/swarm/engine/worker.rb', line 22
def run!
setup
@running = true
while running?
process_next_job
end
teardown
end
|
#running? ⇒ Boolean
52
53
54
|
# File 'lib/swarm/engine/worker.rb', line 52
def running?
@running == true && queue
end
|
#setup ⇒ Object
14
15
16
|
# File 'lib/swarm/engine/worker.rb', line 14
def setup
@queue = hive.work_queue.prepare_for_work(self)
end
|
#stop! ⇒ Object
56
57
58
59
|
# File 'lib/swarm/engine/worker.rb', line 56
def stop!
@running = false
@current_job = nil
end
|
#teardown ⇒ Object
18
19
20
|
# File 'lib/swarm/engine/worker.rb', line 18
def teardown
@queue = nil
end
|
#work_on(queue_job) ⇒ Object
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/swarm/engine/worker.rb', line 61
def work_on(queue_job)
raise NotRunningError unless running?
command = Command.from_job(queue_job, hive: hive)
if command.stop?
queue.remove_worker(self, :stop_job => queue_job)
stop!
else
command.run!
end
end
|
#working? ⇒ Boolean
48
49
50
|
# File 'lib/swarm/engine/worker.rb', line 48
def working?
@working == true
end
|