diff --git a/kernelci/api/helper.py b/kernelci/api/helper.py index 34afaba476..a5ed4aff35 100644 --- a/kernelci/api/helper.py +++ b/kernelci/api/helper.py @@ -130,7 +130,7 @@ def receive_event_node(self, sub_id): continue if all(self.pubsub_event_filter(sub_id, obj) for obj in [node, event]): - return node, event.get('is_hierarchy') + return node, event.get('is_hierarchy'), event.get('is_retry') def _find_container(self, field, node): """ @@ -441,7 +441,7 @@ def _is_job_filtered(self, node): return False def create_job_node(self, job_config, input_node, - runtime=None, platform=None): + runtime=None, platform=None, retry_counter=0): """Create a new job node based on input and configuration""" jobfilter = input_node.get('jobfilter') platform_filter = input_node.get('platform_filter') @@ -459,6 +459,7 @@ def create_job_node(self, job_config, input_node, 'data': { 'kernel_revision': input_node['data']['kernel_revision'], }, + 'retry_counter': retry_counter, } if jobfilter: job_node['jobfilter'] = jobfilter diff --git a/kernelci/api/models.py b/kernelci/api/models.py index 1276463886..dbdef01ba9 100644 --- a/kernelci/api/models.py +++ b/kernelci/api/models.py @@ -269,6 +269,10 @@ class Node(DatabaseModel): description="Flag to indicate if the node was processed by KCIDB-Bridge", default=False ) + retry_counter: int = Field( + default=0, + description="Number of times the job has retried" + ) OBJECT_ID_FIELDS: ClassVar[list] = ['parent'] TIMESTAMP_FIELDS: ClassVar[list] = ['created', 'updated', 'timeout', 'holdoff'] diff --git a/tests/api/test_api.py b/tests/api/test_api.py index d7a394b136..d993bc0a51 100644 --- a/tests/api/test_api.py +++ b/tests/api/test_api.py @@ -207,7 +207,7 @@ def test_receive_event_node(get_api_config, mock_receive_event, "op": "created" }, ) - resp, _ = helper.receive_event_node(sub_id=sub_id) + resp, _, _ = helper.receive_event_node(sub_id=sub_id) assert resp.keys() == { 'id', 'artifacts',