← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1458709] [NEW] ovs agent can't startup in some abnormal condition

 

Public bug reported:

when ovs agent restart, it will restore the local vlan map in function
'_restore_local_vlan_map',

    def _restore_local_vlan_map(self):
        cur_ports = self.int_br.get_vif_ports()
        for port in cur_ports:
            local_vlan_map = self.int_br.db_get_val("Port", port.port_name,
                                                    "other_config")
            local_vlan = self.int_br.db_get_val("Port", port.port_name, "tag")
            net_uuid = local_vlan_map.get('net_uuid')
            if (net_uuid and net_uuid not in self.local_vlan_map
                and local_vlan != DEAD_VLAN_TAG):
                self.provision_local_vlan(local_vlan_map['net_uuid'],
                             local_vlan_map['network_type'],
                           local_vlan_map['physical_network'],
                           local_vlan_map['segmentation_id'],
                               local_vlan)

in some abnormal condition, if a device does not be set tag in ovsdb,
the 'self.int_br.db_get_val("Port", port.port_name, "tag")' will return
a empty list, so in function 'provision_local_vlan' will raise
exception:

    def provision_local_vlan(self, net_uuid, network_type, physical_network,
                             segmentation_id,local_vlan=None:
        lvm = self.local_vlan_map.get(net_uuid)
        if lvm:
            lvid = lvm.vlan
        else:
            if local_vlan in self.available_local_vlans:
                lvid = local_vlan
                self.available_local_vlans.remove(local_vlan)

this line will raise exception 'if local_vlan in
self.available_local_vlans'

** Affects: neutron
     Importance: Undecided
     Assignee: shihanzhang (shihanzhang)
         Status: New

** Description changed:

  when ovs agent restart, it will restore the local vlan map in function
  '_restore_local_vlan_map',
  
-     def _restore_local_vlan_map(self):
-         cur_ports = self.int_br.get_vif_ports()
-         for port in cur_ports:
-             local_vlan_map = self.int_br.db_get_val("Port", port.port_name,
-                                                     "other_config")
-             local_vlan = self.int_br.db_get_val("Port", port.port_name, "tag")
-             net_uuid = local_vlan_map.get('net_uuid')
-             if (net_uuid and net_uuid not in self.local_vlan_map
-                 and local_vlan != DEAD_VLAN_TAG):
-                 self.provision_local_vlan(local_vlan_map['net_uuid'],
-                                           local_vlan_map['network_type'],
-                                           local_vlan_map['physical_network'],
-                                           local_vlan_map['segmentation_id'],
-                                           local_vlan)
- in some abnormal condition, if a device does not be set tag in ovsdb, the 'self.int_br.db_get_val("Port", port.port_name, "tag")' will return a empty list, so in function 'provision_local_vlan' will raise exception:
+     def _restore_local_vlan_map(self):
+         cur_ports = self.int_br.get_vif_ports()
+         for port in cur_ports:
+             local_vlan_map = self.int_br.db_get_val("Port", port.port_name,
+                                                     "other_config")
+             local_vlan = self.int_br.db_get_val("Port", port.port_name, "tag")
+             net_uuid = local_vlan_map.get('net_uuid')
+             if (net_uuid and net_uuid not in self.local_vlan_map
+                 and local_vlan != DEAD_VLAN_TAG):
+                 self.provision_local_vlan(local_vlan_map['net_uuid'],
+                              local_vlan_map['network_type'],
+                            local_vlan_map['physical_network'],
+                            local_vlan_map['segmentation_id'],
+                                local_vlan)
  
-     def provision_local_vlan(self, net_uuid, network_type, physical_network,
-                              segmentation_id, local_vlan=None):
-         lvm = self.local_vlan_map.get(net_uuid)
-         if lvm:
-             lvid = lvm.vlan
-         else:
-             if local_vlan in self.available_local_vlans:
-                 lvid = local_vlan
-                 self.available_local_vlans.remove(local_vlan)
- this line will raise exception 'if local_vlan in self.available_local_vlans'
+ in some abnormal condition, if a device does not be set tag in ovsdb,
+ the 'self.int_br.db_get_val("Port", port.port_name, "tag")' will return
+ a empty list, so in function 'provision_local_vlan' will raise
+ exception:
+ 
+     def provision_local_vlan(self, net_uuid, network_type, physical_network,
+                              segmentation_id,local_vlan=None:
+         lvm = self.local_vlan_map.get(net_uuid)
+         if lvm:
+             lvid = lvm.vlan
+         else:
+             if local_vlan in self.available_local_vlans:
+                 lvid = local_vlan
+                 self.available_local_vlans.remove(local_vlan)
+ 
+ this line will raise exception 'if local_vlan in
+ self.available_local_vlans'

** Changed in: neutron
     Assignee: (unassigned) => shihanzhang (shihanzhang)

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

Title:
  ovs agent can't startup in some abnormal condition

Status in OpenStack Neutron (virtual network service):
  New

Bug description:
  when ovs agent restart, it will restore the local vlan map in function
  '_restore_local_vlan_map',

      def _restore_local_vlan_map(self):
          cur_ports = self.int_br.get_vif_ports()
          for port in cur_ports:
              local_vlan_map = self.int_br.db_get_val("Port", port.port_name,
                                                      "other_config")
              local_vlan = self.int_br.db_get_val("Port", port.port_name, "tag")
              net_uuid = local_vlan_map.get('net_uuid')
              if (net_uuid and net_uuid not in self.local_vlan_map
                  and local_vlan != DEAD_VLAN_TAG):
                  self.provision_local_vlan(local_vlan_map['net_uuid'],
                               local_vlan_map['network_type'],
                             local_vlan_map['physical_network'],
                             local_vlan_map['segmentation_id'],
                                 local_vlan)

  in some abnormal condition, if a device does not be set tag in ovsdb,
  the 'self.int_br.db_get_val("Port", port.port_name, "tag")' will
  return a empty list, so in function 'provision_local_vlan' will raise
  exception:

      def provision_local_vlan(self, net_uuid, network_type, physical_network,
                               segmentation_id,local_vlan=None:
          lvm = self.local_vlan_map.get(net_uuid)
          if lvm:
              lvid = lvm.vlan
          else:
              if local_vlan in self.available_local_vlans:
                  lvid = local_vlan
                  self.available_local_vlans.remove(local_vlan)

  this line will raise exception 'if local_vlan in
  self.available_local_vlans'

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


Follow ups

References