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))
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)))
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))
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)))
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")
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]
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