From eea7a5fbbd513eeaac06239bb7ce5f754e4a668c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20K=C3=BCnsem=C3=B6ller?= <jkuensem@physik.uni-bielefeld.de> Date: Mon, 8 Mar 2021 20:02:07 +0100 Subject: [PATCH] TMSS-568: Fix task blueprint references on outputs in existing tests --- SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py | 14 +++++----- SAS/TMSS/backend/test/t_scheduling.py | 27 ++++++++++++------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py b/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py index 71b949d0c02..ba3e07841b8 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/subtasks.py @@ -299,7 +299,6 @@ def create_observation_control_subtask_from_task_blueprint(task_blueprint: TaskB # an observation has no input, it just produces output data subtask_output = SubtaskOutput.objects.create(subtask=subtask, task_blueprint=task_blueprint) - logger.warning("######## created subtaskoutput id=%s for tb=%s" % (subtask_output.id, task_blueprint.name)) # step 3: set state to DEFINED, unless we have a target obs with a related parallel calibrator obs defined = True @@ -1028,20 +1027,21 @@ def schedule_observation_subtask(observation_subtask: Subtask): # select correct output for each pointing based on name subtask_output_dict = {} + for task_blueprint in observation_subtask.task_blueprints.all(): output = observation_subtask.outputs.filter(task_blueprint=task_blueprint).first() - logger.warning('########### tb=%s | output=%s' % (task_blueprint.name, output)) if not output: - # todo: Do not fall back. But why don't outputs alsways match the task blueprints - output = observation_subtask.outputs.first() - #raise Exception('####### %s | %s' % (observation_subtask.task_blueprints.all(), [out.task_blueprint for out in observation_subtask.outputs.all()])) + raise SubtaskSchedulingException('Cannot schedule subtask id=%s because it is missing the output for ' + 'task_blueprint id=%s (subtask has associated task_blueprints=%s, but ' + 'has outputs for task_blueprint=%s' % (observation_subtask.id, + task_blueprint.id, + [(tb.id, tb.specifications_template.type) for tb in observation_subtask.task_blueprints.all()], + [(out.task_blueprint.id, out.task_blueprint.specifications_template.type) for out in observation_subtask.outputs.all()])) if 'SAPs' in task_blueprint.specifications_doc: # target for sap in task_blueprint.specifications_doc['SAPs']: - logger.warning('########### tb=%s | output=%s | pointing=%s' % (task_blueprint.name, output, sap['name'])) subtask_output_dict[sap['name']] = output if 'pointing' in task_blueprint.specifications_doc: # calibrator subtask_output_dict[task_blueprint.specifications_doc['name']] = output - logger.warning('########### tb=%s | output=%s | pointing=%s' % (task_blueprint.name, output, task_blueprint.specifications_doc['name'])) for sap_nr, pointing in enumerate(specifications_doc['stations']['digital_pointings']): if pointing['name'] in subtask_output_dict: diff --git a/SAS/TMSS/backend/test/t_scheduling.py b/SAS/TMSS/backend/test/t_scheduling.py index 99c3555396c..ebc846edc6c 100755 --- a/SAS/TMSS/backend/test/t_scheduling.py +++ b/SAS/TMSS/backend/test/t_scheduling.py @@ -129,7 +129,8 @@ class SchedulingTest(unittest.TestCase): task_blueprint_urls=[task_blueprint['url']]) subtask = test_data_creator.post_data_and_get_response_as_json_object(subtask_data, '/subtask/') subtask_id = subtask['id'] - test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url']), '/subtask_output/') + test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url'], + task_blueprint_url=task_blueprint['url']), '/subtask_output/') client.set_subtask_status(subtask_id, 'defined') subtask = client.schedule_subtask(subtask_id) @@ -160,7 +161,8 @@ class SchedulingTest(unittest.TestCase): task_blueprint_urls=[task_blueprint['url']]) subtask = test_data_creator.post_data_and_get_response_as_json_object(subtask_data, '/subtask/') subtask_id = subtask['id'] - test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url']), '/subtask_output/') + test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url'], + task_blueprint_url=task_blueprint['url']), '/subtask_output/') client.set_subtask_status(subtask_id, 'defined') @@ -197,7 +199,8 @@ class SchedulingTest(unittest.TestCase): task_blueprint_urls=[task_blueprint['url']]) subtask = test_data_creator.post_data_and_get_response_as_json_object(subtask_data, '/subtask/') subtask_id = subtask['id'] - test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url']), '/subtask_output/') + test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url'], + task_blueprint_url=task_blueprint['url']), '/subtask_output/') client.set_subtask_status(subtask_id, 'defined') @@ -233,7 +236,8 @@ class SchedulingTest(unittest.TestCase): task_blueprint_urls=[task_blueprint['url']]) subtask = test_data_creator.post_data_and_get_response_as_json_object(subtask_data, '/subtask/') subtask_id = subtask['id'] - test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url']), + test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url'], + task_blueprint_url=task_blueprint['url']), '/subtask_output/') client.set_subtask_status(subtask_id, 'defined') @@ -258,7 +262,8 @@ class SchedulingTest(unittest.TestCase): cluster_url=cluster_url, task_blueprint_urls=[obs_task_blueprint['url']]) obs_subtask = test_data_creator.post_data_and_get_response_as_json_object(obs_subtask_data, '/subtask/') - obs_subtask_output_url = test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=obs_subtask['url']), '/subtask_output/') + obs_subtask_output_url = test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=obs_subtask['url'], + task_blueprint_url=obs_task_blueprint['url']), '/subtask_output/') test_data_creator.post_data_and_get_url(test_data_creator.Dataproduct(filename="L%s_SB000.MS"%obs_subtask['id'], subtask_output_url=obs_subtask_output_url), '/dataproduct/') @@ -277,7 +282,8 @@ class SchedulingTest(unittest.TestCase): # ...and connect it to the observation test_data_creator.post_data_and_get_url(test_data_creator.SubtaskInput(subtask_url=pipe_subtask['url'], subtask_output_url=obs_subtask_output_url), '/subtask_input/') - test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=pipe_subtask['url']), '/subtask_output/') + test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=pipe_subtask['url'], + task_blueprint_url=pipe_task_blueprint['url']), '/subtask_output/') for predecessor in client.get_subtask_predecessors(pipe_subtask['id']): client.set_subtask_status(predecessor['id'], 'finished') @@ -302,7 +308,8 @@ class SchedulingTest(unittest.TestCase): cluster_url=cluster_url, task_blueprint_urls=[test_data_creator.post_data_and_get_url(test_data_creator.TaskBlueprint(), '/task_blueprint/')]) obs_subtask = test_data_creator.post_data_and_get_response_as_json_object(obs_subtask_data, '/subtask/') - obs_subtask_output_url = test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=obs_subtask['url']), '/subtask_output/') + obs_subtask_output_url = test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=obs_subtask['url'], + task_blueprint_url=obs_subtask['task_blueprints'][0]), '/subtask_output/') test_data_creator.post_data_and_get_url(test_data_creator.Dataproduct(filename="L%s_SB000.MS"%obs_subtask['id'], subtask_output_url=obs_subtask_output_url), '/dataproduct/') @@ -318,7 +325,8 @@ class SchedulingTest(unittest.TestCase): # ...and connect it to the observation test_data_creator.post_data_and_get_url(test_data_creator.SubtaskInput(subtask_url=ingest_subtask['url'], subtask_output_url=obs_subtask_output_url), '/subtask_input/') - test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=ingest_subtask['url']), '/subtask_output/') + test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=ingest_subtask['url'], + task_blueprint_url=obs_subtask['task_blueprints'][0]), '/subtask_output/') # todo: correct to link this to the obs? for predecessor in client.get_subtask_predecessors(ingest_subtask['id']): client.set_subtask_status(predecessor['id'], 'finished') @@ -536,7 +544,8 @@ class SAPTest(unittest.TestCase): stop_time=datetime.utcnow() + timedelta(minutes=15)) subtask = test_data_creator.post_data_and_get_response_as_json_object(subtask_data, '/subtask/') subtask_id = subtask['id'] - test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url']), + test_data_creator.post_data_and_get_url(test_data_creator.SubtaskOutput(subtask_url=subtask['url'], + task_blueprint_url=task_blueprint['url']), '/subtask_output/') subtask_model = models.Subtask.objects.get(id=subtask_id) -- GitLab