groups: Use realm_for_sharding for limiting NamedUserGroup queries.

For get and filter queries of NamedUserGroup, realm_for_sharding
field is used instead of realm field, as directly using
realm_for_sharding field on NamedUserGroup makes the query faster
than using realm present on the base UserGroup table.
This commit is contained in:
Sahil Batra
2025-09-10 12:54:33 +05:30
committed by Tim Abbott
parent d4d7a8fe2a
commit 764f4aa2e0
42 changed files with 573 additions and 436 deletions

View File

@@ -156,7 +156,9 @@ class StreamSetupTest(ZulipTestCase):
admin = self.example_user("iago")
realm = admin.realm
hamletcharacters_group = NamedUserGroup.objects.get(name="hamletcharacters", realm=realm)
hamletcharacters_group = NamedUserGroup.objects.get(
name="hamletcharacters", realm_for_sharding=realm
)
test_group = check_add_user_group(realm, "test", [admin], acting_user=admin)
user_groups = [hamletcharacters_group, test_group]
@@ -791,7 +793,7 @@ class InviteUserTest(InviteUserBase):
self.assertEqual(realm.can_invite_users_group.named_user_group.name, SystemGroups.MEMBERS)
nobody_group = NamedUserGroup.objects.get(
name=SystemGroups.NOBODY, realm=realm, is_system_group=True
name=SystemGroups.NOBODY, realm_for_sharding=realm, is_system_group=True
)
test_group = check_add_user_group(
realm,
@@ -803,7 +805,9 @@ class InviteUserTest(InviteUserBase):
"can_add_members_group": nobody_group,
},
)
hamletcharacters_group = NamedUserGroup.objects.get(name="hamletcharacters", realm=realm)
hamletcharacters_group = NamedUserGroup.objects.get(
name="hamletcharacters", realm_for_sharding=realm
)
# Initialize settings with nobody allowed to add members or manage
# the group.
@@ -835,7 +839,7 @@ class InviteUserTest(InviteUserBase):
# Test that user having permission to manage all groups can
# add user to groups through invitation.
owners_group = NamedUserGroup.objects.get(
name=SystemGroups.OWNERS, realm=realm, is_system_group=True
name=SystemGroups.OWNERS, realm_for_sharding=realm, is_system_group=True
)
do_change_realm_permission_group_setting(
realm,
@@ -857,7 +861,7 @@ class InviteUserTest(InviteUserBase):
# Check that user does not have permission to add user to system groups
# even when having permission to manage all groups.
moderators_group = NamedUserGroup.objects.get(
name=SystemGroups.MODERATORS, realm=realm, is_system_group=True
name=SystemGroups.MODERATORS, realm_for_sharding=realm, is_system_group=True
)
result = self.invite(invitee, [], group_ids=[moderators_group.id])
self.assert_json_error(result, "Insufficient permission")
@@ -1016,13 +1020,13 @@ class InviteUserTest(InviteUserBase):
self.check_user_subscribed_only_to_streams("test1", {denmark, sandbox, verona, zulip})
admins_group = NamedUserGroup.objects.get(
name=SystemGroups.ADMINISTRATORS, realm=realm, is_system_group=True
name=SystemGroups.ADMINISTRATORS, realm_for_sharding=realm, is_system_group=True
)
nobody_group = NamedUserGroup.objects.get(
name=SystemGroups.NOBODY, realm=realm, is_system_group=True
name=SystemGroups.NOBODY, realm_for_sharding=realm, is_system_group=True
)
members_group = NamedUserGroup.objects.get(
name=SystemGroups.MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.MEMBERS, realm_for_sharding=realm, is_system_group=True
)
do_change_stream_group_based_setting(
@@ -1098,19 +1102,19 @@ class InviteUserTest(InviteUserBase):
realm = get_realm("zulip")
administrators_system_group = NamedUserGroup.objects.get(
name=SystemGroups.ADMINISTRATORS, realm=realm, is_system_group=True
name=SystemGroups.ADMINISTRATORS, realm_for_sharding=realm, is_system_group=True
)
moderators_system_group = NamedUserGroup.objects.get(
name=SystemGroups.MODERATORS, realm=realm, is_system_group=True
name=SystemGroups.MODERATORS, realm_for_sharding=realm, is_system_group=True
)
full_members_system_group = NamedUserGroup.objects.get(
name=SystemGroups.FULL_MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.FULL_MEMBERS, realm_for_sharding=realm, is_system_group=True
)
members_system_group = NamedUserGroup.objects.get(
name=SystemGroups.MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.MEMBERS, realm_for_sharding=realm, is_system_group=True
)
nobody_system_group = NamedUserGroup.objects.get(
name=SystemGroups.NOBODY, realm=realm, is_system_group=True
name=SystemGroups.NOBODY, realm_for_sharding=realm, is_system_group=True
)
do_change_realm_permission_group_setting(
@@ -1706,10 +1710,10 @@ so we didn't send them an invitation. We did send invitations to everyone else!"
def test_invite_without_permission_to_subscribe_others(self) -> None:
realm = get_realm("zulip")
members_group = NamedUserGroup.objects.get(
name=SystemGroups.MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.MEMBERS, realm_for_sharding=realm, is_system_group=True
)
admins_group = NamedUserGroup.objects.get(
name=SystemGroups.ADMINISTRATORS, realm=realm, is_system_group=True
name=SystemGroups.ADMINISTRATORS, realm_for_sharding=realm, is_system_group=True
)
do_change_realm_permission_group_setting(
realm, "can_add_subscribers_group", admins_group, acting_user=None
@@ -3069,7 +3073,7 @@ class MultiuseInviteTest(ZulipTestCase):
self.login("hamlet")
realm = get_realm("zulip")
members_group = NamedUserGroup.objects.get(
name=SystemGroups.MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.MEMBERS, realm_for_sharding=realm, is_system_group=True
)
welcome_message_custom_text = "Welcome Bot custom message."
realm_welcome_message_custom_text = "Realm's Welcome Bot message."
@@ -3445,13 +3449,13 @@ class MultiuseInviteTest(ZulipTestCase):
def test_multiuse_invite_without_permission_to_subscribe_others(self) -> None:
realm = get_realm("zulip")
members_group = NamedUserGroup.objects.get(
name=SystemGroups.MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.MEMBERS, realm_for_sharding=realm, is_system_group=True
)
do_change_realm_permission_group_setting(
realm, "create_multiuse_invite_group", members_group, acting_user=None
)
admins_group = NamedUserGroup.objects.get(
name=SystemGroups.ADMINISTRATORS, realm=realm, is_system_group=True
name=SystemGroups.ADMINISTRATORS, realm_for_sharding=realm, is_system_group=True
)
do_change_realm_permission_group_setting(
realm, "can_add_subscribers_group", admins_group, acting_user=None
@@ -3514,14 +3518,14 @@ class MultiuseInviteTest(ZulipTestCase):
realm = hamlet.realm
# All users except guests have permission to create multiuse invite.
members_group = NamedUserGroup.objects.get(
name=SystemGroups.MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.MEMBERS, realm_for_sharding=realm, is_system_group=True
)
do_change_realm_permission_group_setting(
realm, "create_multiuse_invite_group", members_group, acting_user=None
)
nobody_group = NamedUserGroup.objects.get(
name=SystemGroups.NOBODY, realm=realm, is_system_group=True
name=SystemGroups.NOBODY, realm_for_sharding=realm, is_system_group=True
)
test_group = check_add_user_group(
realm,
@@ -3533,7 +3537,9 @@ class MultiuseInviteTest(ZulipTestCase):
"can_add_members_group": nobody_group,
},
)
hamletcharacters_group = NamedUserGroup.objects.get(name="hamletcharacters", realm=realm)
hamletcharacters_group = NamedUserGroup.objects.get(
name="hamletcharacters", realm_for_sharding=realm
)
def check_create_multiuse_invite(
user: str, group_ids: list[int], error_msg: str | None = None
@@ -3579,7 +3585,7 @@ class MultiuseInviteTest(ZulipTestCase):
# Test that user having permission to manage all groups can
# add users to groups through invitation.
owners_group = NamedUserGroup.objects.get(
name=SystemGroups.OWNERS, realm=realm, is_system_group=True
name=SystemGroups.OWNERS, realm_for_sharding=realm, is_system_group=True
)
do_change_realm_permission_group_setting(
realm,
@@ -3598,7 +3604,7 @@ class MultiuseInviteTest(ZulipTestCase):
# Check that user does not have permission to add user to system groups
# even when having permission to manage all groups.
moderators_group = NamedUserGroup.objects.get(
name=SystemGroups.MODERATORS, realm=realm, is_system_group=True
name=SystemGroups.MODERATORS, realm_for_sharding=realm, is_system_group=True
)
check_create_multiuse_invite("desdemona", [moderators_group.id], "Insufficient permission")
check_create_multiuse_invite("desdemona", [test_group.id, hamletcharacters_group.id])
@@ -3637,10 +3643,10 @@ class MultiuseInviteTest(ZulipTestCase):
def test_create_multiuse_invite_group_setting(self) -> None:
realm = get_realm("zulip")
full_members_system_group = NamedUserGroup.objects.get(
name=SystemGroups.FULL_MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.FULL_MEMBERS, realm_for_sharding=realm, is_system_group=True
)
nobody_system_group = NamedUserGroup.objects.get(
name=SystemGroups.NOBODY, realm=realm, is_system_group=True
name=SystemGroups.NOBODY, realm_for_sharding=realm, is_system_group=True
)
# Default value of create_multiuse_invite_group is administrators
@@ -3672,7 +3678,7 @@ class MultiuseInviteTest(ZulipTestCase):
def test_only_owner_can_change_create_multiuse_invite_group(self) -> None:
realm = get_realm("zulip")
full_members_system_group = NamedUserGroup.objects.get(
name=SystemGroups.FULL_MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.FULL_MEMBERS, realm_for_sharding=realm, is_system_group=True
)
self.login("iago")
@@ -3743,7 +3749,7 @@ class MultiuseInviteTest(ZulipTestCase):
def test_multiuse_link_for_inviting_as_admin(self) -> None:
realm = get_realm("zulip")
full_members_system_group = NamedUserGroup.objects.get(
name=SystemGroups.FULL_MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.FULL_MEMBERS, realm_for_sharding=realm, is_system_group=True
)
do_change_realm_permission_group_setting(
@@ -3774,7 +3780,7 @@ class MultiuseInviteTest(ZulipTestCase):
def test_multiuse_link_for_inviting_as_moderator(self) -> None:
realm = get_realm("zulip")
full_members_system_group = NamedUserGroup.objects.get(
name=SystemGroups.FULL_MEMBERS, realm=realm, is_system_group=True
name=SystemGroups.FULL_MEMBERS, realm_for_sharding=realm, is_system_group=True
)
do_change_realm_permission_group_setting(