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.
_______________________________________________ OpenStack-dev mailing list OpenStack-dev@lists.openstack.org http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev