<div dir="ltr">Just like the Neutron plugin manager, also ML2 driver manager ensure drivers are loaded only once regardless of the number of workers.<div>What Kevin did proves that drivers are correctly loaded before forking (I reckon).</div><div><br></div><div>However, forking is something to be careful about especially when using eventlet. For the plugin my team maintains we were creating a periodic task during plugin initialisation.</div><div>This lead to an interesting condition where API workers were hanging [1]. This situation was fixed with a rather pedestrian fix - by adding a delay.</div><div><br></div><div>Generally speaking I would find useful to have a way to "identify" an API worker in order to designate a specific one for processing that should not be made redundant.</div><div>On the other hand I self-object to the above statement by saying that API workers are not supposed to do this kind of processing, which should be deferred to some other helper process.</div><div><br></div><div>Salvatore</div><div><br></div><div>[1] <a href="https://bugs.launchpad.net/vmware-nsx/+bug/1420278">https://bugs.launchpad.net/vmware-nsx/+bug/1420278</a></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 8 May 2015 at 09:43, Kevin Benton <span dir="ltr"><<a href="mailto:blak111@gmail.com" target="_blank">blak111@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I'm not sure I understand the behavior you are seeing. When your mechanism driver gets initialized and kicks off processing, all of that should be happening in the parent PID. I don't know why your child processes start executing code that wasn't invoked. Can you provide a pointer to the code or give a sample that reproduces the issue?<div><br></div><div>I modified the linuxbridge mech driver to try to reproduce it: <a href="http://paste.openstack.org/show/216859/" target="_blank">http://paste.openstack.org/show/216859/</a></div><div><br></div><div>In the output, I never received any of the init code output I added more than once, including the function spawned using eventlet.</div><div><br></div><div>The only time I ever saw anything executed by a child process was actual API requests (e.g. the create_port method).</div><div><div><br></div></div></div><div class="gmail_extra"><div><div class="h5"><br><div class="gmail_quote">On Thu, May 7, 2015 at 6:08 AM, Neil Jerram <span dir="ltr"><<a href="mailto:Neil.Jerram@metaswitch.com" target="_blank">Neil.Jerram@metaswitch.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Is there a design for how ML2 mechanism drivers are supposed to cope with the Neutron server forking?<br>
<br>
What I'm currently seeing, with api_workers = 2, is:<br>
<br>
- my mechanism driver gets instantiated and initialized, and immediately kicks off some processing that involves communicating over the network<br>
<br>
- the Neutron server process then forks into multiple copies<br>
<br>
- multiple copies of my driver's network processing then continue, and interfere badly with each other :-)<br>
<br>
I think what I should do is:<br>
<br>
- wait until any forking has happened<br>
<br>
- then decide (somehow) which mechanism driver is going to kick off that processing, and do that.<br>
<br>
But how can a mechanism driver know when the Neutron server forking has happened?<br>
<br>
Thanks,<br>
        Neil<br>
<br>
__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</blockquote></div><br><br clear="all"><div><br></div></div></div><span class="HOEnZb"><font color="#888888">-- <br><div><div>Kevin Benton</div></div>
</font></span></div>
<br>__________________________________________________________________________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" target="_blank">OpenStack-dev-request@lists.openstack.org?subject:unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br></div>