Merge "Nsxv: Fix db out of sync with backend"
This commit is contained in:
commit
6067b28d7d
@ -1344,13 +1344,18 @@ class NsxVPluginV2(agents_db.AgentDbMixin,
|
||||
with context.session.begin(subtransactions=True):
|
||||
router_db = self._get_router(context, lrouter['id'])
|
||||
self._process_nsx_router_create(context, router_db, r)
|
||||
router_driver = self._get_router_driver(context, router_db)
|
||||
router_driver.create_router(
|
||||
context, lrouter,
|
||||
allow_metadata=(allow_metadata and self.metadata_proxy_handler))
|
||||
if gw_info != attr.ATTR_NOT_SPECIFIED:
|
||||
router_driver._update_router_gw_info(
|
||||
context, lrouter['id'], gw_info)
|
||||
try:
|
||||
router_driver = self._get_router_driver(context, router_db)
|
||||
router_driver.create_router(
|
||||
context, lrouter,
|
||||
allow_metadata=(allow_metadata and
|
||||
self.metadata_proxy_handler))
|
||||
if gw_info != attr.ATTR_NOT_SPECIFIED:
|
||||
router_driver._update_router_gw_info(
|
||||
context, lrouter['id'], gw_info)
|
||||
except Exception:
|
||||
with excutils.save_and_reraise_exception():
|
||||
self.delete_router(context, lrouter['id'])
|
||||
return self.get_router(context, lrouter['id'])
|
||||
|
||||
def update_router(self, context, router_id, router):
|
||||
@ -1382,8 +1387,8 @@ class NsxVPluginV2(agents_db.AgentDbMixin,
|
||||
def delete_router(self, context, id):
|
||||
self._check_router_in_use(context, id)
|
||||
router_driver = self._find_router_driver(context, id)
|
||||
router_driver.delete_router(context, id)
|
||||
super(NsxVPluginV2, self).delete_router(context, id)
|
||||
router_driver.delete_router(context, id)
|
||||
|
||||
def get_router(self, context, id, fields=None):
|
||||
router = super(NsxVPluginV2, self).get_router(context, id, fields)
|
||||
|
@ -62,12 +62,10 @@ class RouterExclusiveDriver(router_driver.RouterBaseDriver):
|
||||
return self.plugin.get_router(context, router_id)
|
||||
|
||||
def delete_router(self, context, router_id):
|
||||
with locking.LockManager.get_lock(
|
||||
self._get_router_edge_id(context, router_id), external=True):
|
||||
self.edge_manager.delete_lrouter(context, router_id, dist=False)
|
||||
if self.plugin.metadata_proxy_handler:
|
||||
self.plugin.metadata_proxy_handler.cleanup_router_edge(
|
||||
router_id)
|
||||
self.edge_manager.delete_lrouter(context, router_id, dist=False)
|
||||
if self.plugin.metadata_proxy_handler:
|
||||
self.plugin.metadata_proxy_handler.cleanup_router_edge(
|
||||
router_id)
|
||||
|
||||
def update_routes(self, context, router_id, nexthop):
|
||||
with locking.LockManager.get_lock(
|
||||
|
@ -1527,6 +1527,20 @@ class TestExclusiveRouterTestCase(L3NatTest, L3NatTestCaseBase,
|
||||
for k, v in expected:
|
||||
self.assertEqual(net['network'][k], v)
|
||||
|
||||
def test_create_router_fail_at_the_backend(self):
|
||||
p = manager.NeutronManager.get_plugin()
|
||||
edge_manager = p.edge_manager
|
||||
with mock.patch.object(edge_manager, 'create_lrouter',
|
||||
side_effect=[n_exc.NeutronException]):
|
||||
router = {'router': {'admin_state_up': True,
|
||||
'name': 'e161be1d-0d0d-4046-9823-5a593d94f72c',
|
||||
'router_type': 'exclusive'}}
|
||||
self.assertRaises(n_exc.NeutronException,
|
||||
p.create_router,
|
||||
context.get_admin_context(),
|
||||
router)
|
||||
self._test_list_resources('router', ())
|
||||
|
||||
def test_create_l3_ext_network_with_dhcp(self):
|
||||
with self._create_l3_ext_network() as net:
|
||||
with testlib_api.ExpectedException(
|
||||
@ -1976,6 +1990,20 @@ class TestVdrTestCase(L3NatTest, L3NatTestCaseBase,
|
||||
test_l3_plugin.L3NatDBIntTestCase,
|
||||
NsxVPluginV2TestCase):
|
||||
|
||||
def test_create_router_fail_at_the_backend(self):
|
||||
p = manager.NeutronManager.get_plugin()
|
||||
edge_manager = p.edge_manager
|
||||
with mock.patch.object(edge_manager, 'create_lrouter',
|
||||
side_effect=[n_exc.NeutronException]):
|
||||
router = {'router': {'admin_state_up': True,
|
||||
'name': 'e161be1d-0d0d-4046-9823-5a593d94f72c',
|
||||
'distributed': True}}
|
||||
self.assertRaises(n_exc.NeutronException,
|
||||
p.create_router,
|
||||
context.get_admin_context(),
|
||||
router)
|
||||
self._test_list_resources('router', ())
|
||||
|
||||
def test_update_port_device_id_to_different_tenants_router(self):
|
||||
self.skipTest('TBD')
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user