From 6959578fdbdfd38113b26cd9e4f94b298343a6f0 Mon Sep 17 00:00:00 2001 From: David Kupka Date: Tue, 9 Aug 2016 17:05:17 +0200 Subject: [PATCH] schema cache: Read server info only once Do not open/close the file with every access to plugins. Extensive access to filesystem may cause significant slowdown. https://fedorahosted.org/freeipa/ticket/6048 Reviewed-By: Jan Cholasta --- ipaclient/remote_plugins/schema.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ipaclient/remote_plugins/schema.py b/ipaclient/remote_plugins/schema.py index c72109ac3bb9b7a71f9cbc056eaf3a4d8371d035..aadc891750782b0961bc46989e3693d1d3ed0ecb 100644 --- a/ipaclient/remote_plugins/schema.py +++ b/ipaclient/remote_plugins/schema.py @@ -378,6 +378,9 @@ class ServerInfo(collections.MutableMapping): return self def __exit__(self, *_exc_info): + self.flush() + + def flush(self): if self._dirty: self._write() @@ -603,9 +606,16 @@ def get_package(api, client): try: schema = api._schema except AttributeError: - with ServerInfo(api.env.hostname) as server_info: + try: + server_info = api._server_info + except AttributeError: + server_info = api._server_info = ServerInfo(api) + + try: schema = Schema(api, server_info, client) object.__setattr__(api, '_schema', schema) + finally: + server_info.flush() fingerprint = str(schema['fingerprint']) package_name = '{}${}'.format(__name__, fingerprint) -- 2.7.4