diff --git a/quantum/db/db_base_plugin_v2.py b/quantum/db/db_base_plugin_v2.py index 3326f73c5b..36da230afa 100644 --- a/quantum/db/db_base_plugin_v2.py +++ b/quantum/db/db_base_plugin_v2.py @@ -1159,9 +1159,8 @@ class QuantumDbPluginV2(quantum_plugin_base_v2.QuantumPluginBaseV2): device_owner=p['device_owner']) context.session.add(port) - # Update the allocated IP's - if ips: - with context.session.begin(subtransactions=True): + # Update the allocated IP's + if ips: for ip in ips: LOG.debug("Allocated IP %s (%s/%s/%s)", ip['ip_address'], port['network_id'], ip['subnet_id'], port.id) diff --git a/quantum/tests/unit/test_db_plugin.py b/quantum/tests/unit/test_db_plugin.py index dd8c1a4bfa..8c9377387e 100644 --- a/quantum/tests/unit/test_db_plugin.py +++ b/quantum/tests/unit/test_db_plugin.py @@ -1193,6 +1193,19 @@ fixed_ips=ip_address%%3D%s&fixed_ips=ip_address%%3D%s&fixed_ips=subnet_id%%3D%s for p in ports_to_delete: self._delete('ports', p['port']['id']) + def test_duplicate_ips(self): + fmt = 'json' + with self.subnet() as subnet: + # Allocate specific IP + kwargs = {"fixed_ips": [{'subnet_id': subnet['subnet']['id'], + 'ip_address': '10.0.0.5'}, + {'subnet_id': subnet['subnet']['id'], + 'ip_address': '10.0.0.5'}]} + net_id = subnet['subnet']['network_id'] + res = self._create_port(fmt, net_id=net_id, **kwargs) + port2 = self.deserialize(fmt, res) + self.assertEquals(res.status_int, 500) + def test_requested_ips_only(self): fmt = 'json' with self.subnet() as subnet: