Public bug reported: I keep seeing these two tests fail:
http://logs.openstack.org/05/606205/2/check/neutron- functional/66c9475/logs/testr_results.html.gz Example stack trace: Traceback (most recent call last): File "neutron/tests/base.py", line 137, in func return f(self, *args, **kwargs) File "neutron/tests/functional/agent/l3/test_legacy_router.py", line 85, in test_legacy_router_lifecycle self._router_lifecycle(enable_ha=False, dual_stack=True) File "neutron/tests/functional/agent/l3/framework.py", line 302, in _router_lifecycle self._assert_onlink_subnet_routes(router, ip_versions) File "neutron/tests/functional/agent/l3/framework.py", line 526, in _assert_onlink_subnet_routes namespace=ns_name) File "neutron/agent/linux/ip_lib.py", line 1030, in get_routing_table return list(privileged.get_routing_table(ip_version, namespace)) File "/opt/stack/new/neutron/.tox/dsvm-functional/local/lib/python2.7/site-packages/oslo_privsep/priv_context.py", line 207, in _wrap return self.channel.remote_call(name, args, kwargs) File "/opt/stack/new/neutron/.tox/dsvm-functional/local/lib/python2.7/site-packages/oslo_privsep/daemon.py", line 202, in remote_call raise exc_type(*result[2]) KeyError I think the problem is that in the privsep get_routing_table code, one of the IPv6 routes does not have an integer in the route['oif'] element, it is None, raising the KeyError. For example, here is a list of IPv6 routes on my local system: --> ip -6 r 2601:18f:700:c12d::/64 dev enp0s31f6 proto ra metric 100 pref medium fe80::/64 dev enp0s31f6 proto kernel metric 256 pref medium fe80::/64 dev tun0 proto kernel metric 256 pref medium default via fe80::9ade:d0ff:fe25:7710 dev enp0s31f6 proto static metric 100 pref medium But a little test program I wrote shows iproute2 returns no 'oif': dst: fe80::/64 gateway: None oif: None Traceback (most recent call last): File "<stdin>", line 1, in <module> File "./getroute.py", line 78, in foo routes = list(get_routing_table(6)) File "./getroute.py", line 50, in get_routing_table print 'interface: %s' % ipdb_interfaces[route['oif']]['ifname'] KeyError: None Digging further, since there are two routes to fe80::/64, it's returned differently from pyroute2: {'metrics': {}, 'dst_len': 64, 'family': 10, 'proto': 2, 'tos': 0, 'dst': 'fe80::/64', 'pref': '00', 'ipdb_priority': 0, 'priority': 256, 'flags': 0, 'encap': {}, 'src_len': 0, 'table': 254, 'multipath': ({'oif': 2, 'family': 10}, {'oif': 6, 'dst_len': 64, 'family': 10, 'proto': 2, 'tos': 0, 'pref': '00', 'priority': 256, 'flags': 0, 'encap': {}, 'src_len': 0, 'table': 254, 'type': 1, 'scope': 0}), 'type': 1, 'scope': 0, 'ipdb_scope': 'system'} So it looks like we need to parse this 'multipath' element, but there are two items in the list, so we have to parse them both. ** Affects: neutron Importance: High Assignee: Brian Haley (brian-haley) Status: New -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to neutron. https://bugs.launchpad.net/bugs/1795548 Title: neutron.tests.functional.agent.l3.test_legacy_router.L3AgentTestCase.test_legacy_router_lifecycle* fail Status in neutron: New Bug description: I keep seeing these two tests fail: http://logs.openstack.org/05/606205/2/check/neutron- functional/66c9475/logs/testr_results.html.gz Example stack trace: Traceback (most recent call last): File "neutron/tests/base.py", line 137, in func return f(self, *args, **kwargs) File "neutron/tests/functional/agent/l3/test_legacy_router.py", line 85, in test_legacy_router_lifecycle self._router_lifecycle(enable_ha=False, dual_stack=True) File "neutron/tests/functional/agent/l3/framework.py", line 302, in _router_lifecycle self._assert_onlink_subnet_routes(router, ip_versions) File "neutron/tests/functional/agent/l3/framework.py", line 526, in _assert_onlink_subnet_routes namespace=ns_name) File "neutron/agent/linux/ip_lib.py", line 1030, in get_routing_table return list(privileged.get_routing_table(ip_version, namespace)) File "/opt/stack/new/neutron/.tox/dsvm-functional/local/lib/python2.7/site-packages/oslo_privsep/priv_context.py", line 207, in _wrap return self.channel.remote_call(name, args, kwargs) File "/opt/stack/new/neutron/.tox/dsvm-functional/local/lib/python2.7/site-packages/oslo_privsep/daemon.py", line 202, in remote_call raise exc_type(*result[2]) KeyError I think the problem is that in the privsep get_routing_table code, one of the IPv6 routes does not have an integer in the route['oif'] element, it is None, raising the KeyError. For example, here is a list of IPv6 routes on my local system: --> ip -6 r 2601:18f:700:c12d::/64 dev enp0s31f6 proto ra metric 100 pref medium fe80::/64 dev enp0s31f6 proto kernel metric 256 pref medium fe80::/64 dev tun0 proto kernel metric 256 pref medium default via fe80::9ade:d0ff:fe25:7710 dev enp0s31f6 proto static metric 100 pref medium But a little test program I wrote shows iproute2 returns no 'oif': dst: fe80::/64 gateway: None oif: None Traceback (most recent call last): File "<stdin>", line 1, in <module> File "./getroute.py", line 78, in foo routes = list(get_routing_table(6)) File "./getroute.py", line 50, in get_routing_table print 'interface: %s' % ipdb_interfaces[route['oif']]['ifname'] KeyError: None Digging further, since there are two routes to fe80::/64, it's returned differently from pyroute2: {'metrics': {}, 'dst_len': 64, 'family': 10, 'proto': 2, 'tos': 0, 'dst': 'fe80::/64', 'pref': '00', 'ipdb_priority': 0, 'priority': 256, 'flags': 0, 'encap': {}, 'src_len': 0, 'table': 254, 'multipath': ({'oif': 2, 'family': 10}, {'oif': 6, 'dst_len': 64, 'family': 10, 'proto': 2, 'tos': 0, 'pref': '00', 'priority': 256, 'flags': 0, 'encap': {}, 'src_len': 0, 'table': 254, 'type': 1, 'scope': 0}), 'type': 1, 'scope': 0, 'ipdb_scope': 'system'} So it looks like we need to parse this 'multipath' element, but there are two items in the list, so we have to parse them both. To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/1795548/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : [email protected] Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp

