Fix BigSwitch plugin to handle device_id re-use in porttracker code
Updates the BigSwitch port_tracker code to use the sqlalchemy merge method instead of the add method for the port location tracking code to avoid primary key constraint errors if device-ids are moved or re-used Fixes: bug #1208990 Change-Id: I06065ac888873b00f445d4356b17f084ee38c1ea
This commit is contained in:
parent
23ac6df865
commit
752422dcb0
@ -47,4 +47,4 @@ def put_port_hostid(context, port_id, host_id):
|
||||
return
|
||||
with context.session.begin(subtransactions=True):
|
||||
location = PortLocation(port_id=port_id, host_id=host_id)
|
||||
context.session.add(location)
|
||||
context.session.merge(location)
|
||||
|
@ -190,6 +190,16 @@ class TestBigSwitchVIFOverride(test_plugin.TestPortsV2,
|
||||
with self.port(**kwargs) as port:
|
||||
self.assertEqual(port['port']['binding:vif_type'], self.VIF_TYPE)
|
||||
|
||||
def test_port_move(self):
|
||||
kwargs = {'name': 'name', 'binding:host_id': 'ivshost',
|
||||
'device_id': 'override_dev'}
|
||||
with self.port(**kwargs) as port:
|
||||
data = {'port': {'binding:host_id': 'someotherhost',
|
||||
'device_id': 'override_dev'}}
|
||||
req = self.new_update_request('ports', data, port['port']['id'])
|
||||
res = self.deserialize(self.fmt, req.get_response(self.api))
|
||||
self.assertEqual(res['port']['binding:vif_type'], self.VIF_TYPE)
|
||||
|
||||
def _make_port(self, fmt, net_id, expected_res_status=None, **kwargs):
|
||||
res = self._create_port(fmt, net_id, expected_res_status,
|
||||
('binding:host_id', ), **kwargs)
|
||||
|
Loading…
Reference in New Issue
Block a user