Public bug reported:

I tried to execute following config/procedure, as a result,
OVSFWPortNotFound occurred when deleting VM instance.  It affects l2
agent extension behavior.

[Conditions]
  * master branch of devstack and neutron
  * /etc/neutron/plugins/ml2/ml2_conf.ini
    mechanism_drivers = openvswtich,linuxbridge
    ...
    [security_groups]
    firewall_driver = openvswitch

[How to reproduce]
1. source ~/devstack/openrc demo demo
2. openstack server create --flavor c1 --image cirros-0.3.5-x86_64-disk --nic 
net-id='3793bece-1cc0-457c-a90f-6cc64a96831c' test
3. openstack server create --flavor c1 --image cirros-0.3.5-x86_64-disk --nic 
net-id='3793bece-1cc0-457c-a90f-6cc64a96831c' test2
4. openstack server delete test

[/opt/stack/logs/q-agt.log]
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent Traceback (most 
recent call last):
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py",
 line 2048, in rpc_loop
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     port_info, 
ovs_restarted)
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/usr/local/lib/python2.7/dist-packages/osprofiler/profiler.py", line 153, in 
wrapper
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     return 
f(*args, **kwargs)
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py",
 line 1650, in process_network_ports
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
port_info.get('updated', set()))
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/securitygroups_rpc.py", line 278, in 
setup_port_filters
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
self.refresh_firewall(updated_devices)
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/securitygroups_rpc.py", line 111, in 
decorated_function
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     *args, 
**kwargs)
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/securitygroups_rpc.py", line 231, in 
refresh_firewall
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
self._apply_port_filter(device_ids, update_filter=True)
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/securitygroups_rpc.py", line 146, in 
_apply_port_filter
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
self.firewall.process_trusted_ports(trusted_devices)
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/linux/openvswitch_firewall/firewall.py", line 
533, in process_trusted_ports
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
self._initialize_egress_no_port_security(port_id)
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/linux/openvswitch_firewall/firewall.py", line 
607, in _initialize_egress_no_port_security
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     ovs_port = 
self.get_ovs_port(port_id)
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/linux/openvswitch_firewall/firewall.py", line 
414, in get_ovs_port
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     raise 
exceptions.OVSFWPortNotFound(port_id=port_id)
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent 
OVSFWPortNotFound: Port fe6e71be-a506-4e1e-a832-e9c62356134a is not managed by 
this agent.
neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent

[Affection to l2 agent extension behavior]

* Usual
  delete_port() used to be called twice [1] and [2]

* Raised OVSFWPortNotFound
  delete_port() is called only once from [1].
  delete_port() from [2] isn't called because self.process_deleted_ports()[3] 
isn't called due to
  this exception before called this method.


[1] 
https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L1586
[2] 
https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L436
[3] 
https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L2031

** Affects: neutron
     Importance: Undecided
         Status: New


** Tags: ovs-fw

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

Title:
  OVS driver - OVSFWPortNotFound when deleting VM port affects agent
  extension framework

Status in neutron:
  New

Bug description:
  I tried to execute following config/procedure, as a result,
  OVSFWPortNotFound occurred when deleting VM instance.  It affects l2
  agent extension behavior.

  [Conditions]
    * master branch of devstack and neutron
    * /etc/neutron/plugins/ml2/ml2_conf.ini
      mechanism_drivers = openvswtich,linuxbridge
      ...
      [security_groups]
      firewall_driver = openvswitch

  [How to reproduce]
  1. source ~/devstack/openrc demo demo
  2. openstack server create --flavor c1 --image cirros-0.3.5-x86_64-disk --nic 
net-id='3793bece-1cc0-457c-a90f-6cc64a96831c' test
  3. openstack server create --flavor c1 --image cirros-0.3.5-x86_64-disk --nic 
net-id='3793bece-1cc0-457c-a90f-6cc64a96831c' test2
  4. openstack server delete test

  [/opt/stack/logs/q-agt.log]
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent Traceback 
(most recent call last):
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py",
 line 2048, in rpc_loop
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
port_info, ovs_restarted)
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/usr/local/lib/python2.7/dist-packages/osprofiler/profiler.py", line 153, in 
wrapper
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     return 
f(*args, **kwargs)
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py",
 line 1650, in process_network_ports
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
port_info.get('updated', set()))
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/securitygroups_rpc.py", line 278, in 
setup_port_filters
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
self.refresh_firewall(updated_devices)
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/securitygroups_rpc.py", line 111, in 
decorated_function
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     *args, 
**kwargs)
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/securitygroups_rpc.py", line 231, in 
refresh_firewall
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
self._apply_port_filter(device_ids, update_filter=True)
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/securitygroups_rpc.py", line 146, in 
_apply_port_filter
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
self.firewall.process_trusted_ports(trusted_devices)
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/linux/openvswitch_firewall/firewall.py", line 
533, in process_trusted_ports
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     
self._initialize_egress_no_port_security(port_id)
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/linux/openvswitch_firewall/firewall.py", line 
607, in _initialize_egress_no_port_security
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     ovs_port 
= self.get_ovs_port(port_id)
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent   File 
"/opt/stack/neutron/neutron/agent/linux/openvswitch_firewall/firewall.py", line 
414, in get_ovs_port
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent     raise 
exceptions.OVSFWPortNotFound(port_id=port_id)
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent 
OVSFWPortNotFound: Port fe6e71be-a506-4e1e-a832-e9c62356134a is not managed by 
this agent.
  neutron.plugins.ml2.drivers.openvswitch.agent.ovs_neutron_agent

  [Affection to l2 agent extension behavior]

  * Usual
    delete_port() used to be called twice [1] and [2]

  * Raised OVSFWPortNotFound
    delete_port() is called only once from [1].
    delete_port() from [2] isn't called because self.process_deleted_ports()[3] 
isn't called due to
    this exception before called this method.

  
  [1] 
https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L1586
  [2] 
https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L436
  [3] 
https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py#L2031

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1707913/+subscriptions

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to