From 22d7ace8c0b8eb379c8cf620716317145906371a Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 12 Apr 2019 17:13:46 +0200 Subject: [PATCH] postgresql_backend: cache ContentType based on the manager object and model classes (#32248) model classes and manager object are duplicated during migrations. --- tenant_schemas/postgresql_backend/base.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tenant_schemas/postgresql_backend/base.py b/tenant_schemas/postgresql_backend/base.py index d6ae824..8602051 100644 --- a/tenant_schemas/postgresql_backend/base.py +++ b/tenant_schemas/postgresql_backend/base.py @@ -185,14 +185,15 @@ class ContentTypeCacheDescriptor(object): # use weak for transient Manager owner._thread_local_cache._cache = weakref.WeakKeyDictionary() global_cache = owner._thread_local_cache._cache - get_cache = global_cache.get(owner) + model_cache = global_cache.setdefault(obj, weakref.WeakKeyDictionary()) + get_cache = model_cache.get(obj.model) if not get_cache: # use an LRU cache to evict dead tenants with time and to prevent # bloat with lot of tenants @lru_cache(maxsize=200) def get_cache(schema_name): return {} - global_cache[owner] = get_cache + global_cache[obj.model] = get_cache tenant = getattr(connection, 'tenant', None) schema_name = getattr(tenant, 'schema_name', 'public') return get_cache(schema_name)