Improved VlanMap.
Simplified logic and less time spent creating vlans. Change-Id: I90fda09faa1869b38993aa0aeed64d813d29afa9
This commit is contained in:
@@ -41,32 +41,39 @@ LOG.getLogger("ovs_quantum_plugin")
|
|||||||
|
|
||||||
class VlanMap(object):
|
class VlanMap(object):
|
||||||
vlans = {}
|
vlans = {}
|
||||||
|
net_ids = {}
|
||||||
|
free_vlans = set()
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
for x in xrange(2, 4094):
|
self.vlans.clear()
|
||||||
self.vlans[x] = None
|
self.net_ids.clear()
|
||||||
|
self.free_vlans = set(xrange(2, 4094))
|
||||||
|
|
||||||
def set(self, vlan_id, network_id):
|
def set_vlan(self, vlan_id, network_id):
|
||||||
self.vlans[vlan_id] = network_id
|
self.vlans[vlan_id] = network_id
|
||||||
|
self.net_ids[network_id] = vlan_id
|
||||||
|
|
||||||
def acquire(self, network_id):
|
def acquire(self, network_id):
|
||||||
for x in xrange(2, 4094):
|
if len(self.free_vlans):
|
||||||
if self.vlans[x] is None:
|
vlan = self.free_vlans.pop()
|
||||||
self.vlans[x] = network_id
|
self.set_vlan(vlan, network_id)
|
||||||
# LOG.debug("VlanMap::acquire %s -> %s" % (x, network_id))
|
# LOG.debug("VlanMap::acquire %s -> %s", x, network_id)
|
||||||
return x
|
return vlan
|
||||||
raise Exception("No free vlans..")
|
else:
|
||||||
|
raise Exception("No free vlans..")
|
||||||
|
|
||||||
def get(self, vlan_id):
|
def get(self, vlan_id):
|
||||||
return self.vlans[vlan_id]
|
return self.vlans.get(vlan_id, None)
|
||||||
|
|
||||||
def release(self, network_id):
|
def release(self, network_id):
|
||||||
for x in self.vlans.keys():
|
vlan = self.net_ids.get(network_id, None)
|
||||||
if self.vlans[x] == network_id:
|
if vlan is not None:
|
||||||
self.vlans[x] = None
|
self.free_vlans.add(vlan)
|
||||||
# LOG.debug("VlanMap::release %s" % (x))
|
del self.vlans[vlan]
|
||||||
return
|
del self.net_ids[network_id]
|
||||||
LOG.error("No vlan found with network \"%s\"" % network_id)
|
# LOG.debug("VlanMap::release %s", vlan)
|
||||||
|
else:
|
||||||
|
LOG.error("No vlan found with network \"%s\"", network_id)
|
||||||
|
|
||||||
|
|
||||||
class OVSQuantumPlugin(QuantumPluginBase):
|
class OVSQuantumPlugin(QuantumPluginBase):
|
||||||
@@ -97,7 +104,7 @@ class OVSQuantumPlugin(QuantumPluginBase):
|
|||||||
vlan_id, network_id = x
|
vlan_id, network_id = x
|
||||||
# LOG.debug("Adding already populated vlan %s -> %s"
|
# LOG.debug("Adding already populated vlan %s -> %s"
|
||||||
# % (vlan_id, network_id))
|
# % (vlan_id, network_id))
|
||||||
self.vmap.set(vlan_id, network_id)
|
self.vmap.set_vlan(vlan_id, network_id)
|
||||||
|
|
||||||
def get_all_networks(self, tenant_id):
|
def get_all_networks(self, tenant_id):
|
||||||
nets = []
|
nets = []
|
||||||
|
|||||||
@@ -34,3 +34,12 @@ class VlanMapTest(unittest.TestCase):
|
|||||||
vlan_id = self.vmap.acquire("foobar")
|
vlan_id = self.vmap.acquire("foobar")
|
||||||
self.vmap.release("foobar")
|
self.vmap.release("foobar")
|
||||||
self.assertTrue(self.vmap.get(vlan_id) is None)
|
self.assertTrue(self.vmap.get(vlan_id) is None)
|
||||||
|
|
||||||
|
def testAddRelease4kVlans(self):
|
||||||
|
vlan_id = None
|
||||||
|
for id in range(2, 4000):
|
||||||
|
vlan_id = self.vmap.acquire(id)
|
||||||
|
self.assertTrue(vlan_id == id)
|
||||||
|
for id in range(2, 4000):
|
||||||
|
self.vmap.release(id)
|
||||||
|
self.assertTrue(self.vmap.get(id) is None)
|
||||||
|
|||||||
Reference in New Issue
Block a user