Skip to content

Commit

Permalink
Move the thread knowledge to where we start the runner
Browse files Browse the repository at this point in the history
  • Loading branch information
jrafanie committed Mar 9, 2017
1 parent b03d569 commit 18ffca9
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 26 deletions.
14 changes: 12 additions & 2 deletions app/models/embedded_ansible_worker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,18 @@ class EmbeddedAnsibleWorker < MiqWorker
self.required_roles = ['embedded_ansible']

def start_runner
self.class::Runner.start_worker(worker_options)
# TODO: return supervisord pid
Thread.new do
begin
self.class::Runner.start_worker(worker_options)
# TODO: return supervisord pid
rescue SystemExit
# Because we're running in a thread on the Server
# we need to intercept SystemExit and exit our thread,
# not the main server thread!
log.info("#{log_prefix} SystemExit received, exiting monitoring Thread")
Thread.exit
end
end
end

def kill
Expand Down
43 changes: 19 additions & 24 deletions app/models/embedded_ansible_worker/runner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,30 @@ class EmbeddedAnsibleWorker::Runner < MiqWorker::Runner
self.wait_for_worker_monitor = false

def prepare
# Override prepare so we don't get set as started
ObjectSpace.garbage_collect
# Overriding prepare so we can set started when we're ready
do_before_work_loop
started_worker_record
self
end

# This thread runs forever until a stop request is received, which with send us to do_exit to exit our thread
def do_work_loop
Thread.new do
begin
setup_ansible
started_worker_record

update_embedded_ansible_provider

_log.info("entering ansible monitor loop")
loop do
do_work
send(poll_method)
end
rescue => err
_log.log_backtrace(err)
do_exit
end
_log.info("entering ansible monitor loop")
loop do
do_work
send(poll_method)
end
rescue => err
_log.log_backtrace(err)
do_exit
end

def do_before_work_loop
setup_ansible
update_embedded_ansible_provider
rescue => err
_log.log_backtrace(err)
do_exit
end

def setup_ansible
Expand All @@ -44,16 +45,10 @@ def do_work
end
end

# Because we're running in a thread on the Server
# we need to intercept SystemExit and exit our thread,
# not the main server thread!
def do_exit(*args)
# ensure this doesn't fail or that we can still get to the super call
EmbeddedAnsible.disable
super
rescue SystemExit
_log.info("#{log_prefix} SystemExit received, exiting monitoring Thread")
Thread.exit
end

def update_embedded_ansible_provider
Expand Down

0 comments on commit 18ffca9

Please sign in to comment.