diff options
author | Rob Crittenden <rcritten@redhat.com> | 2011-01-19 11:24:31 -0500 |
---|---|---|
committer | Simo Sorce <ssorce@redhat.com> | 2011-01-28 18:49:17 -0500 |
commit | 359d54e741877f04b0773fb0955041eee7ec0054 (patch) | |
tree | 8a1c69754da14a502d809330e2f8f7831ff0c16b /ipalib/plugable.py | |
parent | fd1d0857b5b559425668f38d85a7d607d0f35767 (diff) | |
download | freeipa-359d54e741877f04b0773fb0955041eee7ec0054.tar.gz freeipa-359d54e741877f04b0773fb0955041eee7ec0054.tar.xz freeipa-359d54e741877f04b0773fb0955041eee7ec0054.zip |
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
Diffstat (limited to 'ipalib/plugable.py')
-rw-r--r-- | ipalib/plugable.py | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py index 264bb68c..82bd5228 100644 --- a/ipalib/plugable.py +++ b/ipalib/plugable.py @@ -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', |