From: Ann Kamyshnikova Date: Fri, 25 Sep 2015 12:30:30 +0000 (+0300) Subject: Add transaction for setting agent_id in L3HARouterAgentPortBinding X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=3fef15a40b2714c1a372216ce60cc1384dc48c02;p=openstack-build%2Fneutron-build.git Add transaction for setting agent_id in L3HARouterAgentPortBinding To avoid having extra L3HARouterAgentPortBinding with l3_agent as None, operation of setting l3_agent should be atomic. For this purpose, transaction was added in methods create_ha_port_and_bind and _bind_ha_router_to_agents. Closes-Bug: #1499647 Change-Id: Iaad82fe522cfd70061daecf411c924fdc11b7e41 --- diff --git a/neutron/scheduler/l3_agent_scheduler.py b/neutron/scheduler/l3_agent_scheduler.py index 844c640bb..63258c2af 100644 --- a/neutron/scheduler/l3_agent_scheduler.py +++ b/neutron/scheduler/l3_agent_scheduler.py @@ -292,9 +292,10 @@ class L3Scheduler(object): tenant_id, agent): """Creates and binds a new HA port for this agent.""" ha_network = plugin.get_ha_network(context, tenant_id) - port_binding = plugin.add_ha_port(context.elevated(), router_id, - ha_network.network.id, tenant_id) - port_binding.l3_agent_id = agent['id'] + with context.session.begin(subtransactions=True): + port_binding = plugin.add_ha_port(context.elevated(), router_id, + ha_network.network.id, tenant_id) + port_binding.l3_agent_id = agent['id'] self.bind_router(context, router_id, agent) def _schedule_ha_routers_to_additional_agent(self, plugin, context, agent): @@ -327,8 +328,9 @@ class L3Scheduler(object): port_bindings = plugin.get_ha_router_port_bindings(context, [router_id]) for port_binding, agent in zip(port_bindings, chosen_agents): - port_binding.l3_agent_id = agent.id - self.bind_router(context, router_id, agent) + with context.session.begin(subtransactions=True): + port_binding.l3_agent_id = agent.id + self.bind_router(context, router_id, agent) LOG.debug('HA Router %(router_id)s is scheduled to L3 agent ' '%(agent_id)s)',