Merge "[L3HA] Don't update HA router's ports if router isn't active on agents" into stable/train
This commit is contained in:
commit
daa7cfce7d
@ -218,22 +218,21 @@ class L3RpcCallback(object):
|
||||
active_host = (
|
||||
self.l3plugin.get_active_host_for_ha_router(
|
||||
context, router_id))
|
||||
if active_host:
|
||||
host = active_host
|
||||
# If there is currently no active router instance (For
|
||||
# example it's a new router), the host that requested
|
||||
# the routers (Essentially a random host) will do. The
|
||||
# port binding will be corrected when an active is
|
||||
# elected.
|
||||
if not active_host:
|
||||
LOG.debug("Router %(router)s is not active on any "
|
||||
"host. Port %(port)s will not be updated "
|
||||
"now.",
|
||||
{'router': router_id, 'port': port['id']})
|
||||
return
|
||||
try:
|
||||
LOG.debug("Updating router %(router)s port %(port)s "
|
||||
"binding host %(host)s",
|
||||
{"router": router_id, "port": port['id'],
|
||||
"host": host})
|
||||
"host": active_host})
|
||||
self.plugin.update_port(
|
||||
context,
|
||||
port['id'],
|
||||
{'port': {portbindings.HOST_ID: host}})
|
||||
{'port': {portbindings.HOST_ID: active_host}})
|
||||
except exceptions.PortNotFound:
|
||||
LOG.debug("Port %(port)s not found while updating "
|
||||
"agent binding for router %(router)s.",
|
||||
|
@ -1304,9 +1304,19 @@ class L3HAModeDbTestCase(L3HATestFramework):
|
||||
self.plugin.list_active_sync_routers_on_active_l3_agent(
|
||||
self.admin_ctx, self.agent1['host'], [router['id']]))[0]
|
||||
|
||||
# ensure_host_set_on_ports binds an unbound port
|
||||
callback = l3_rpc.L3RpcCallback()
|
||||
callback._l3plugin = self.plugin
|
||||
# First ensure that port is not bound if router is not active on any
|
||||
# agent
|
||||
callback._ensure_host_set_on_ports(
|
||||
self.admin_ctx, self.agent1['host'], [router])
|
||||
port = self._get_first_interface(router['id'])
|
||||
self.assertEqual('', port[portbindings.HOST_ID])
|
||||
|
||||
# Now update router to be active on agent1
|
||||
# and ensure_host_set_on_ports binds an unbound port
|
||||
self.plugin.update_routers_states(
|
||||
self.admin_ctx, {router['id']: 'active'}, self.agent1['host'])
|
||||
callback._ensure_host_set_on_ports(
|
||||
self.admin_ctx, self.agent1['host'], [router])
|
||||
port = self._get_first_interface(router['id'])
|
||||
|
Loading…
Reference in New Issue
Block a user