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
c4e7ae64c6
commit
eed1b7cbdb
@ -22,6 +22,7 @@ from oslo.config import cfg
|
|||||||
from neutron.common import constants
|
from neutron.common import constants
|
||||||
from neutron.db import agents_db
|
from neutron.db import agents_db
|
||||||
from neutron.db import agentschedulers_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
|
from neutron.openstack.common import log as logging
|
||||||
|
|
||||||
|
|
||||||
@ -35,10 +36,17 @@ class ChanceScheduler(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def _schedule_bind_network(self, context, agent, network_id):
|
def _schedule_bind_network(self, context, agent, network_id):
|
||||||
binding = agentschedulers_db.NetworkDhcpAgentBinding()
|
try:
|
||||||
binding.dhcp_agent = agent
|
binding = agentschedulers_db.NetworkDhcpAgentBinding()
|
||||||
binding.network_id = network_id
|
binding.dhcp_agent = agent
|
||||||
context.session.add(binding)
|
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 '
|
LOG.debug(_('Network %(network_id)s is scheduled to be hosted by '
|
||||||
'DHCP agent %(agent_id)s'),
|
'DHCP agent %(agent_id)s'),
|
||||||
{'network_id': network_id,
|
{'network_id': network_id,
|
||||||
|
Loading…
Reference in New Issue
Block a user