Merge "Big Switch: Lock consistency table for REST calls"
This commit is contained in:
@@ -44,6 +44,7 @@ on port-attach) on an additional PUT to do a bulk dump of all persistent data.
|
||||
"""
|
||||
|
||||
import copy
|
||||
import functools
|
||||
import httplib
|
||||
import re
|
||||
|
||||
@@ -442,6 +443,14 @@ class NeutronRestProxyV2Base(db_base_plugin_v2.NeutronDbPluginV2,
|
||||
raise exceptions.PortNotFound(port_id=port_id)
|
||||
|
||||
|
||||
def put_context_in_serverpool(f):
|
||||
@functools.wraps(f)
|
||||
def wrapper(self, context, *args, **kwargs):
|
||||
self.servers.set_context(context)
|
||||
return f(self, context, *args, **kwargs)
|
||||
return wrapper
|
||||
|
||||
|
||||
class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
addr_pair_db.AllowedAddressPairsMixin,
|
||||
extradhcpopt_db.ExtraDhcpOptMixin,
|
||||
@@ -508,6 +517,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
# Consume from all consumers in threads
|
||||
self.conn.consume_in_threads()
|
||||
|
||||
@put_context_in_serverpool
|
||||
def create_network(self, context, network):
|
||||
"""Create a network.
|
||||
|
||||
@@ -551,6 +561,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
# return created network
|
||||
return new_net
|
||||
|
||||
@put_context_in_serverpool
|
||||
def update_network(self, context, net_id, network):
|
||||
"""Updates the properties of a particular Virtual Network.
|
||||
|
||||
@@ -590,6 +601,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
|
||||
# NOTE(kevinbenton): workaround for eventlet/mysql deadlock
|
||||
@utils.synchronized('bsn-port-barrier')
|
||||
@put_context_in_serverpool
|
||||
def delete_network(self, context, net_id):
|
||||
"""Delete a network.
|
||||
:param context: neutron api request context
|
||||
@@ -612,6 +624,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
self._send_delete_network(orig_net, context)
|
||||
return ret_val
|
||||
|
||||
@put_context_in_serverpool
|
||||
def create_port(self, context, port):
|
||||
"""Create a port, which is a connection point of a device
|
||||
(e.g., a VM NIC) to attach to a L2 Neutron network.
|
||||
@@ -702,6 +715,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
self._extend_port_dict_binding(context, port)
|
||||
return [self._fields(port, fields) for port in ports]
|
||||
|
||||
@put_context_in_serverpool
|
||||
def update_port(self, context, port_id, port):
|
||||
"""Update values of a port.
|
||||
|
||||
@@ -778,6 +792,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
|
||||
# NOTE(kevinbenton): workaround for eventlet/mysql deadlock
|
||||
@utils.synchronized('bsn-port-barrier')
|
||||
@put_context_in_serverpool
|
||||
def delete_port(self, context, port_id, l3_port_check=True):
|
||||
"""Delete a port.
|
||||
:param context: neutron api request context
|
||||
@@ -803,6 +818,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
self._delete_port(context, port_id)
|
||||
self.servers.rest_delete_port(tenid, port['network_id'], port_id)
|
||||
|
||||
@put_context_in_serverpool
|
||||
def create_subnet(self, context, subnet):
|
||||
LOG.debug(_("NeutronRestProxyV2: create_subnet() called"))
|
||||
|
||||
@@ -819,6 +835,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
self._send_update_network(orig_net, context)
|
||||
return new_subnet
|
||||
|
||||
@put_context_in_serverpool
|
||||
def update_subnet(self, context, id, subnet):
|
||||
LOG.debug(_("NeutronRestProxyV2: update_subnet() called"))
|
||||
|
||||
@@ -837,6 +854,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
|
||||
# NOTE(kevinbenton): workaround for eventlet/mysql deadlock
|
||||
@utils.synchronized('bsn-port-barrier')
|
||||
@put_context_in_serverpool
|
||||
def delete_subnet(self, context, id):
|
||||
LOG.debug(_("NeutronRestProxyV2: delete_subnet() called"))
|
||||
orig_subnet = super(NeutronRestProxyV2, self).get_subnet(context, id)
|
||||
@@ -875,6 +893,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
return tenantset
|
||||
return defaultset
|
||||
|
||||
@put_context_in_serverpool
|
||||
def create_router(self, context, router):
|
||||
LOG.debug(_("NeutronRestProxyV2: create_router() called"))
|
||||
|
||||
@@ -896,6 +915,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
# return created router
|
||||
return new_router
|
||||
|
||||
@put_context_in_serverpool
|
||||
def update_router(self, context, router_id, router):
|
||||
|
||||
LOG.debug(_("NeutronRestProxyV2.update_router() called"))
|
||||
@@ -919,6 +939,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
# NOTE(kevinbenton): workaround for eventlet/mysql deadlock.
|
||||
# delete_router ends up calling _delete_port instead of delete_port.
|
||||
@utils.synchronized('bsn-port-barrier')
|
||||
@put_context_in_serverpool
|
||||
def delete_router(self, context, router_id):
|
||||
LOG.debug(_("NeutronRestProxyV2: delete_router() called"))
|
||||
|
||||
@@ -1009,6 +1030,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
interface_id)
|
||||
return del_ret
|
||||
|
||||
@put_context_in_serverpool
|
||||
def create_floatingip(self, context, floatingip):
|
||||
LOG.debug(_("NeutronRestProxyV2: create_floatingip() called"))
|
||||
|
||||
@@ -1032,6 +1054,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
# return created floating IP
|
||||
return new_fl_ip
|
||||
|
||||
@put_context_in_serverpool
|
||||
def update_floatingip(self, context, id, floatingip):
|
||||
LOG.debug(_("NeutronRestProxyV2: update_floatingip() called"))
|
||||
|
||||
@@ -1048,6 +1071,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
self._send_floatingip_update(context)
|
||||
return new_fl_ip
|
||||
|
||||
@put_context_in_serverpool
|
||||
def delete_floatingip(self, context, id):
|
||||
LOG.debug(_("NeutronRestProxyV2: delete_floatingip() called"))
|
||||
|
||||
@@ -1072,6 +1096,7 @@ class NeutronRestProxyV2(NeutronRestProxyV2Base,
|
||||
# overriding method from l3_db as original method calls
|
||||
# self.delete_floatingip() which in turn calls self.delete_port() which
|
||||
# is locked with 'bsn-port-barrier'
|
||||
@put_context_in_serverpool
|
||||
def delete_disassociated_floatingips(self, context, network_id):
|
||||
query = self._model_query(context, l3_db.FloatingIP)
|
||||
query = query.filter_by(floating_network_id=network_id,
|
||||
|
||||
Reference in New Issue
Block a user