diff --git a/airflow/www/views.py b/airflow/www/views.py index 951ed496da646..ed20bc16572f3 100644 --- a/airflow/www/views.py +++ b/airflow/www/views.py @@ -3236,10 +3236,12 @@ def duration(self, dag_id: str, session: Session = NEW_SESSION): if failed_task_instance.duration: fails_totals[dict_key] += failed_task_instance.duration - # we must group any mapped TIs by dag_id, task_id, run_id + # We must group any mapped TIs by dag_id, task_id, run_id + def grouping_key(ti: TaskInstance): + return ti.dag_id, ti.task_id, ti.run_id + mapped_tis = set() - tis_grouped = itertools.groupby(task_instances, lambda x: (x.dag_id, x.task_id, x.run_id)) - for _, group in tis_grouped: + for _, group in itertools.groupby(sorted(task_instances, key=grouping_key), key=grouping_key): tis = list(group) duration = sum(x.duration for x in tis if x.duration) if duration: