def delete_network_postcommit(self, context):
     try:
         network = context.current
         segments = context.network_segments
         vxlan_segments = []
         if segments:
             for segment in segments:
                 if segment[api.NETWORK_TYPE] == p_const.TYPE_VXLAN:
                     vxlan_segments.append(segment)
         if not vxlan_segments:
             return
         stale_entries = ovsvapp_db.get_stale_local_vlans_for_network(
             network['id'])
         if stale_entries:
             for (vcenter, cluster, lvid) in stale_entries:
                 network_info = {'vcenter_id': vcenter,
                                 'cluster_id': cluster,
                                 'lvid': lvid,
                                 'network_id': network['id']}
                 if len(vxlan_segments) == 1:
                     seg_id = vxlan_segments[0][api.SEGMENTATION_ID]
                     network_info.update({'segmentation_id': seg_id})
                 LOG.debug("Spawning thread for releasing network "
                           "VNI allocations for %s.", network_info)
                 self.threadpool.spawn_n(self._notify_agent, network_info)
                 LOG.info(_("Spawned a thread for releasing network "
                            "vni allocations for network: %s."),
                          network_info)
     except Exception:
         LOG.exception(_("Failed checking stale local vlan allocations."))
 def delete_network_postcommit(self, context):
     network = context.current
     segments = context.network_segments
     vxlan_segments = []
     if segments:
         for segment in segments:
             if segment[api.NETWORK_TYPE] in self.supported_network_types:
                 vxlan_segments.append(segment)
     if not vxlan_segments:
         return
     try:
         stale_entries = ovsvapp_db.get_stale_local_vlans_for_network(
             network['id'])
         if stale_entries:
             for (vcenter, cluster, lvid) in stale_entries:
                 network_info = {'vcenter_id': vcenter,
                                 'cluster_id': cluster,
                                 'lvid': lvid,
                                 'network_id': network['id']}
                 if len(vxlan_segments) == 1:
                     seg_id = vxlan_segments[0][api.SEGMENTATION_ID]
                     net_type = vxlan_segments[0][api.NETWORK_TYPE]
                     network_info.update({'segmentation_id': seg_id,
                                          'network_type': net_type})
                 LOG.debug("Spawning thread for releasing network "
                           "VNI allocations for %s.", network_info)
                 self.threadpool.spawn_n(self._notify_agent, network_info)
                 LOG.info(_LI("Spawned a thread for releasing network "
                              "vni allocations for network: %s."),
                          network_info)
     except Exception:
         LOG.exception(_LE("Failed checking stale local vlan allocations."))
    def test_get_stale_local_vlans_for_network_no_stale_networks(self):
        net1_port_info = self._form_port_info_dict("fake_vcenter", "fake_cluster", "net1")
        # Allocate network.
        ovsvapp_db.get_local_vlan(net1_port_info)

        # Setup for release.
        lvid = ovsvapp_db.check_to_reclaim_local_vlan(net1_port_info)
        self.assertEqual(1, lvid)
        ovsvapp_db.release_local_vlan(net1_port_info)
        ret_val = ovsvapp_db.get_stale_local_vlans_for_network("net1")
        self.assertIsNone(ret_val)
    def test_get_stale_local_vlans_for_network_no_stale_networks(self):
        net1_port_info = self._form_port_info_dict('fake_vcenter',
                                                   'fake_cluster', 'net1')
        # Allocate network.
        ovsvapp_db.get_local_vlan(net1_port_info)

        # Setup for release.
        lvid = ovsvapp_db.check_to_reclaim_local_vlan(net1_port_info)
        self.assertEqual(1, lvid)
        ovsvapp_db.release_local_vlan(net1_port_info)
        ret_val = ovsvapp_db.get_stale_local_vlans_for_network('net1')
        self.assertIsNone(ret_val)
    def test_get_stale_local_vlans_for_network(self):
        net1_port1_info = self._form_port_info_dict("fake_vcenter", "fake_cluster1", "net1")
        ovsvapp_db.get_local_vlan(net1_port1_info)

        net1_port2_info = self._form_port_info_dict("fake_vcenter", "fake_cluster2", "net1")
        ovsvapp_db.get_local_vlan(net1_port2_info)
        lvid = ovsvapp_db.check_to_reclaim_local_vlan(net1_port1_info)
        self.assertEqual(1, lvid)
        lvid = ovsvapp_db.check_to_reclaim_local_vlan(net1_port2_info)
        self.assertEqual(1, lvid)
        ret_val = ovsvapp_db.get_stale_local_vlans_for_network("net1")
        self.assertEqual([("fake_vcenter", "fake_cluster1", 1), ("fake_vcenter", "fake_cluster2", 1)], ret_val)
    def test_get_stale_local_vlans_for_network(self):
        net1_port1_info = self._form_port_info_dict('fake_vcenter',
                                                    'fake_cluster1', 'net1')
        ovsvapp_db.get_local_vlan(net1_port1_info)

        net1_port2_info = self._form_port_info_dict('fake_vcenter',
                                                    'fake_cluster2', 'net1')
        ovsvapp_db.get_local_vlan(net1_port2_info)
        lvid = ovsvapp_db.check_to_reclaim_local_vlan(net1_port1_info)
        self.assertEqual(1, lvid)
        lvid = ovsvapp_db.check_to_reclaim_local_vlan(net1_port2_info)
        self.assertEqual(1, lvid)
        ret_val = ovsvapp_db.get_stale_local_vlans_for_network('net1')
        self.assertEqual([('fake_vcenter', 'fake_cluster1', 1),
                          ('fake_vcenter', 'fake_cluster2', 1)], ret_val)