NSX: fix migration for networks without a subnet

In case the network is without a subnet, calling the validation
logic during the report phase leads to an error because the LSN
would have been already allocated during the migration phase.

Bypass the issue by calling the plugin directly, which is what
the validation logic does in the first place.

Closes-bug: #1313997

Change-Id: I14f77ae3b0cc147c4ea1c79e56bdd809de7c76a0
(cherry picked from commit 47e51e7521)
changes/78/91378/1
armando-migliaccio 2014-04-28 20:24:18 -07:00
parent 1da8943bfc
commit f217479c61
2 changed files with 6 additions and 5 deletions

View File

@ -155,10 +155,11 @@ class MigrationManager(object):
lsn_id, lsn_port_id = self.manager.lsn_port_get(
context, network_id, subnet_id, raise_on_err=False)
else:
subnet = self.validate(context, network_id)
if subnet:
filters = {'network_id': [network_id]}
subnets = self.plugin.get_subnets(context, filters=filters)
if subnets:
lsn_id, lsn_port_id = self.manager.lsn_port_get(
context, network_id, subnet['id'], raise_on_err=False)
context, network_id, subnets[0]['id'], raise_on_err=False)
else:
lsn_id = self.manager.lsn_get(context, network_id,
raise_on_err=False)

View File

@ -219,7 +219,7 @@ class MigrationManagerTestCase(base.BaseTestCase):
'services': ['foo_lsn_id'], 'type': 'lsn'})
def _test_report_for_lsn_without_subnet(self, validated_subnet):
with mock.patch.object(self.manager, 'validate',
with mock.patch.object(self.manager.plugin, 'get_subnets',
return_value=validated_subnet):
self.manager.manager.lsn_port_get.return_value = (
('foo_lsn_id', 'foo_lsn_port_id'))
@ -231,7 +231,7 @@ class MigrationManagerTestCase(base.BaseTestCase):
self.assertEqual(expected, report)
def test_report_for_lsn_without_subnet_subnet_found(self):
self._test_report_for_lsn_without_subnet({'id': self.subnet_id})
self._test_report_for_lsn_without_subnet([{'id': self.subnet_id}])
def test_report_for_lsn_without_subnet_subnet_not_found(self):
self.manager.manager.lsn_get.return_value = 'foo_lsn_id'