From f6de4f21868db407f79b8265d2c08770a3875f45 Mon Sep 17 00:00:00 2001
From: Don Mitchell <dmitchell@edx.org>
Date: Mon, 16 Dec 2013 12:31:19 -0500
Subject: [PATCH] Location map uses a separate cache and defaults to general

---
 cms/djangoapps/auth/authz.py                     | 3 +--
 cms/envs/dev.py                                  | 7 ++++++-
 cms/envs/test.py                                 | 7 ++++++-
 common/lib/xmodule/xmodule/modulestore/django.py | 6 +++++-
 lms/envs/dev.py                                  | 6 +++++-
 lms/envs/test.py                                 | 7 ++++++-
 6 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/cms/djangoapps/auth/authz.py b/cms/djangoapps/auth/authz.py
index c6a67bd451c..19c00f832ac 100644
--- a/cms/djangoapps/auth/authz.py
+++ b/cms/djangoapps/auth/authz.py
@@ -203,8 +203,7 @@ def remove_user_from_course_group(caller, user, location, role):
 
     # see if the user is actually in that role, if not then we don't have to do anything
     groupnames, _ = get_all_course_role_groupnames(location, role)
-    for group in user.groups.filter(name__in=groupnames):
-        user.groups.remove(group)
+    user.groups.remove(*user.groups.filter(name__in=groupnames))
     user.save()
 
 
diff --git a/cms/envs/dev.py b/cms/envs/dev.py
index 74561cee636..0ca4266f40d 100644
--- a/cms/envs/dev.py
+++ b/cms/envs/dev.py
@@ -129,7 +129,12 @@ CACHES = {
         'LOCATION': '/var/tmp/mongo_metadata_inheritance',
         'TIMEOUT': 300,
         'KEY_FUNCTION': 'util.memcache.safe_key',
-    }
+    },
+    'loc_cache': {
+        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+        'LOCATION': 'edx_location_mem_cache',
+    },
+
 }
 
 # Make the keyedcache startup warnings go away
diff --git a/cms/envs/test.py b/cms/envs/test.py
index a35824ed52b..e541b0d390d 100644
--- a/cms/envs/test.py
+++ b/cms/envs/test.py
@@ -138,7 +138,12 @@ CACHES = {
         'LOCATION': '/var/tmp/mongo_metadata_inheritance',
         'TIMEOUT': 300,
         'KEY_FUNCTION': 'util.memcache.safe_key',
-    }
+    },
+    'loc_cache': {
+        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+        'LOCATION': 'edx_location_mem_cache',
+    },
+
 }
 
 # hide ratelimit warnings while running tests
diff --git a/common/lib/xmodule/xmodule/modulestore/django.py b/common/lib/xmodule/xmodule/modulestore/django.py
index a17886c4847..ef4b9df40af 100644
--- a/common/lib/xmodule/xmodule/modulestore/django.py
+++ b/common/lib/xmodule/xmodule/modulestore/django.py
@@ -129,8 +129,12 @@ def loc_mapper():
     global _loc_singleton
     # pylint: disable=W0212
     if _loc_singleton is None:
+        try:
+            loc_cache = get_cache('loc_cache')
+        except InvalidCacheBackendError:
+            loc_cache = get_cache('default')
         # instantiate
-        _loc_singleton = LocMapperStore(get_cache('default'), **settings.DOC_STORE_CONFIG)
+        _loc_singleton = LocMapperStore(loc_cache, **settings.DOC_STORE_CONFIG)
     # inject into split mongo modulestore
     if 'split' in _MODULESTORES:
         _MODULESTORES['split'].loc_mapper = _loc_singleton
diff --git a/lms/envs/dev.py b/lms/envs/dev.py
index bfff68157e1..30053d3da3e 100644
--- a/lms/envs/dev.py
+++ b/lms/envs/dev.py
@@ -85,7 +85,11 @@ CACHES = {
         'LOCATION': '/var/tmp/mongo_metadata_inheritance',
         'TIMEOUT': 300,
         'KEY_FUNCTION': 'util.memcache.safe_key',
-    }
+    },
+    'loc_cache': {
+        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+        'LOCATION': 'edx_location_mem_cache',
+    },
 }
 
 
diff --git a/lms/envs/test.py b/lms/envs/test.py
index 31636f6aad9..52b5b74c90f 100644
--- a/lms/envs/test.py
+++ b/lms/envs/test.py
@@ -165,7 +165,12 @@ CACHES = {
         'LOCATION': '/var/tmp/mongo_metadata_inheritance',
         'TIMEOUT': 300,
         'KEY_FUNCTION': 'util.memcache.safe_key',
-    }
+    },
+    'loc_cache': {
+        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+        'LOCATION': 'edx_location_mem_cache',
+    },
+
 }
 
 # Dummy secret key for dev
-- 
GitLab