mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 16:14:02 +00:00
confirmation: Add database indexes on confirmation fields.
Apparently, we didn't have any database indexes on Confirmation, which meant that on servers with large numbers of users like zulipchat.com, new account registration could spend a ton of time effectively doing a table scan on this table.
This commit is contained in:
37
confirmation/migrations/0007_add_indexes.py
Normal file
37
confirmation/migrations/0007_add_indexes.py
Normal file
@@ -0,0 +1,37 @@
|
||||
# Generated by Django 2.2.10 on 2020-03-27 09:02
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('confirmation', '0006_realmcreationkey_presume_email_valid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='confirmation',
|
||||
name='confirmation_key',
|
||||
field=models.CharField(db_index=True, max_length=40),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='confirmation',
|
||||
name='date_sent',
|
||||
field=models.DateTimeField(db_index=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='confirmation',
|
||||
name='object_id',
|
||||
field=models.PositiveIntegerField(db_index=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='realmcreationkey',
|
||||
name='creation_key',
|
||||
field=models.CharField(db_index=True, max_length=40, verbose_name='activation key'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='confirmation',
|
||||
unique_together={('type', 'confirmation_key')},
|
||||
),
|
||||
]
|
@@ -90,10 +90,10 @@ def confirmation_url(confirmation_key: str, host: str,
|
||||
|
||||
class Confirmation(models.Model):
|
||||
content_type = models.ForeignKey(ContentType, on_delete=CASCADE)
|
||||
object_id = models.PositiveIntegerField() # type: int
|
||||
object_id = models.PositiveIntegerField(db_index=True) # type: int
|
||||
content_object = GenericForeignKey('content_type', 'object_id')
|
||||
date_sent = models.DateTimeField() # type: datetime.datetime
|
||||
confirmation_key = models.CharField(max_length=40) # type: str
|
||||
date_sent = models.DateTimeField(db_index=True) # type: datetime.datetime
|
||||
confirmation_key = models.CharField(max_length=40, db_index=True) # type: str
|
||||
realm = models.ForeignKey(Realm, null=True, on_delete=CASCADE) # type: Optional[Realm]
|
||||
|
||||
# The following list is the set of valid types
|
||||
@@ -110,6 +110,9 @@ class Confirmation(models.Model):
|
||||
def __str__(self) -> str:
|
||||
return '<Confirmation: %s>' % (self.content_object,)
|
||||
|
||||
class Meta:
|
||||
unique_together = ("type", "confirmation_key")
|
||||
|
||||
class ConfirmationType:
|
||||
def __init__(self, url_name: str,
|
||||
validity_in_days: int=settings.CONFIRMATION_LINK_DEFAULT_VALIDITY_DAYS) -> None:
|
||||
@@ -171,7 +174,7 @@ def generate_realm_creation_url(by_admin: bool=False) -> str:
|
||||
kwargs={'creation_key': key}))
|
||||
|
||||
class RealmCreationKey(models.Model):
|
||||
creation_key = models.CharField('activation key', max_length=40)
|
||||
creation_key = models.CharField('activation key', db_index=True, max_length=40)
|
||||
date_created = models.DateTimeField('created', default=timezone_now)
|
||||
|
||||
# True just if we should presume the email address the user enters
|
||||
|
Reference in New Issue
Block a user