← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1795548] [NEW] neutron.tests.functional.agent.l3.test_legacy_router.L3AgentTestCase.test_legacy_router_lifecycle* fail

 

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


Follow ups