Improve performance of forum views

Avoid recomputing course module information for every thread, which
should dramatically improve the performance of high-percentile latency
queries.

JIRA: FOR-250
This commit is contained in:
Greg Price
2013-10-23 18:19:33 -04:00
parent a7d769dfea
commit e6ecb6ecfe
5 changed files with 51 additions and 47 deletions

View File

@@ -83,17 +83,29 @@ class CoursewareContextTestCase(ModuleStoreTestCase):
discussion_target="Discussion 2"
)
def test_empty(self):
utils.add_courseware_context([], self.course)
def test_missing_commentable_id(self):
thread = {"commentable_id": "non-inline"}
self.assertEqual(utils.get_courseware_context(thread, self.course), None)
orig = {"commentable_id": "non-inline"}
modified = dict(orig)
utils.add_courseware_context([modified], self.course)
self.assertEqual(modified, orig)
def test_basic(self):
def test_discussion(discussion, expected_title):
thread = {"commentable_id": discussion.discussion_id}
courseware_context = utils.get_courseware_context(thread, self.course)
self.assertEqual(set(courseware_context.keys()), set(["courseware_url", "courseware_title"]))
threads = [
{"commentable_id": self.discussion1.discussion_id},
{"commentable_id": self.discussion2.discussion_id}
]
utils.add_courseware_context(threads, self.course)
def assertThreadCorrect(thread, discussion, expected_title): #pylint: disable=C0103
self.assertEqual(
courseware_context["courseware_url"],
set(thread.keys()),
set(["commentable_id", "courseware_url", "courseware_title"])
)
self.assertEqual(
thread.get("courseware_url"),
reverse(
"jump_to",
kwargs={
@@ -102,13 +114,10 @@ class CoursewareContextTestCase(ModuleStoreTestCase):
}
)
)
self.assertEqual(
courseware_context["courseware_title"],
expected_title
)
self.assertEqual(thread.get("courseware_title"), expected_title)
test_discussion(self.discussion1, "Chapter / Discussion 1")
test_discussion(self.discussion2, "Subsection / Discussion 2")
assertThreadCorrect(threads[0], self.discussion1, "Chapter / Discussion 1")
assertThreadCorrect(threads[1], self.discussion2, "Subsection / Discussion 2")
@override_settings(MODULESTORE=TEST_DATA_MONGO_MODULESTORE)