From 83b588c53cd7904a3f69d09898c47aaea4976d67 Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Tue, 2 Nov 2021 12:45:14 +0100 Subject: [PATCH] TMSS-1124: fetch the subtask's input/output dataproducts and all related properties in one queryset. Major speedup --- SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py index eb80e6ab170..7af1c78862e 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/scheduling.py @@ -311,7 +311,9 @@ class SubtaskViewSet(LOFARViewSet): @action(methods=['get'], detail=True, url_name='input_dataproducts') def input_dataproducts(self, request, pk=None): subtask = get_object_or_404(models.Subtask, pk=pk) - serializer = serializers.DataproductSerializer(subtask.input_dataproducts, many=True, context={'request': request}) + # fetch the subtask's input_dataproducts and all related properties in one queryset. Major speedup. + input_dataproducts = subtask.input_dataproducts.select_related('dataformat', 'datatype', 'specifications_template', 'producer', 'feedback_template', 'sap', 'global_identifier', 'archive_info').prefetch_related('consumers') + serializer = serializers.DataproductSerializer(input_dataproducts, many=True, context={'request': request}) return RestResponse(serializer.data) @@ -321,7 +323,9 @@ class SubtaskViewSet(LOFARViewSet): @action(methods=['get'], detail=True, url_name='output_dataproducts') def output_dataproducts(self, request, pk=None): subtask = get_object_or_404(models.Subtask, pk=pk) - serializer = serializers.DataproductSerializer(subtask.output_dataproducts, many=True, context={'request': request}) + # fetch the subtask's output_dataproducts and all related properties in one queryset. Major speedup. + output_dataproducts = subtask.output_dataproducts.select_related('dataformat', 'datatype', 'specifications_template', 'producer', 'feedback_template', 'sap', 'global_identifier', 'archive_info').prefetch_related('consumers') + serializer = serializers.DataproductSerializer(output_dataproducts, many=True, context={'request': request}) return RestResponse(serializer.data) -- GitLab