Minimizing lock for port forwarding

Closes-Bug: #1824911
Change-Id: Id02b879cde8d2e6e90850b7cc389edbecd13a479
This commit is contained in:
LIU Yulong 2019-04-17 10:25:08 +08:00
parent 975143fd08
commit 054fd61223
1 changed files with 15 additions and 12 deletions

View File

@ -27,6 +27,7 @@ from neutron.api.rpc.callbacks.consumer import registry
from neutron.api.rpc.callbacks import events
from neutron.api.rpc.callbacks import resources
from neutron.api.rpc.handlers import resources_rpc
from neutron.common import coordination
LOG = logging.getLogger(__name__)
@ -53,22 +54,22 @@ class RouterFipPortForwardingMapping(object):
"""
self.router_fip_mapping = collections.defaultdict(set)
@lockutils.synchronized('port-forwarding-cache')
def set_port_forwardings(self, port_forwardings):
for port_forwarding in port_forwardings:
self.set_fip_port_forwarding(port_forwarding.floatingip_id,
port_forwarding,
port_forwarding.router_id)
self._set_fip_port_forwarding(port_forwarding.floatingip_id,
port_forwarding,
port_forwarding.router_id)
@lockutils.synchronized('port-forwarding-cache')
def update_port_forwardings(self, port_forwardings):
for port_forwarding in port_forwardings:
self.managed_port_forwardings[port_forwarding.id] = port_forwarding
def get_port_forwarding(self, port_forwarding_id):
return self.managed_port_forwardings.get(port_forwarding_id)
@lockutils.synchronized('port-forwarding-cache')
def del_port_forwardings(self, port_forwardings):
for port_forwarding in port_forwardings:
if not self.get_port_forwarding(port_forwarding.id):
if not self.managed_port_forwardings.get(port_forwarding.id):
continue
self.managed_port_forwardings.pop(port_forwarding.id)
self.fip_port_forwarding[port_forwarding.floatingip_id].remove(
@ -80,11 +81,12 @@ class RouterFipPortForwardingMapping(object):
if not self.router_fip_mapping[port_forwarding.router_id]:
del self.router_fip_mapping[port_forwarding.router_id]
def set_fip_port_forwarding(self, fip_id, pf, router_id):
def _set_fip_port_forwarding(self, fip_id, pf, router_id):
self.router_fip_mapping[router_id].add(fip_id)
self.fip_port_forwarding[fip_id].add(pf.id)
self.managed_port_forwardings[pf.id] = pf
@lockutils.synchronized('port-forwarding-cache')
def clear_by_fip(self, fip_id, router_id):
self.router_fip_mapping[router_id].remove(fip_id)
if len(self.router_fip_mapping[router_id]) == 0:
@ -93,8 +95,9 @@ class RouterFipPortForwardingMapping(object):
del self.managed_port_forwardings[pf_id]
del self.fip_port_forwarding[fip_id]
@lockutils.synchronized('port-forwarding-cache')
def check_port_forwarding_changes(self, new_pf):
old_pf = self.get_port_forwarding(new_pf.id)
old_pf = self.managed_port_forwardings.get(new_pf.id)
return old_pf != new_pf
@ -120,7 +123,6 @@ class PortForwardingAgentExtension(l3_extension.L3AgentExtension):
def consume_api(self, agent_api):
self.agent_api = agent_api
@lockutils.synchronized('port-forwarding')
def _handle_notification(self, context, resource_type,
forwardings, event_type):
for forwarding in forwardings:
@ -167,6 +169,7 @@ class PortForwardingAgentExtension(l3_extension.L3AgentExtension):
iptables_manager.ipv4['nat'].add_chain(chain)
iptables_manager.ipv4['nat'].add_rule(chain, rule, tag=rule_tag)
@coordination.synchronized('port-forwarding-{namespace}')
def _process_create(self, port_forwardings, ri, interface_name, namespace,
iptables_manager):
if not port_forwardings:
@ -298,6 +301,7 @@ class PortForwardingAgentExtension(l3_extension.L3AgentExtension):
context, [port_forwarding], ri, interface_name, namespace,
iptables_manager)
@coordination.synchronized('port-forwarding-{namespace}')
def _process_update(self, port_forwardings, iptables_manager,
interface_name, namespace):
if not port_forwardings:
@ -322,6 +326,7 @@ class PortForwardingAgentExtension(l3_extension.L3AgentExtension):
iptables_manager.apply()
self._store_local(port_forwardings, events.UPDATED)
@coordination.synchronized('port-forwarding-{namespace}')
def _process_delete(self, context, port_forwardings, ri, interface_name,
namespace, iptables_manager):
if not port_forwardings:
@ -427,7 +432,6 @@ class PortForwardingAgentExtension(l3_extension.L3AgentExtension):
self.check_local_port_forwardings(
context, ri, ri.fip_managed_by_port_forwardings)
@lockutils.synchronized('port-forwarding')
def add_router(self, context, data):
"""Handle a router add event.
@ -438,7 +442,6 @@ class PortForwardingAgentExtension(l3_extension.L3AgentExtension):
"""
self.process_port_forwarding(context, data)
@lockutils.synchronized('port-forwarding')
def update_router(self, context, data):
"""Handle a router update event.