← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1384580] [NEW] Rpc and api green thread in neutron server fail to restart worker

 

Public bug reported:

When neutorn server starts, it will spawn two green threads for rpc and
api. If multi rpc workers and api workers are configured, each green
thread will fork several child processes to handle the requests, then
os.waitpid(0, os.WNOHANG) is called so if one child process exits, it
can restart the child process to guarantee the number of running
workers.

Here comes the problem, both rpc and api green thread will maintain a
list of pid of the child processes they fork, only when the pid return
from os.waitpid is in the list, the child process will be restarted. But
since rpc and api green thread are in the same parent process, there is
one scenario that rpc green thread get a pid from os.waitpid which is
forked by api green thread, of course this pid is not in the pid list of
rpc green thread, so it will not restart the child process and there is
no chance the child process can be restarted.

** Affects: neutron
     Importance: Undecided
     Assignee: Xurong Yang (idopra)
         Status: New

** Changed in: neutron
     Assignee: (unassigned) => Xurong Yang (idopra)

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1384580

Title:
  Rpc and api green thread in neutron server fail to restart worker

Status in OpenStack Neutron (virtual network service):
  New

Bug description:
  When neutorn server starts, it will spawn two green threads for rpc
  and api. If multi rpc workers and api workers are configured, each
  green thread will fork several child processes to handle the requests,
  then os.waitpid(0, os.WNOHANG) is called so if one child process
  exits, it can restart the child process to guarantee the number of
  running workers.

  Here comes the problem, both rpc and api green thread will maintain a
  list of pid of the child processes they fork, only when the pid return
  from os.waitpid is in the list, the child process will be restarted.
  But since rpc and api green thread are in the same parent process,
  there is one scenario that rpc green thread get a pid from os.waitpid
  which is forked by api green thread, of course this pid is not in the
  pid list of rpc green thread, so it will not restart the child process
  and there is no chance the child process can be restarted.

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1384580/+subscriptions


Follow ups

References