Fix race condition in network scheduling to dhcp agent
Rarely dhcp agent rpc call get_active_networks_info() can interleave with network scheduling initiated by create.port.end notification. In this case scheduling raises and port creation returns 500. Need to synchronize on DhcpNetworkBindings table. Closes-Bug: #1276552 Change-Id: I52d94a40772a99c7032dba15b200bf0f21362f93
This commit is contained in:
parent
3d851a7e44
commit
17e13319e8
@ -22,6 +22,7 @@ from oslo.config import cfg
|
||||
from neutron.common import constants
|
||||
from neutron.db import agents_db
|
||||
from neutron.db import agentschedulers_db
|
||||
from neutron.openstack.common.db import exception as db_exc
|
||||
from neutron.openstack.common import log as logging
|
||||
|
||||
|
||||
@ -35,10 +36,17 @@ class ChanceScheduler(object):
|
||||
"""
|
||||
|
||||
def _schedule_bind_network(self, context, agent, network_id):
|
||||
binding = agentschedulers_db.NetworkDhcpAgentBinding()
|
||||
binding.dhcp_agent = agent
|
||||
binding.network_id = network_id
|
||||
context.session.add(binding)
|
||||
try:
|
||||
binding = agentschedulers_db.NetworkDhcpAgentBinding()
|
||||
binding.dhcp_agent = agent
|
||||
binding.network_id = network_id
|
||||
context.session.add(binding)
|
||||
# try to actually write the changes and catch integrity
|
||||
# DBDuplicateEntry
|
||||
context.session.flush()
|
||||
except db_exc.DBDuplicateEntry:
|
||||
# it's totally ok, someone just did our job!
|
||||
pass
|
||||
LOG.debug(_('Network %(network_id)s is scheduled to be hosted by '
|
||||
'DHCP agent %(agent_id)s'),
|
||||
{'network_id': network_id,
|
||||
|
Loading…
Reference in New Issue
Block a user