def test_run_job_handles_exceptions(self, runjob, job_ex_upd): runjob.side_effect = ex.SwiftClientException("Unauthorised") job, job_exec = u.create_job_exec(edp.JOB_TYPE_PIG) job_manager.run_job(job_exec.id) self.assertEqual(1, job_ex_upd.call_count) new_status = job_ex_upd.call_args[0][2]["info"]["status"] self.assertEqual(edp.JOB_STATUS_FAILED, new_status)
def get_raw_data(job_binary, proxy_configs=None): conn_kwargs = {} if proxy_configs: conn_kwargs.update(username=proxy_configs.get('proxy_username'), password=proxy_configs.get('proxy_password'), trust_id=proxy_configs.get('proxy_trust_id')) else: conn_kwargs.update(username=job_binary.extra.get('user'), password=job_binary.extra.get('password')) conn = sw.client(**conn_kwargs) if not (job_binary.url.startswith(su.SWIFT_INTERNAL_PREFIX)): # This should have been guaranteed already, # but we'll check just in case. raise ex.BadJobBinaryException( _("Url for binary in internal swift must start with %s") % su.SWIFT_INTERNAL_PREFIX) names = job_binary.url[job_binary.url.index("://") + 3:].split("/", 1) if len(names) == 1: # a container has been requested, this is currently unsupported raise ex.BadJobBinaryException( _('Url for binary in internal swift must specify an object not ' 'a container')) else: container, obj = names # if container name has '.sahara' suffix we need to strip it container = _strip_sahara_suffix(container) try: # First check the size headers = conn.head_object(container, obj) total_KB = int(headers.get('content-length', 0)) / 1024.0 if total_KB > CONF.job_binary_max_KB: raise ex.DataTooBigException( round(total_KB, 1), CONF.job_binary_max_KB, _("Size of swift object (%(size)sKB) is greater " "than maximum (%(maximum)sKB)")) headers, body = conn.get_object(container, obj) except swiftclient.ClientException as e: raise ex.SwiftClientException(six.text_type(e)) return body
def _get_raw_data(self, job_binary, conn): names = self._get_names_from_url(job_binary.url) container, obj = names # if container name has '.sahara' suffix we need to strip it if container.endswith(su.SWIFT_URL_SUFFIX): container = container[:-len(su.SWIFT_URL_SUFFIX)] try: # First check the size headers = conn.head_object(container, obj) total_KB = int(headers.get('content-length', 0)) / 1024.0 if total_KB > CONF.job_binary_max_KB: raise ex.DataTooBigException( round(total_KB, 1), CONF.job_binary_max_KB, _("Size of swift object (%(size)sKB) is greater " "than maximum (%(maximum)sKB)")) headers, body = conn.get_object(container, obj) except swiftclient.ClientException as e: raise ex.SwiftClientException(six.text_type(e)) return body
def get_raw_data(context, job_binary, proxy_configs=None): if proxy_configs: conn = _get_conn_for_proxy_user(proxy_configs) else: user = job_binary.extra["user"] password = job_binary.extra["password"] conn = _get_conn(user, password) if not (job_binary.url.startswith(su.SWIFT_INTERNAL_PREFIX)): # This should have been guaranteed already, # but we'll check just in case. raise ex.BadJobBinaryException( _("Url for binary in internal swift must start with %s") % su.SWIFT_INTERNAL_PREFIX) names = job_binary.url[job_binary.url.index("://") + 3:].split("/", 1) if len(names) == 1: # We are getting a whole container, return as a dictionary. container = names[0] # if container name has '.sahara' suffix we need to strip it container = _strip_sahara_suffix(container) # First check the size... try: headers = conn.head_container(container) total_KB = int(headers.get('x-container-bytes-used', 0)) / 1024.0 if total_KB > CONF.job_binary_max_KB: raise ex.DataTooBigException( round(total_KB, 1), CONF.job_binary_max_KB, _("Size of swift container (%(size)sKB) is greater " "than maximum (%(maximum)sKB)")) body = {} headers, objects = conn.get_container(container) for item in objects: headers, obj = conn.get_object(container, item["name"]) body[item["name"]] = obj except swiftclient.ClientException as e: raise ex.SwiftClientException(six.text_type(e)) else: container, obj = names # if container name has '.sahara' suffix we need to strip it container = _strip_sahara_suffix(container) try: # First check the size headers = conn.head_object(container, obj) total_KB = int(headers.get('content-length', 0)) / 1024.0 if total_KB > CONF.job_binary_max_KB: raise ex.DataTooBigException( round(total_KB, 1), CONF.job_binary_max_KB, _("Size of swift object (%(size)sKB) is greater " "than maximum (%(maximum)sKB)")) headers, body = conn.get_object(container, obj) except swiftclient.ClientException as e: raise ex.SwiftClientException(six.text_type(e)) return body