[openstack-dev] [neutron][ovs-neutron-agent] Issue with initializing enable_tunneling after setup_rpc()

Nader Lahouti nader.lahouti at gmail.com
Sat Apr 19 02:28:11 UTC 2014


Hi,

It seems there could be a potential issue  in OVSNeutronAgent where
self.enable_tunneling is initialized.
Here is the code:

116 <http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#116>*class*
OVSNeutronAgent
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#OVSNeutronAgent>(sg_rpc
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#sg_rpc>.SecurityGroupAgentRpcCallbackMixin
<http://www.xrefs.info/openstack-neutron-latest/s?defs=SecurityGroupAgentRpcCallbackMixin>,117
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#117>
                     l2population_rpc
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#l2population_rpc>.L2populationRpcCallBackMixin
<http://www.xrefs.info/openstack-neutron-latest/s?defs=L2populationRpcCallBackMixin>):118
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#118>
   '''Implements OVS-based tunneling, VLANs and flat networks.

...

149 <http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#149>
   *def* __init__
<http://www.xrefs.info/openstack-neutron-latest/s?refs=__init__>(self
<http://www.xrefs.info/openstack-neutron-latest/s?defs=self>, integ_br
<http://www.xrefs.info/openstack-neutron-latest/s?defs=integ_br>,
tun_br <http://www.xrefs.info/openstack-neutron-latest/s?defs=tun_br>,
local_ip <http://www.xrefs.info/openstack-neutron-latest/s?defs=local_ip>,150
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#150>
                bridge_mappings
<http://www.xrefs.info/openstack-neutron-latest/s?defs=bridge_mappings>,
root_helper <http://www.xrefs.info/openstack-neutron-latest/s?defs=root_helper>,151
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#151>
                polling_interval
<http://www.xrefs.info/openstack-neutron-latest/s?defs=polling_interval>,
tunnel_types <http://www.xrefs.info/openstack-neutron-latest/s?defs=tunnel_types>=*None*,152
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#152>
                veth_mtu
<http://www.xrefs.info/openstack-neutron-latest/s?defs=veth_mtu>=*None*,
l2_population <http://www.xrefs.info/openstack-neutron-latest/s?defs=l2_population>=False
<http://www.xrefs.info/openstack-neutron-latest/s?defs=False>,153
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#153>
                minimize_polling
<http://www.xrefs.info/openstack-neutron-latest/s?defs=minimize_polling>=False
<http://www.xrefs.info/openstack-neutron-latest/s?defs=False>,154
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#154>
                ovsdb_monitor_respawn_interval
<http://www.xrefs.info/openstack-neutron-latest/s?defs=ovsdb_monitor_respawn_interval>=(155
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#155>
                    constants
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#constants>.DEFAULT_OVSDBMON_RESPAWN
<http://www.xrefs.info/openstack-neutron-latest/s?defs=DEFAULT_OVSDBMON_RESPAWN>)):156
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#156>
       '''Constructor.157
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#157>

...

193 <http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#193>194
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#194>
       self <http://www.xrefs.info/openstack-neutron-latest/s?defs=self>.int_br
<http://www.xrefs.info/openstack-neutron-latest/s?defs=int_br> =
ovs_lib <http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#ovs_lib>.OVSBridge
<http://www.xrefs.info/openstack-neutron-latest/s?defs=OVSBridge>(integ_br
<http://www.xrefs.info/openstack-neutron-latest/s?defs=integ_br>, self
<http://www.xrefs.info/openstack-neutron-latest/s?defs=self>.root_helper
<http://www.xrefs.info/openstack-neutron-latest/s?defs=root_helper>)*195
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#195>
       self <http://www.xrefs.info/openstack-neutron-latest/s?defs=self>.setup_rpc
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#setup_rpc>()
<<<<==== Initialize the RPC*196
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#196>
       self <http://www.xrefs.info/openstack-neutron-latest/s?defs=self>.setup_integration_br
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#setup_integration_br>()

...

205 <http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#205>206
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#206>
       *if* tunnel_types
<http://www.xrefs.info/openstack-neutron-latest/s?defs=tunnel_types>:*207
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#207>
           self
<http://www.xrefs.info/openstack-neutron-latest/s?defs=self>.enable_tunneling
<http://www.xrefs.info/openstack-neutron-latest/s?defs=enable_tunneling>
= True <http://www.xrefs.info/openstack-neutron-latest/s?defs=True>
<<<=== Initialize enable_tunneling
*208 <http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#208>
       *else*:209
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#209>
           self
<http://www.xrefs.info/openstack-neutron-latest/s?defs=self>.enable_tunneling
<http://www.xrefs.info/openstack-neutron-latest/s?defs=enable_tunneling>
= False <http://www.xrefs.info/openstack-neutron-latest/s?defs=False>

....

And if tunnel update is received, self.enable_tunneling may not be
initialized yet, and could cause attribute exception.

300 <http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#300>
   *def* tunnel_update
<http://www.xrefs.info/openstack-neutron-latest/s?refs=tunnel_update>(self
<http://www.xrefs.info/openstack-neutron-latest/s?defs=self>, context
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#context>,
**kwargs <http://www.xrefs.info/openstack-neutron-latest/s?defs=kwargs>):301
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#301>
       LOG <http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#LOG>.debug
<http://www.xrefs.info/openstack-neutron-latest/s?defs=debug>(_("tunnel_update
received"))*302
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#302>
       if not self
<http://www.xrefs.info/openstack-neutron-latest/s?defs=self>.enable_tunneling
<http://www.xrefs.info/openstack-neutron-latest/s?defs=enable_tunneling>:
303 <http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#303>
           return*304
<http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#304>
       tunnel_ip
<http://www.xrefs.info/openstack-neutron-latest/s?defs=tunnel_ip> =
kwargs <http://www.xrefs.info/openstack-neutron-latest/s?defs=kwargs>.get
<http://www.xrefs.info/openstack-neutron-latest/s?defs=get>('tunnel_ip')

Isn't it safer to call setup_rpc() after all initialization is done?

Thanks,

Nader.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20140418/32df5fc3/attachment.html>


More information about the OpenStack-dev mailing list