Revert "EDUCATOR-3374 | Hacky query to fix inline discussions performance."

This reverts commit 4a1caf6c03.
This commit is contained in:
Alex Dusenbery
2018-08-30 14:52:59 -04:00
parent ad5ed57160
commit e707804670
2 changed files with 6 additions and 20 deletions

View File

@@ -145,25 +145,13 @@ def all_permissions_for_user_in_course(user, course_id): # pylint: disable=inva
if course is None:
raise ItemNotFoundError(course_id)
all_roles = {role for role in Role.objects.filter(users=user, course_id=course_id)}
role_names = {role.name for role in all_roles}
# TODO: EDUCATOR-3374
# The `roles__users__roles__in=all_roles` part of this filter is a hack to get the new
# Aurora MySql query planner to properly use the unique index on the roles/users join table.
# Without this hack, the planner uses a unique index on (role_id, user_id) to do lookup
# by user_id only, which is a completely inefficient way to use that index.
permission_queryset = Permission.objects.filter(
roles__users=user,
roles__course_id=course_id,
roles__users__roles__in=all_roles
).distinct()
all_roles = {role.name for role in Role.objects.filter(users=user, course_id=course_id)}
permissions = {
permission.name
for permission
in permission_queryset
if not permission_blacked_out(course, role_names, permission.name)
in Permission.objects.filter(roles__users=user, roles__course_id=course_id)
if not permission_blacked_out(course, all_roles, permission.name)
}
return permissions

View File

@@ -402,13 +402,11 @@ class TestXBlockQueryLoad(SharedModuleStoreTestCase):
discussion_target='Target Discussion',
))
# 2 queries are required to do first discussion xblock render:
# 3 queries are required to do first discussion xblock render:
# * django_comment_client_role
# * django_comment_client_permission
# * lms_xblock_xblockasidesconfig
# If the query for roles returned a non-empty result set, there would be
# an additional query against django_comment_client_permission, but there
# are no roles associated with this test.
num_queries = 2
num_queries = 3
for discussion in discussions:
discussion_xblock = get_module_for_descriptor_internal(
user=user,