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.
12
13
14
|
# File 'lib/swarm/engine/worker.rb', line 12
def initialize(hive: Hive.default)
@hive = hive
end
|
Instance Attribute Details
#hive ⇒ Object
Returns the value of attribute hive.
10
11
12
|
# File 'lib/swarm/engine/worker.rb', line 10
def hive
@hive
end
|
#queue ⇒ Object
Returns the value of attribute queue.
10
11
12
|
# File 'lib/swarm/engine/worker.rb', line 10
def queue
@queue
end
|
Instance Method Details
#cleanup! ⇒ Object
44
45
46
47
48
|
# File 'lib/swarm/engine/worker.rb', line 44
def cleanup!
queue.clean_up_job(@current_job) if @current_job
@working = false
@current_job = nil
end
|
#process_next_job ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/swarm/engine/worker.rb', line 31
def process_next_job
@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
cleanup!
end
|
#run! ⇒ Object
24
25
26
27
28
29
|
# File 'lib/swarm/engine/worker.rb', line 24
def run!
setup
@running = true
process_next_job while running?
teardown
end
|
#running? ⇒ Boolean
54
55
56
|
# File 'lib/swarm/engine/worker.rb', line 54
def running?
@running == true && queue
end
|
#setup ⇒ Object
16
17
18
|
# File 'lib/swarm/engine/worker.rb', line 16
def setup
@queue = hive.work_queue.prepare_for_work(self)
end
|
#stop! ⇒ Object
58
59
60
61
|
# File 'lib/swarm/engine/worker.rb', line 58
def stop!
@running = false
@current_job = nil
end
|
#teardown ⇒ Object
20
21
22
|
# File 'lib/swarm/engine/worker.rb', line 20
def teardown
@queue = nil
end
|
#work_on(queue_job) ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/swarm/engine/worker.rb', line 63
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
50
51
52
|
# File 'lib/swarm/engine/worker.rb', line 50
def working?
@working == true
end
|