migrations: Fix unnecessary loop in 0602.

This commit is contained in:
Tim Abbott 2024-10-16 22:24:00 -07:00
parent 7a53db8498
commit c4f5cd6552
1 changed files with 14 additions and 23 deletions

View File

@ -3,7 +3,7 @@
from django.db import migrations, transaction from django.db import migrations, transaction
from django.db.backends.base.schema import BaseDatabaseSchemaEditor from django.db.backends.base.schema import BaseDatabaseSchemaEditor
from django.db.migrations.state import StateApps from django.db.migrations.state import StateApps
from django.db.models import Max, Min, OuterRef from django.db.models import Max, OuterRef
def remap_can_manage_all_groups_for_existing_realms( def remap_can_manage_all_groups_for_existing_realms(
@ -11,19 +11,12 @@ def remap_can_manage_all_groups_for_existing_realms(
) -> None: ) -> None:
Realm = apps.get_model("zerver", "Realm") Realm = apps.get_model("zerver", "Realm")
NamedUserGroup = apps.get_model("zerver", "NamedUserGroup") NamedUserGroup = apps.get_model("zerver", "NamedUserGroup")
BATCH_SIZE = 1000
max_id = NamedUserGroup.objects.aggregate(Max("id"))["id__max"] max_id = NamedUserGroup.objects.aggregate(Max("id"))["id__max"]
if max_id is None: if max_id is None:
# Do nothing if there are no user groups on the server. # Do nothing if there are no user groups on the server.
return return
lower_bound = NamedUserGroup.objects.aggregate(Min("id"))["id__min"]
while lower_bound <= max_id:
upper_bound = lower_bound + BATCH_SIZE - 1
print(f"Processing batch {lower_bound} to {upper_bound} for NamedUserGroup")
with transaction.atomic(): with transaction.atomic():
# Since can_manage_group, can_add_members_group, etc. have # Since can_manage_group, can_add_members_group, etc. have
# migrated to the nearest possible value from # migrated to the nearest possible value from
@ -38,8 +31,6 @@ def remap_can_manage_all_groups_for_existing_realms(
).values("pk") ).values("pk")
) )
lower_bound += BATCH_SIZE
class Migration(migrations.Migration): class Migration(migrations.Migration):
atomic = False atomic = False