Skip to content

Instantly share code, notes, and snippets.

@jrafanie
Created May 12, 2017 19:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jrafanie/e872383ca7eede3e9fc82f71483c939d to your computer and use it in GitHub Desktop.
Save jrafanie/e872383ca7eede3e9fc82f71483c939d to your computer and use it in GitHub Desktop.
ManageIQ worker creation and start
...
MiqServer.start
...
server.start [1]
...
server.monitor_loop [2]
[1] server.start
deactivate/activate roles
monitor_servers and roles
sync active roles
...
start_drb_server
sync_workers [5] (one time sync_workers)
wait for workers
"started"
[2] server.monitor_loop
loop { monitor[3]; sleep }
[3] server.monitor
heartbeat
...
monitor_workers [4]
...
[4] server.monitor_workers
...
sync_workers [5]
check not responding/pending stop
post messages for workers
...
[5] server.sync_workers
self.class.monitor_class_names.each {|klass| klass.constantize.sync_workers[6] }
#monitor_class_names is a harcoded constant list of all of the workers classes
...
[6] MiqWorker#sync_workers (for each worker class)
...
MiqWorker.start_worker [7]
[7] MiqWorker.start_worker
...
w = create_worker_record (basically .create)
w.start [8]
[8] MiqWorker#start
start_runner [9]
[9] MiqWorker#start_runner (each worker class can specify how they want to start their runner, default is to fork)
MiqWorker.before_fork
pid = fork { MiqWorker.after_fork; MiqWorker::Runner.start_worker [10] }
Process.detach(pid)
[10] MiqWorker::Runner.start_worker
new.start [11]
[11] MiqWorker::Runner#start
prepare [12]
run [13]
[12] MiqWorker::Runner#prepare
...
started_worker_record (sets row to 'started')
...
do_before_work_loop
[13] MiqWorker::Runner#run / do_work_loop
loop do
hearbeat
do_work
...
sleep
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment