[openstack-dev] [neutron][FWaaS] __init__ arguments issue status

Doug Wiegley dougwig at parksidesoftware.com
Fri May 6 02:40:34 UTC 2016


This break is almost certainly because of the following neutron change, to unwind the incestuous inheritance that was in neutron (dependency arrow was circular):

https://review.openstack.org/#/c/223343/ <https://review.openstack.org/#/c/223343/>

I don’t expect there will be a lot of appetite to revert that, so it will need to be addressed in neutron-fwaas. Likely it should’ve had an ML warning first, sorry about that, this has been a longstanding issue.

doug



> On May 5, 2016, at 7:00 PM, Frances, Margaret <Margaret_Frances at cable.comcast.com> wrote:
> 
> Hi Doug.  
> 
> The old and new MROs are both pretty complicated, and it’s not entirely clear to me yet why the original one worked. (The MROs are included below for reading pleasure; they're embellished to show the incoming args to self’s init and outgoing args to super’s init in each case.)
> 
> I’m fairly sure the APIs for the mixins can be made the same, and I’ll try that.  But I still wonder if in fact the problem is a base class ordering issue.  
> 
> The error that 223343 produced occurs in method call #6 in the "AFTER" MRO, where we get the following trace:
> 
> 	super(PeriodicTasks, self).__init__()
> TypeError: __init__() takes exactly 2 arguments (1 given)
> 
> 
> For grins, we changed PeriodicTasks’s call to super init as suggested by the trace:
> 
> 	super(PeriodicTasks, self).__init__(conf)
> 
> 
> At this point FWaaSAgentRpcCallbackMixin (AFTER, #8) complained:
> 
> 	super(FWaaSAgentRpcCallbackMixin, self).__init__(host)
> TypeError: object.__init__() takes no parameters
> 
> 
> Changing *that* class as suggested elicited the following (to me baffling) result:
> 
> 	super(FWaaSAgentRpcCallbackMixin, self).__init__()
> TypeError: __init__() takes exactly 2 arguments (1 given)
> 
> 
> I find it baffling because FWaaSAgentRpcCallbackMixin is the end of the line, it’s a subclass of object, and object doesn’t allow arguments to init (so whose init is that? that’s the next thing I’m going to look at).  (It’s for these same reasons that I don’t understand why things worked before the 223343 change.)
> 
> I’m still looking at things.  (And learning about MRO, which I’ve never really dealt with before.)  Will run pdb and see what surfaces.  
> 
> Thanks for your help.  Thoughts, comments, suggestions all welcome.
> Margaret
> 
> 
> BEFORE 223343
>  1. varmour_router_vArmourL3NATAgent 		(host, conf)-->(host, conf)
>  2. agent_L3NATAgent 				(host, conf)-->(conf)
>  3. firewall_l3_agent_FWaaSL3AgentRpcCallback 	(conf)-->(host)
>  4. api_FWaaSAgentRpcCallbackMixin 		(host)-->(host)
>  5. ha_AgentMixin				(host)-->(host)
>  6. dvr_AgentMixin				(host)-->(host)
>  7. manager_Manager				(host)-->(conf)
>  8. periodic_task_PeriodicTasks			(conf)-->()
>  9. firewall_l3_agent_FWaaSL3AgentRpcCallback	(conf)-->(host)
> 10. api_FWaaSAgentRpcCallbackMixin		(host)-->(host)
> 11. object
> 
> AFTER 223343
>  1. varmour_router_vArmourL3NATAgent 		(host, conf)-->(host, conf)
>  2. agent_L3NATAgent 				(host, conf)-->(host)
>  3. ha_AgentMixin				(host)-->(host)
>  4. dvr_AgentMixin				(host)-->(host)
>  5. manager_Manager				(host)-->(conf)
>  6. periodic_task_PeriodicTasks			(conf)-->()
>  7. firewall_l3_agent_FWaaSL3AgentRpcCallback 	(conf)-->(host)
>  8. api_FWaaSAgentRpcCallbackMixin		(host)-->(host)
>  9. object
> 
> --
> Margaret Frances
> Eng 4, Prodt Dev Engineering
> 
> 
> 
>> On May 5, 2016, at 7:06 PM, Doug Hellmann <doug at doughellmann.com <mailto:doug at doughellmann.com>> wrote:
>> 
>> Excerpts from Nate Johnston's message of 2016-05-05 17:40:13 -0400:
>>> FWaaS team,
>>> 
>>> After a day of looking at the tests currently failing in the FWaaS repo, I
>>> believe I have the issue narrowed down considerably. First, to restate what
>>> is going on.  If you check out the neutron-fwaas repository and run `tox -e
>>> py27` in it, you will get six errors all in the
>>> neutron_fwaas.tests.unit.services.firewall.agents.varmour.test_varmour_router.TestVarmourRouter
>>> section.
>>> Running the py34 tests results in similar problems.  The failures follow
>>> the following form:
>>> 
>>> Captured traceback:
>>> 
>>> ~~~~~~~~~~~~~~~~~~~
>>> 
>>>    Traceback (most recent call last):
>>> 
>>>      File
>>> "neutron_fwaas/tests/unit/services/firewall/agents/varmour/test_varmour_router.py",
>>> line 190, in test_agent_external_gateway
>>> 
>>>        router = self._create_router()
>>> 
>>>      File
>>> "neutron_fwaas/tests/unit/services/firewall/agents/varmour/test_varmour_router.py",
>>> line 87, in _create_router
>>> 
>>>        router = varmour_router.vArmourL3NATAgent(HOSTNAME, self.conf)
>>> 
>>>      File
>>> "neutron_fwaas/services/firewall/agents/varmour/varmour_router.py", line
>>> 54, in __init__
>>> 
>>>        super(vArmourL3NATAgent, self).__init__(host, conf)
>>> 
>>>      File "/home/njohns002/
>>> github.com/openstack/neutron-fwaas-311159/.tox/py27/src/neutron/neutron/agent/l3/agent.py <http://github.com/openstack/neutron-fwaas-311159/.tox/py27/src/neutron/neutron/agent/l3/agent.py>",
>>> line 244, in __init__
>>> 
>>>        super(L3NATAgent, self).__init__(host=self.conf.host)
>>> 
>>>      File "/home/njohns002/
>>> github.com/openstack/neutron-fwaas-311159/.tox/py27/src/neutron/neutron/agent/l3/ha.py <http://github.com/openstack/neutron-fwaas-311159/.tox/py27/src/neutron/neutron/agent/l3/ha.py>",
>>> line 93, in __init__
>>> 
>>>        super(AgentMixin, self).__init__(host)
>>> 
>>>      File "/home/njohns002/
>>> github.com/openstack/neutron-fwaas-311159/.tox/py27/src/neutron/neutron/agent/l3/dvr.py <http://github.com/openstack/neutron-fwaas-311159/.tox/py27/src/neutron/neutron/agent/l3/dvr.py>",
>>> line 30, in __init__
>>> 
>>>        super(AgentMixin, self).__init__(host)
>>> 
>>>      File "/home/njohns002/
>>> github.com/openstack/neutron-fwaas-311159/.tox/py27/src/neutron/neutron/agent/l3/agent.py <http://github.com/openstack/neutron-fwaas-311159/.tox/py27/src/neutron/neutron/agent/l3/agent.py>",
>>> line 70, in __init__
>>> 
>>>        super(FWaaSAgentRpcCallbackMixin, self).__init__(host)
>>> 
>>>      File "/home/njohns002/
>>> github.com/openstack/neutron-fwaas-311159/.tox/py27/src/neutron/neutron/manager.py <http://github.com/openstack/neutron-fwaas-311159/.tox/py27/src/neutron/neutron/manager.py>",
>>> line 44, in __init__
>>> 
>>>        super(Manager, self).__init__(conf)
>>> 
>>>      File "/home/njohns002/
>>> github.com/openstack/neutron-fwaas-311159/.tox/py27/lib/python2.7/site-packages/oslo_service/periodic_task.py <http://github.com/openstack/neutron-fwaas-311159/.tox/py27/lib/python2.7/site-packages/oslo_service/periodic_task.py>",
>>> line 177, in __init__
>>> 
>>>        super(PeriodicTasks, self).__init__()
>>> 
>>>    TypeError: __init__() takes exactly 2 arguments (1 given)
>>> 
>>> I pinged the Oslo folks, and they were able to help me look into the issue,
>>> which cleared oslo.service of any role.  The change that introduced this is
>>> actually a neutron change - https://review.openstack.org/#/c/223343/ <https://review.openstack.org/#/c/223343/> - and
>>> I could experimentally test for it by doing the following, which checks out
>>> the change before the problem one, "Remove BGP code from neutron".  At that
>>> point `tox -e py27` could complete successfully.
>>> 
>>> Everything works with the older commit:   cd .tox/py27/src/neutron && git
>>> checkout fe702f8f2af265554c7ff6f464b99562f8c54254 && cd - && tox -e py27
>>> Things break with commit 223343:          cd .tox/py27/src/neutron && git
>>> checkout f31861843d90e013d31fb76fc576b49a35e218aa4  && cd - && tox -e py27
>>> 
>>> My guess on this is that the reason for the breakage is due to multiple
>>> inheritance and the changing of the ancestry for the L3NATAgent object.  So
>>> the focus of my effort (with Margaret Frances providing crucial insight) is
>>> determining what precisely needs to be fixed or reverted to make this work,
>>> while in keeping with the removal of FWaaS code from Neutron.  I shall
>>> continue to look at this tomorrow, but if anyone wishes to pick up the
>>> torch and figure this out then you should feel free to do so.  If not, I
>>> shall resume tomorrow.
>>> 
>>> Thanks,
>>> 
>>> --N.
>> 
>> Based on looking at the class hierarchy for vArmourL3NATAgent, I think
>> the problem is that the mixin classes up and down that hierarchy don't
>> take the same arguments for __init__(). That's going to make using super()
>> difficult. Normally one would just need to switch the order of the base
>> classes so all of the mixins are initialized before the Manager and
>> PeriodicTask base classes, but doing that doesn't fix the problem in
>> this case.
>> 
>> Is it possible to make all of the mixin APIs the same?
>> 
>> Doug
>> 
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: OpenStack-dev-request at lists.openstack.org <mailto:OpenStack-dev-request at lists.openstack.org>?subject:unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev <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://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20160505/439d0c8b/attachment.html>


More information about the OpenStack-dev mailing list