Skip to content

Commit d566337

Browse files
bug(nimbus): Improve performance of NimbusExperiment.computed_enrollment_days (#14075)
Because: - NimbusExperiment.computed_enrollment_days processes several change logs in memory this commit: - moves all the sorting and filtering to the SQL query; and - limits the amount of data returned to Python to only the needful. Fixes #14074
1 parent 227e741 commit d566337

File tree

1 file changed

+10
-10
lines changed
  • experimenter/experimenter/experiments

1 file changed

+10
-10
lines changed

experimenter/experimenter/experiments/models.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,22 +1050,22 @@ def computed_enrollment_days(self):
10501050
return (self._enrollment_end_date - enrollment_start).days
10511051

10521052
if self.is_paused:
1053-
if paused_changelogs := [
1054-
c
1055-
for c in self.changes.all().filter(
1053+
if last_changed_on := (
1054+
self.changes.filter(
10561055
old_status=self.Status.LIVE,
10571056
new_status=self.Status.LIVE,
10581057
new_status_next=None,
10591058
new_publish_status=self.PublishStatus.IDLE,
1059+
experiment_data__isnull=False,
1060+
experiment_data__is_paused=True,
10601061
)
1061-
if c.experiment_data is not None
1062-
and "is_paused" in c.experiment_data
1063-
and c.experiment_data["is_paused"]
1064-
]:
1065-
paused_change = sorted(paused_changelogs, key=lambda c: c.changed_on)[-1]
1066-
self._enrollment_end_date = paused_change.changed_on.date()
1062+
.order_by("changed_on")
1063+
.values_list("changed_on")
1064+
.last()
1065+
):
1066+
self._enrollment_end_date = last_changed_on[0].date()
10671067
self.save()
1068-
return (paused_change.changed_on.date() - enrollment_start).days
1068+
return (self._enrollment_end_date - enrollment_start).days
10691069

10701070
if self.end_date:
10711071
return self.computed_duration_days

0 commit comments

Comments
 (0)