diff --git a/neutron/services/l3_router/service_providers/driver_controller.py b/neutron/services/l3_router/service_providers/driver_controller.py index b572b6e3985..0f8a51b4349 100644 --- a/neutron/services/l3_router/service_providers/driver_controller.py +++ b/neutron/services/l3_router/service_providers/driver_controller.py @@ -131,7 +131,12 @@ class DriverController(object): payload.request_body['distributed'] = (payload.states[0] ['distributed']) if 'ha' not in payload.request_body: - payload.request_body['ha'] = payload.states[0]['distributed'] + payload.request_body['ha'] = payload.states[0]['ha'] + LOG.debug("Get a provider driver handle based on the ha flag: " + "%(ha_flag)s and distributed flag: %(distributed_flag)s", + {'ha_flag': payload.request_body['ha'], + 'distributed_flag': + payload.request_body['distributed']}) new_drv = self._attrs_to_driver(payload.request_body) if new_drv: LOG.debug("Router %(id)s migrating from %(old)s provider to " diff --git a/neutron/tests/unit/services/l3_router/service_providers/test_driver_controller.py b/neutron/tests/unit/services/l3_router/service_providers/test_driver_controller.py index ca104fce1ec..c6b7960a220 100644 --- a/neutron/tests/unit/services/l3_router/service_providers/test_driver_controller.py +++ b/neutron/tests/unit/services/l3_router/service_providers/test_driver_controller.py @@ -103,6 +103,35 @@ class TestDriverController(testlib_api.SqlTestCase): None, request_body={'name': 'testname'}, states=({'flavor_id': 'old_fid'},))) + def test__update_router_provider_with_flags(self): + test_dc = driver_controller.DriverController(self.fake_l3) + with mock.patch.object(test_dc, "get_provider_for_router"): + with mock.patch.object( + driver_controller, + "_ensure_driver_supports_request") as _ensure: + _ensure.side_effect = lib_exc.InvalidInput( + error_message='message') + with mock.patch( + "neutron.services.l3_router.service_providers." + "driver_controller.LOG.debug") as mock_log: + self.assertRaises( + lib_exc.InvalidInput, + test_dc._update_router_provider, + None, None, None, + payload=events.DBEventPayload( + None, request_body={'name': 'testname', + 'distributed': False}, + states=({'flavor_id': None, + 'distributed': True, 'ha': False},))) + # To validate that the 'ha' attribute of the router + # stays unchanged from the previous state while + # updating 'distributed' from True to False. + mock_log.assert_any_call( + "Get a provider driver handle based on the ha " + "flag: %(ha_flag)s and distributed flag: " + "%(distributed_flag)s", + {'ha_flag': False, 'distributed_flag': False}) + def test__set_router_provider_attr_lookups(self): # ensure correct drivers are looked up based on attrs router_id1 = uuidutils.generate_uuid()