<div dir="ltr">Hi,<div><br></div><div style>It seems there could be a potential issue  in OVSNeutronAgent where <font face="courier new, monospace">self.enable_tunneling</font> is initialized.</div><div style>Here is the code:</div>
<div style><br></div><div style><pre><a class="" name="116" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#116">116</a><b>class</b> <a class="" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#OVSNeutronAgent">OVSNeutronAgent</a>(<a class="" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#sg_rpc">sg_rpc</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=SecurityGroupAgentRpcCallbackMixin">SecurityGroupAgentRpcCallbackMixin</a>,
<a class="" name="117" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#117">117</a>                      <a class="" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#l2population_rpc">l2population_rpc</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=L2populationRpcCallBackMixin">L2populationRpcCallBackMixin</a>):
<a class="" name="118" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#118">118</a>    <span class="">'''Implements OVS-based tunneling, VLANs and flat networks.</span></pre>
<pre><span class="">...</span></pre><pre><span class=""><pre><a class="" name="149" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#149">149</a>    <b>def</b> <a class="" name="__init__"></a><a href="http://www.xrefs.info/openstack-neutron-latest/s?refs=__init__" class="">__init__</a>(<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=self">self</a>, <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=integ_br">integ_br</a>, <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=tun_br">tun_br</a>, <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=local_ip">local_ip</a>,
<a class="" name="150" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#150">150</a>                 <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=bridge_mappings">bridge_mappings</a>, <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=root_helper">root_helper</a>,
<a class="" name="151" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#151">151</a>                 <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=polling_interval">polling_interval</a>, <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=tunnel_types">tunnel_types</a>=<b>None</b>,
<a class="" name="152" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#152">152</a>                 <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=veth_mtu">veth_mtu</a>=<b>None</b>, <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=l2_population">l2_population</a>=<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=False">False</a>,
<a class="" name="153" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#153">153</a>                 <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=minimize_polling">minimize_polling</a>=<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=False">False</a>,
<a class="" name="154" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#154">154</a>                 <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=ovsdb_monitor_respawn_interval">ovsdb_monitor_respawn_interval</a>=(
<a class="" name="155" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#155">155</a>                     <a class="" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#constants">constants</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=DEFAULT_OVSDBMON_RESPAWN">DEFAULT_OVSDBMON_RESPAWN</a>)):
<a class="" name="156" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#156">156</a>        <span class="">'''Constructor.
<a class="" name="157" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#157">157</a></span></pre><pre>...</pre><pre><a class="" name="193" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#193">193</a>
<a class="" name="194" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#194">194</a>        <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=self">self</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=int_br">int_br</a> = <a class="" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#ovs_lib">ovs_lib</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=OVSBridge">OVSBridge</a>(<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=integ_br">integ_br</a>, <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=self">self</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=root_helper">root_helper</a>)
<b><a class="" name="195" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#195">195</a>        <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=self">self</a>.<a class="" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#setup_rpc">setup_rpc</a>() <<<<==== Initialize the RPC</b>
<a class="" name="196" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#196">196</a>        <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=self">self</a>.<a class="" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#setup_integration_br">setup_integration_br</a>()</pre>
<pre>...</pre><pre><a class="" name="205" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#205">205</a>
<a class="" name="206" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#206">206</a>        <b>if</b> <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=tunnel_types">tunnel_types</a>:
<b><a class="" name="207" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#207">207</a>            <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=self">self</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=enable_tunneling">enable_tunneling</a> = <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=True">True</a>  <<<=== Initialize enable_tunneling
</b><a class="" name="208" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#208">208</a>        <b>else</b>:
<a class="" name="209" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#209">209</a>            <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=self">self</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=enable_tunneling">enable_tunneling</a> = <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=False">False</a></pre>
<pre>....</pre><pre style>And if tunnel update is received, self.enable_tunneling may not be initialized yet, and could cause attribute exception.</pre><pre style><pre><a class="" name="300" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#300">300</a>    <b>def</b> <a class="" name="tunnel_update"></a><a href="http://www.xrefs.info/openstack-neutron-latest/s?refs=tunnel_update" class="">tunnel_update</a>(<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=self">self</a>, <a class="" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#context">context</a>, **<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=kwargs">kwargs</a>):
<a class="" name="301" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#301">301</a>        <a class="" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#LOG">LOG</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=debug">debug</a>(_(<span class="">"tunnel_update received"</span>))
<b><a class="" name="302" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#302">302</a>        if not <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=self">self</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=enable_tunneling">enable_tunneling</a>:
<a class="" name="303" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#303">303</a>            return</b>
<a class="" name="304" href="http://www.xrefs.info/openstack-neutron-latest/xref/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#304">304</a>        <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=tunnel_ip">tunnel_ip</a> = <a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=kwargs">kwargs</a>.<a href="http://www.xrefs.info/openstack-neutron-latest/s?defs=get">get</a>(<span class="">'tunnel_ip'</span>)</pre>
</pre><pre><span style="font-family:arial;white-space:normal">Isn't it safer to call setup_rpc() after all initialization is done?</span></pre><pre style><span style="font-family:arial;white-space:normal">Thanks,</span></pre>
<pre style><span style="font-family:arial;white-space:normal">Nader.</span></pre><pre style><span style="font-family:arial;white-space:normal"><br></span></pre><pre style><br></pre><pre style><br></pre></span></pre></div>
</div>