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:
parent
f89cf127d9
commit
d2c99f080a
@ -26,6 +26,7 @@ import os
|
|||||||
|
|
||||||
from neutron.agent.linux import utils as linux_utils
|
from neutron.agent.linux import utils as linux_utils
|
||||||
from neutron.common import utils
|
from neutron.common import utils
|
||||||
|
from neutron.openstack.common import lockutils
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@ -351,8 +352,19 @@ class IptablesManager(object):
|
|||||||
|
|
||||||
self._apply()
|
self._apply()
|
||||||
|
|
||||||
@utils.synchronized('iptables', external=True)
|
|
||||||
def _apply(self):
|
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.
|
"""Apply the current in-memory set of iptables rules.
|
||||||
|
|
||||||
This will blow away any rules left over from previous runs of the
|
This will blow away any rules left over from previous runs of the
|
||||||
|
@ -36,8 +36,9 @@ from neutron.openstack.common import log as logging
|
|||||||
|
|
||||||
TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
|
TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
|
||||||
LOG = logging.getLogger(__name__)
|
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):
|
def read_cached_file(filename, cache_info, reload_func=None):
|
||||||
|
Loading…
Reference in New Issue
Block a user