[openstack-dev] [neutron] Mechanism drivers and Neutron server forking?
Russell Bryant
rbryant at redhat.com
Mon Jun 8 21:14:53 UTC 2015
Right, I think there are use cases for both. I don't think it's a huge
burden to have to know about it. I think it's actually quite important
to understand when the initialization happens.
--
Russell Bryant
On 06/08/2015 05:02 PM, Kevin Benton wrote:
> This depends on what initialize is supposed to be doing. If it's just a
> one-time sync with a back-end, then I think calling it once in each
> child process might not be what we want.
>
> I left a comment on Terry's patch. I think we should just use the
> callback manager to have a pre-fork and post-fork even to let
> drivers/plugins do whatever is appropriate for them.
>
> On Mon, Jun 8, 2015 at 1:00 PM, Robert Kukura <kukura at noironetworks.com
> <mailto:kukura at noironetworks.com>> wrote:
>
> From a driver's perspective, it would be simpler, and I think
> sufficient, to change ML2 to call initialize() on drivers after the
> forking, rather than requiring drivers to know about forking.
>
> -Bob
>
>
> On 6/8/15 2:59 PM, Armando M. wrote:
>> Interestingly, [1] was filed a few moments ago:
>>
>> [1] https://bugs.launchpad.net/neutron/+bug/1463129
>>
>> On 2 June 2015 at 22:48, Salvatore Orlando <sorlando at nicira.com
>> <mailto:sorlando at nicira.com>> wrote:
>>
>> I'm not sure if you can test this behaviour on your own
>> because it requires the VMware plugin and the eventlet
>> handling of backend response.
>>
>> But the issue was manifesting and had to be fixed with this
>> mega-hack [1]. The issue was not about several workers
>> executing the same code - the loopingcall was always started
>> on a single thread. The issue I witnessed was that the other
>> API workers just hang.
>>
>> There's probably something we need to understand about how
>> eventlet can work safely with a os.fork (I just think they're
>> not really made to work together!).
>> Regardless, I did not spent too much time on it, because I
>> thought that the multiple workers code might have been
>> rewritten anyway by the pecan switch activities you're doing.
>>
>> Salvatore
>>
>>
>> [1] https://review.openstack.org/#/c/180145/
>>
>> On 3 June 2015 at 02:20, Kevin Benton <blak111 at gmail.com
>> <mailto:blak111 at gmail.com>> wrote:
>>
>> Sorry about the long delay.
>>
>> >Even the LOG.error("KEVIN PID=%s network response: %s" %
>> (os.getpid(), r.text)) line? Surely the server would have
>> forked before that line was executed - so what could
>> prevent it from executing once in each forked process, and
>> hence generating multiple logs?
>>
>> Yes, just once. I wasn't able to reproduce the behavior
>> you ran into. Maybe eventlet has some protection for this?
>> Can you provide small sample code for the logging driver
>> that does reproduce the issue?
>>
>> On Wed, May 13, 2015 at 5:19 AM, Neil Jerram
>> <Neil.Jerram at metaswitch.com
>> <mailto:Neil.Jerram at metaswitch.com>> wrote:
>>
>> Hi Kevin,
>>
>> Thanks for your response...
>>
>> On 08/05/15 08:43, Kevin Benton wrote:
>>
>> 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?
>>
>>
>> https://github.com/Metaswitch/calico/tree/master/calico/openstack
>>
>> Basically, our driver's initialize method immediately
>> kicks off a green thread to audit what is now in the
>> Neutron DB, and to ensure that the other Calico
>> components are consistent with that.
>>
>> I modified the linuxbridge mech driver to try to
>> reproduce it:
>> http://paste.openstack.org/show/216859/
>>
>> In the output, I never received any of the init
>> code output I added more
>> than once, including the function spawned using
>> eventlet.
>>
>>
>> Interesting. Even the LOG.error("KEVIN PID=%s network
>> response: %s" % (os.getpid(), r.text)) line? Surely
>> the server would have forked before that line was
>> executed - so what could prevent it from executing
>> once in each forked process, and hence generating
>> multiple logs?
>>
>> Thanks,
>> Neil
>>
>> The only time I ever saw anything executed by a
>> child process was actual
>> API requests (e.g. the create_port method).
>>
>>
>>
>>
>> On Thu, May 7, 2015 at 6:08 AM, Neil Jerram
>> <Neil.Jerram at metaswitch.com
>> <mailto:Neil.Jerram at metaswitch.com>
>> <mailto:Neil.Jerram at metaswitch.com
>> <mailto:Neil.Jerram at metaswitch.com>>> wrote:
>>
>> Is there a design for how ML2 mechanism
>> drivers are supposed to cope
>> with the Neutron server forking?
>>
>> What I'm currently seeing, with api_workers =
>> 2, is:
>>
>> - my mechanism driver gets instantiated and
>> initialized, and
>> immediately kicks off some processing that
>> involves communicating
>> over the network
>>
>> - the Neutron server process then forks into
>> multiple copies
>>
>> - multiple copies of my driver's network
>> processing then continue,
>> and interfere badly with each other :-)
>>
>> I think what I should do is:
>>
>> - wait until any forking has happened
>>
>> - then decide (somehow) which mechanism driver
>> is going to kick off
>> that processing, and do that.
>>
>> But how can a mechanism driver know when the
>> Neutron server forking
>> has happened?
>>
>> Thanks,
>> Neil
>>
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for
>> usage questions)
>> Unsubscribe:
>>
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>>
>> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>>
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>>
>>
>> --
>> Kevin Benton
>>
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage
>> questions)
>> Unsubscribe:
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage
>> questions)
>> Unsubscribe:
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>>
>>
>> --
>> Kevin Benton
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe:
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe:
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>>
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe <mailto:OpenStack-dev-request at lists.openstack.org?subject:unsubscribe>
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe:
> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>
>
> --
> Kevin Benton
>
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
More information about the OpenStack-dev
mailing list