Reviewed:  https://review.opendev.org/747922
Committed: 
https://git.openstack.org/cgit/openstack/neutron/commit/?id=489e0ead7297e3b17ca2bf8c4bea9701ad14a939
Submitter: Zuul
Branch:    master

commit 489e0ead7297e3b17ca2bf8c4bea9701ad14a939
Author: Slawek Kaplonski <[email protected]>
Date:   Tue Aug 25 14:44:26 2020 +0200

    Fix migration from the HA to non-HA routers
    
    In case if during switching HA router to be down, there will be any
    failure, router_info will be stored in L3 agent's cache as HaRouter.
    In case when next update on the router is migration to non-HA router
    this is wrong class and it causes other issues, e.g. with
    remove_vip_by_ip_address() which is correct only for HA routers.
    
    This patch fixes that issue by adding check of the router's ha and
    distributed flags and update local cache with new router_info class
    in case if at least one of those flags don't match.
    
    Change-Id: Ib0d3a501f88c149baea7d715c7cfe5811bc85e4f
    Closes-Bug: #1892846


** Changed in: neutron
       Status: In Progress => Fix Released

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1892846

Title:
  AttributeError in l3-agent changing HA router to non-HA

Status in neutron:
  Fix Released

Bug description:
  In case when router is migrated from HA to non-HA one, it has to be disabled 
and then migrated.
  If that is done fast enough, and some error will occur in router_remove 
method 
(https://github.com/openstack/neutron/blob/master/neutron/agent/l3/agent.py#L547)
 old router_info will be added to the self.router_info dict.
  In such case it will be still HA router added to self.router_info but as this 
router is already switched to be non-HA, it will use wrong RouterInfo class and 
errors like:

  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info [-] 
'NoneType' object has no attribute 'remove_vip_by_ip_address': AttributeError: 
'NoneType' object has no attribute 'remove_vip_by_ip_address'
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info Traceback 
(most recent call last):
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info   File 
"/usr/lib/python3.6/site-packages/neutron/common/utils.py", line 158, in call
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info     return 
func(*args, **kwargs)
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/router_info.py", line 1186, 
in process
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info     
self._process_internal_ports()
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/router_info.py", line 594, 
in _process_internal_ports
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info     
self.internal_network_added(p)
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/ha_router.py", line 356, in 
internal_network_added
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info     port, 
self.get_internal_device_name, router.INTERNAL_DEV_PREFIX)
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/ha_router.py", line 351, in 
_plug_ha_router_port
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info     
self._disable_ipv6_addressing_on_interface(interface_name)
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/ha_router.py", line 312, in 
_disable_ipv6_addressing_on_interface
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info     
self._remove_vip(ipv6_lladdr)
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/ha_router.py", line 236, in 
_remove_vip
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info     
instance.remove_vip_by_ip_address(ip_cidr)
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info 
AttributeError: 'NoneType' object has no attribute 'remove_vip_by_ip_address'
  2020-08-05 10:17:11.323 142395 ERROR neutron.agent.l3.router_info
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent [-] Failed to 
process compatible router: 8a8e034d-0c53-4d06-a936-9bb53b064f02: 
AttributeError: 'NoneType' object has no attribute 'remove_vip_by_ip_address'
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent Traceback (most 
recent call last):
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/agent.py", line 694, in 
_process_routers_if_compatible
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     
self._process_router_if_compatible(router)
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/agent.py", line 540, in 
_process_router_if_compatible
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     
self._process_updated_router(router)
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/agent.py", line 581, in 
_process_updated_router
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     ri.process()
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/ha_router.py", line 485, in 
process
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     
super(HaRouter, self).process()
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/common/utils.py", line 161, in call
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     self.logger(e)
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/oslo_utils/excutils.py", line 220, in __exit__
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     
self.force_reraise()
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/oslo_utils/excutils.py", line 196, in 
force_reraise
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     
six.reraise(self.type_, self.value, self.tb)
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/six.py", line 675, in reraise
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     raise value
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/common/utils.py", line 158, in call
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     return 
func(*args, **kwargs)
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/router_info.py", line 1186, 
in process
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     
self._process_internal_ports()
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/router_info.py", line 594, 
in _process_internal_ports
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     
self.internal_network_added(p)
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/ha_router.py", line 356, in 
internal_network_added
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     port, 
self.get_internal_device_name, router.INTERNAL_DEV_PREFIX)
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/ha_router.py", line 351, in 
_plug_ha_router_port
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     
self._disable_ipv6_addressing_on_interface(interface_name)
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/ha_router.py", line 312, in 
_disable_ipv6_addressing_on_interface
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     
self._remove_vip(ipv6_lladdr)
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent   File 
"/usr/lib/python3.6/site-packages/neutron/agent/l3/ha_router.py", line 236, in 
_remove_vip
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent     
instance.remove_vip_by_ip_address(ip_cidr)
  2020-08-05 10:17:11.324 142395 ERROR neutron.agent.l3.agent AttributeError: 
'NoneType' object has no attribute 'remove_vip_by_ip_address'

  will occur in L3 agent.

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1892846/+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

Reply via email to