|
11 | 11 | from django.core.validators import MaxValueValidator
|
12 | 12 | from django.db import models
|
13 | 13 | from django.db.models import signals
|
| 14 | +from django.db.models.indexes import Index |
14 | 15 | from django.utils.translation import ugettext_lazy as _
|
15 | 16 |
|
16 | 17 | from . import managers, validators
|
@@ -40,6 +41,23 @@ def cronexp(field):
|
40 | 41 | return field and str(field).replace(' ', '') or '*'
|
41 | 42 |
|
42 | 43 |
|
| 44 | +class CeleryMySQLIndex(Index): |
| 45 | + def create_sql(self, model, schema_editor, using=''): |
| 46 | + sql_create_index = 'CREATE INDEX %(name)s ON %(table)s (%(columns)s(%(size)d))%(extra)s' |
| 47 | + sql_parameters = self.get_sql_create_template_values( |
| 48 | + model, |
| 49 | + schema_editor, |
| 50 | + using |
| 51 | + ) |
| 52 | + sql_parameters['size'] = getattr( |
| 53 | + settings, |
| 54 | + 'DJANGO_CELERY_BEAT_NAME_MAX_LENGTH', |
| 55 | + 200 |
| 56 | + ) |
| 57 | + sql = sql_create_index % sql_parameters |
| 58 | + return sql |
| 59 | + |
| 60 | + |
43 | 61 | @python_2_unicode_compatible
|
44 | 62 | class SolarSchedule(models.Model):
|
45 | 63 | """Schedule following astronomical patterns."""
|
@@ -323,6 +341,7 @@ class Meta:
|
323 | 341 |
|
324 | 342 | verbose_name = _('periodic task')
|
325 | 343 | verbose_name_plural = _('periodic tasks')
|
| 344 | + indexes = [CeleryMySQLIndex(fields=['name'])] |
326 | 345 |
|
327 | 346 | def validate_unique(self, *args, **kwargs):
|
328 | 347 | super(PeriodicTask, self).validate_unique(*args, **kwargs)
|
|
0 commit comments