Commit e59b650f by Chris Dodge

add an array of courses to not refresh the metadata cache on writes. This is…

add an array of courses to not refresh the metadata cache on writes. This is needed for imports where we are doing bulk updates otherwise, the DB gets thrashed and the import takes too long, timing out the browser
parent eff6f1d1
...@@ -246,6 +246,7 @@ class MongoModuleStore(ModuleStoreBase): ...@@ -246,6 +246,7 @@ class MongoModuleStore(ModuleStoreBase):
self.fs_root = path(fs_root) self.fs_root = path(fs_root)
self.error_tracker = error_tracker self.error_tracker = error_tracker
self.render_template = render_template self.render_template = render_template
self.ignore_write_events_on_courses = []
def get_metadata_inheritance_tree(self, location): def get_metadata_inheritance_tree(self, location):
''' '''
...@@ -329,6 +330,11 @@ class MongoModuleStore(ModuleStoreBase): ...@@ -329,6 +330,11 @@ class MongoModuleStore(ModuleStoreBase):
return tree return tree
def refresh_cached_metadata_inheritance_tree(self, location):
pseudo_course_id = '/'.join([location.org, location.course])
if pseudo_course_id not in self.ignore_write_events_on_courses:
self.get_cached_metadata_inheritance_tree(location, force_refresh = True)
def clear_cached_metadata_inheritance_tree(self, location): def clear_cached_metadata_inheritance_tree(self, location):
key_name = '{0}/{1}'.format(location.org, location.course) key_name = '{0}/{1}'.format(location.org, location.course)
if self.metadata_inheritance_cache is not None: if self.metadata_inheritance_cache is not None:
...@@ -519,7 +525,7 @@ class MongoModuleStore(ModuleStoreBase): ...@@ -519,7 +525,7 @@ class MongoModuleStore(ModuleStoreBase):
raise DuplicateItemError(location) raise DuplicateItemError(location)
# recompute (and update) the metadata inheritance tree which is cached # recompute (and update) the metadata inheritance tree which is cached
self.get_cached_metadata_inheritance_tree(Location(location), force_refresh = True) self.refresh_cached_metadata_inheritance_tree(Location(location))
def get_course_for_item(self, location, depth=0): def get_course_for_item(self, location, depth=0):
''' '''
...@@ -586,7 +592,7 @@ class MongoModuleStore(ModuleStoreBase): ...@@ -586,7 +592,7 @@ class MongoModuleStore(ModuleStoreBase):
self._update_single_item(location, {'definition.children': children}) self._update_single_item(location, {'definition.children': children})
# recompute (and update) the metadata inheritance tree which is cached # recompute (and update) the metadata inheritance tree which is cached
self.get_cached_metadata_inheritance_tree(Location(location), force_refresh = True) self.refresh_cached_metadata_inheritance_tree(Location(location))
def update_metadata(self, location, metadata): def update_metadata(self, location, metadata):
""" """
...@@ -612,7 +618,7 @@ class MongoModuleStore(ModuleStoreBase): ...@@ -612,7 +618,7 @@ class MongoModuleStore(ModuleStoreBase):
self._update_single_item(location, {'metadata': metadata}) self._update_single_item(location, {'metadata': metadata})
# recompute (and update) the metadata inheritance tree which is cached # recompute (and update) the metadata inheritance tree which is cached
self.get_cached_metadata_inheritance_tree(loc, force_refresh = True) self.refresh_cached_metadata_inheritance_tree(loc)
def delete_item(self, location): def delete_item(self, location):
""" """
...@@ -632,7 +638,7 @@ class MongoModuleStore(ModuleStoreBase): ...@@ -632,7 +638,7 @@ class MongoModuleStore(ModuleStoreBase):
self.collection.remove({'_id': Location(location).dict()}) self.collection.remove({'_id': Location(location).dict()})
# recompute (and update) the metadata inheritance tree which is cached # recompute (and update) the metadata inheritance tree which is cached
self.get_cached_metadata_inheritance_tree(Location(location), force_refresh = True) self.refresh_cached_metadata_inheritance_tree(Location(location))
def get_parent_locations(self, location, course_id): def get_parent_locations(self, location, course_id):
......
...@@ -201,6 +201,16 @@ def import_from_xml(store, data_dir, course_dirs=None, ...@@ -201,6 +201,16 @@ def import_from_xml(store, data_dir, course_dirs=None,
course_items = [] course_items = []
for course_id in module_store.modules.keys(): for course_id in module_store.modules.keys():
if target_location_namespace is not None:
pseudo_course_id = '/'.join([target_location_namespace.org, target_location_namespace.course])
else:
course_id_components = course_id.split('/')
pseudo_course_id = '/'.join([course_id_components[0], course_id_components[1]])
# turn off all write signalling while importing as this is a high volume operation
if pseudo_course_id not in store.ignore_write_events_on_courses:
store.ignore_write_events_on_courses.append(pseudo_course_id)
course_data_path = None course_data_path = None
course_location = None course_location = None
...@@ -296,6 +306,12 @@ def import_from_xml(store, data_dir, course_dirs=None, ...@@ -296,6 +306,12 @@ def import_from_xml(store, data_dir, course_dirs=None,
# inherited metadata everywhere. # inherited metadata everywhere.
store.update_metadata(module.location, dict(own_metadata(module))) store.update_metadata(module.location, dict(own_metadata(module)))
# turn back on all write signalling
if pseudo_course_id in store.ignore_write_events_on_courses:
store.ignore_write_events_on_courses.remove(pseudo_course_id)
store.refresh_cached_metadata_inheritance_tree(target_location_namespace if
target_location_namespace is not None else course_location)
return module_store, course_items return module_store, course_items
def remap_namespace(module, target_location_namespace): def remap_namespace(module, target_location_namespace):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment