From 9e1b74fa0bfbd5e2d3b2123c66c54e6222fac566 Mon Sep 17 00:00:00 2001 From: Carl Baldwin Date: Fri, 17 Jan 2014 19:28:10 +0000 Subject: [PATCH] Use an independent iptables lock per namespace Since iptables is independent from namespace to namespace, it makes sense to use an independent lock per namespace. This improvement is aimed at improving the parallel performance in the L3 agent. Partially implements blueprint: neutron-tempest-parallel Change-Id: I15e9c9da9a7c15981757a09bc744501722d62db2 --- neutron/agent/linux/iptables_manager.py | 14 +++++++++++++- neutron/common/utils.py | 3 ++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/neutron/agent/linux/iptables_manager.py b/neutron/agent/linux/iptables_manager.py index f33478af6..87372f03b 100644 --- a/neutron/agent/linux/iptables_manager.py +++ b/neutron/agent/linux/iptables_manager.py @@ -26,6 +26,7 @@ import os from neutron.agent.linux import utils as linux_utils from neutron.common import utils +from neutron.openstack.common import lockutils from neutron.openstack.common import log as logging LOG = logging.getLogger(__name__) @@ -351,8 +352,19 @@ class IptablesManager(object): self._apply() - @utils.synchronized('iptables', external=True) def _apply(self): + lock_name = 'iptables' + if self.namespace: + lock_name += '-' + self.namespace + + try: + with lockutils.lock(lock_name, utils.SYNCHRONIZED_PREFIX, True): + LOG.debug(_('Got semaphore / lock "%s"'), lock_name) + return self._apply_synchronized() + finally: + LOG.debug(_('Semaphore / lock released "%s"'), lock_name) + + def _apply_synchronized(self): """Apply the current in-memory set of iptables rules. This will blow away any rules left over from previous runs of the diff --git a/neutron/common/utils.py b/neutron/common/utils.py index 5e8cab756..1a806ab49 100644 --- a/neutron/common/utils.py +++ b/neutron/common/utils.py @@ -36,8 +36,9 @@ from neutron.openstack.common import log as logging TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ" LOG = logging.getLogger(__name__) +SYNCHRONIZED_PREFIX = 'neutron-' -synchronized = lockutils.synchronized_with_prefix('neutron-') +synchronized = lockutils.synchronized_with_prefix(SYNCHRONIZED_PREFIX) def read_cached_file(filename, cache_info, reload_func=None): -- 2.45.2