Exemple #1
0
 def submit(self, test_job):
     try:
         job_id = self.__submit__(test_job.definition)
         return job_id
     except xmlrpc.client.ProtocolError as error:
         raise TemporarySubmissionIssue(str(error))
     except xmlrpc.client.Fault as fault:
         if fault.faultCode // 100 == 5:
             # assume HTTP errors 5xx are temporary issues
             raise TemporarySubmissionIssue(str(fault))
         else:
             raise SubmissionIssue(str(fault))
Exemple #2
0
 def handle_job_submission(self):
     try:
         yield
     except xmlrpc.client.ProtocolError as error:
         raise TemporarySubmissionIssue(self.url_remove_token(str(error)))
     except xmlrpc.client.Fault as fault:
         if fault.faultCode // 100 == 5:
             # assume HTTP errors 5xx are temporary issues
             raise TemporarySubmissionIssue(self.url_remove_token(str(fault)))
         else:
             raise SubmissionIssue(self.url_remove_token(str(fault)))
     except ssl.SSLError as fault:
         raise SubmissionIssue(self.url_remove_token(str(fault)))
Exemple #3
0
 def handle_job_submission(self):
     try:
         yield
     except xmlrpc.client.ProtocolError as error:
         raise TemporarySubmissionIssue(self.url_remove_token(str(error)))
     except xmlrpc.client.Fault as fault:
         if fault.faultCode // 100 == 5 or fault.faultCode == 408:
             # assume HTTP errors 5xx are temporary issues
             # consider 408 as TemporarySubmissionIssue, as it's considered as timeout
             raise TemporarySubmissionIssue(
                 self.url_remove_token(str(fault)))
         else:
             raise SubmissionIssue(self.url_remove_token(str(fault)))
     except ssl.SSLError as fault:
         raise SubmissionIssue(self.url_remove_token(str(fault)))
     except ConnectionRefusedError as fault:
         raise TemporarySubmissionIssue(str(fault))
Exemple #4
0
 def submit(self, test_job):
     try:
         job_id = self.__submit__(test_job.definition)
         test_job.name = self.__lava_job_name(test_job.definition)
         if isinstance(job_id, list):
             return job_id
         return [job_id]
     except xmlrpc.client.ProtocolError as error:
         raise TemporarySubmissionIssue(self.url_remove_token(str(error)))
     except xmlrpc.client.Fault as fault:
         if fault.faultCode // 100 == 5:
             # assume HTTP errors 5xx are temporary issues
             raise TemporarySubmissionIssue(self.url_remove_token(str(fault)))
         else:
             raise SubmissionIssue(self.url_remove_token(str(fault)))
     except ssl.SSLError as fault:
         raise SubmissionIssue(self.url_remove_token(str(fault)))
Exemple #5
0
    def test_submit_temporary_error(self, submit_method, retry):
        exception = TemporarySubmissionIssue("TEMPORARY ERROR")
        retry.return_value = Retry()
        submit_method.side_effect = exception

        with self.assertRaises(Retry):
            submit.apply(args=[self.test_job.id])

        retry.assert_called_with(exc=exception, countdown=3600)
        self.test_job.refresh_from_db()
        self.assertEqual(self.test_job.failure, "TEMPORARY ERROR")
Exemple #6
0
    def submit(self, test_job):
        test_job.name = self.__lava_job_name(test_job.definition)

        with self.handle_job_submission():
            job_id = self.__submit__(test_job.definition)

        # in case LAVA doesn't respond 201 or any of the error
        # codes, the job list might be empty. Raise exception
        # should such condition happen.
        if not job_id:
            raise TemporarySubmissionIssue("LAVA returned empty job ID list")

        if isinstance(job_id, list):
            return job_id
        return [job_id]
Exemple #7
0
    def resubmit(self, test_job):
        with self.handle_job_submission():
            new_job_id_list = self.__resubmit__(test_job.job_id)

        # in case LAVA doesn't respond 201 or any of the error
        # codes, the job list might be empty. Raise exception
        # should such condition happen.
        if not new_job_id_list:
            raise TemporarySubmissionIssue("LAVA returned empty job ID list")

        if isinstance(new_job_id_list, list):
            new_job_id = new_job_id_list[0]
        else:
            new_job_id = new_job_id_list
        new_test_job_name = None
        if test_job.definition is not None:
            new_test_job_name = self.__lava_job_name(test_job.definition)
        new_test_job = TestJob(
            backend=self.data,
            definition=test_job.definition,
            target=test_job.target,
            target_build=test_job.target_build,
            environment=test_job.environment,
            submitted=True,
            job_id=new_job_id,
            resubmitted_count=test_job.resubmitted_count + 1,
            name=new_test_job_name,
            parent_job=test_job,
        )
        test_job.can_resubmit = False
        test_job.save()
        new_test_job.save()
        if isinstance(new_job_id_list, list) and len(new_job_id_list) > 1:
            for job_id in new_job_id_list[1:]:
                new_test_job.pk = None
                new_test_job.job_id = job_id
                new_test_job.save()
        return new_test_job