API workers might not work when sync thread is enabled
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
neutron |
Invalid
|
Undecided
|
Unassigned | ||
Icehouse |
New
|
High
|
Salvatore Orlando | ||
Juno |
New
|
High
|
Salvatore Orlando | ||
vmware-nsx |
Fix Released
|
High
|
Salvatore Orlando |
Bug Description
API workers are started with a fork().
It is well known that this operation uses CoW on the child process - and this should not constitute a problem.
However, the status synch thread is started at plugin initialization and might be already running when the API workers are forked.
The NSX API client, extensively used by this thread, uses an eventlet semaphore to grab backend connections from a pool.
It is therefore possible that when a worker process is forked it receives semaphore which are in "busy" state. Once forked these semaphores are new objects, and they will never be unblocked. The API worker therefore simply hangs.
This behaviour has been confirmed by observation on the field
Changed in neutron: | |
status: | New → Invalid |
Changed in vmware-nsx: | |
status: | In Progress → Fix Committed |
Changed in vmware-nsx: | |
status: | Fix Committed → Fix Released |
Fix proposed to branch: master /review. openstack. org/154466
Review: https:/