b/Post/migrations/0008_alter_buildfailure_task_buildfailure_idx_task_lev.py
new file mode 100644
@@ -0,0 +1,20 @@
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('Post', '0007_alter_build_date_alter_build_error_type_and_more'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='buildfailure',
+ name='TASK',
+ field=models.CharField(max_length=750),
+ ),
+ migrations.AddIndex(
+ model_name='buildfailure',
+ index=models.Index(fields=['TASK', 'LEV_DISTANCE'],
name='idx_task_lev'),
+ ),
+ ]
@@ -57,7 +57,7 @@ class Build(models.Model):
super(Build, self).save(*args, **kwargs)
class BuildFailure(models.Model):
- TASK = models.CharField(max_length=1024)
+ TASK = models.CharField(max_length=750)
RECIPE= models.CharField(max_length=250)
RECIPE_VERSION = models.CharField(max_length=200)
ERROR_DETAILS = models.TextField(max_length=int(settings.MAX_UPLOAD_SIZE))
@@ -74,6 +74,11 @@ class BuildFailure(models.Model):
default = 'NOT_VISITED'
)
+ class Meta:
+ indexes = [
+ models.Index(fields=['TASK', 'LEV_DISTANCE'], name='idx_task_lev'),
+ ]
+
def get_similar_fails(self):
if self.LEV_DISTANCE is None:
return BuildFailure.objects.none()
models: Add index to avoid denial of service Requests for /Errors/SimilarTo/ can cause a denial of service since it runs unindexed queries. 1000 UTF-8 characters is too long to index properly. In a decade of production use, our max task length is under 700 characters. Reduce the field to an indexable size and add the needed index. Signed-off-by: Michael Halstead <mhalstead@linuxfoundation.org> --- ...dfailure_task_buildfailure_idx_task_lev.py | 20 +++++++++++++++++++ Post/models.py | 7 ++++++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 Post/migrations/0008_alter_buildfailure_task_buildfailure_idx_task_lev.py