mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Don't perform some API self-tests in production mode for performance reasons
The API does a fair number of self tests and locking to assure that the registered commands are consistent and will work. This does not need to be done on a production system and adds additional overhead causing somewhere between a 30 and 50% decrease in performance. Because makeapi is executed when a build is done ensure that it is executed in developer mode to ensure that the framework is ok. ticket 751
This commit is contained in:
committed by
Simo Sorce
parent
fd1d0857b5
commit
359d54e741
@@ -387,6 +387,7 @@ def main():
|
||||
if ipautil.file_exists(config.dir + "/cacert.p12"):
|
||||
fd.write("enable_ra=True\n")
|
||||
fd.write("ra_plugin=dogtag\n")
|
||||
fd.write("mode=production\n")
|
||||
fd.close()
|
||||
|
||||
api.bootstrap(in_server=True)
|
||||
|
||||
@@ -683,6 +683,7 @@ def main():
|
||||
fd.write("enable_ra=True\n")
|
||||
if not options.selfsign:
|
||||
fd.write("ra_plugin=dogtag\n")
|
||||
fd.write("mode=production\n")
|
||||
fd.close()
|
||||
|
||||
api.bootstrap(**cfg)
|
||||
|
||||
@@ -467,6 +467,9 @@ class Env(object):
|
||||
else:
|
||||
self.in_tree = False
|
||||
|
||||
if self.in_tree and 'mode' not in self:
|
||||
self.mode = 'developer'
|
||||
|
||||
# Set dot_ipa:
|
||||
if 'dot_ipa' not in self:
|
||||
self.dot_ipa = self._join('home', '.ipa')
|
||||
|
||||
@@ -351,9 +351,10 @@ class HasParam(Plugin):
|
||||
self._filter_param_by_context(name, env),
|
||||
sort=False
|
||||
)
|
||||
check = getattr(self, 'check_' + name, None)
|
||||
if callable(check):
|
||||
check(namespace)
|
||||
if self.env.mode != 'production':
|
||||
check = getattr(self, 'check_' + name, None)
|
||||
if callable(check):
|
||||
check(namespace)
|
||||
setattr(self, name, namespace)
|
||||
|
||||
|
||||
|
||||
@@ -207,6 +207,8 @@ class Plugin(ReadOnly):
|
||||
def finalize(self):
|
||||
"""
|
||||
"""
|
||||
if self.env.mode == 'production':
|
||||
return
|
||||
lock(self)
|
||||
|
||||
def set_api(self, api):
|
||||
@@ -601,19 +603,22 @@ class API(DictProxy):
|
||||
namespace = NameSpace(
|
||||
plugin_iter(base, (magic[k] for k in magic))
|
||||
)
|
||||
assert not (
|
||||
name in self.__d or hasattr(self, name)
|
||||
)
|
||||
if self.env.mode != 'production':
|
||||
assert not (
|
||||
name in self.__d or hasattr(self, name)
|
||||
)
|
||||
self.__d[name] = namespace
|
||||
object.__setattr__(self, name, namespace)
|
||||
|
||||
for p in plugins.itervalues():
|
||||
p.instance.set_api(self)
|
||||
assert p.instance.api is self
|
||||
if self.env.mode != 'production':
|
||||
assert p.instance.api is self
|
||||
|
||||
for p in plugins.itervalues():
|
||||
p.instance.finalize()
|
||||
assert islocked(p.instance) is True
|
||||
if self.env.mode != 'production':
|
||||
assert islocked(p.instance) is True
|
||||
object.__setattr__(self, '_API__finalized', True)
|
||||
tuple(PluginInfo(p) for p in plugins.itervalues())
|
||||
object.__setattr__(self, 'plugins',
|
||||
|
||||
Reference in New Issue
Block a user