Skip to content
Snippets Groups Projects
Unverified Commit 86b762d0 authored by David Ormsbee's avatar David Ormsbee Committed by GitHub
Browse files

Merge pull request #18872 from edx/ormsbee/aurora_discussions_fix

Change access pattern for role/permissions retrieval to address Aurora query optimizer.
parents b0241591 ebbd2627
No related merge requests found
......@@ -145,15 +145,19 @@ def all_permissions_for_user_in_course(user, course_id): # pylint: disable=inva
if course is None:
raise ItemNotFoundError(course_id)
all_roles = {role.name for role in Role.objects.filter(users=user, course_id=course_id)}
permissions = {
permission.name
for permission
in Permission.objects.filter(roles__users=user, roles__course_id=course_id)
if not permission_blacked_out(course, all_roles, permission.name)
}
return permissions
roles = Role.objects.filter(users=user, course_id=course_id)
role_names = {role.name for role in roles}
permission_names = set()
for role in roles:
# Intentional n+1 query pattern to get permissions for each role because
# Aurora's query optimizer can't handle the join proplerly on 30M+ row
# tables (EDUCATOR-3374). Fortunately, there are very few forum roles.
for permission in role.permissions.all():
if not permission_blacked_out(course, role_names, permission.name):
permission_names.add(permission.name)
return permission_names
class ForumsConfig(ConfigurationModel):
......
......@@ -406,7 +406,7 @@ class TestXBlockQueryLoad(SharedModuleStoreTestCase):
# * django_comment_client_role
# * django_comment_client_permission
# * lms_xblock_xblockasidesconfig
num_queries = 3
num_queries = 2
for discussion in discussions:
discussion_xblock = get_module_for_descriptor_internal(
user=user,
......
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