← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1707913] [NEW] OVS driver - OVSFWPortNotFound when deleting VM port affects agent extension framework

 

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