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
This commit is contained in:
Carl Baldwin 2014-01-17 19:28:10 +00:00
parent 428402d254
commit 4b723e7d30
2 changed files with 15 additions and 2 deletions

View File

@ -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

View File

@ -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):