ソースを参照

HUE-8925 [fb] Add additional error information to user

Jean-Francois Desjeans Gauthier 6 年 前
コミット
b2d0bd1b26

+ 11 - 3
desktop/core/src/desktop/lib/idbroker/client.py

@@ -17,6 +17,7 @@ from __future__ import absolute_import
 
 import logging
 
+from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.idbroker import conf
 from desktop.lib.rest import http_client, resource
 from hadoop.core_site import is_kerberos_enabled
@@ -44,6 +45,7 @@ class IDBroker(object):
       security
     )
 
+
   def __init__(self, user=None, address=None, dt_path=None, path=None, security=None):
     self.user=user
     self.address=address
@@ -69,10 +71,16 @@ class IDBroker(object):
       self._client.set_kerberos_auth()
     elif self.security['type'] == 'basic':
       self._client.set_basic_auth(self.security['params']['username'], self.security['params']['password'])
-    res = self._root.invoke("GET", self.dt_path + _KNOX_TOKEN_API, self._knox_token_params(), allow_redirects=True, log_response=False) # Can't log response because returns credentials
-    return res.get('access_token')
+    try:
+      res = self._root.invoke("GET", self.dt_path + _KNOX_TOKEN_API, self._knox_token_params(), allow_redirects=True, log_response=False) # Can't log response because returns credentials
+      return res.get('access_token')
+    except Exception as e:
+      raise PopupException('Failed to authenticate to IDBroker with error: %s' % e.message)
 
 
   def get_cab(self):
     self._client.set_bearer_auth(self.get_auth_token())
-    return self._root.invoke("GET", self.path + _CAB_API_CREDENTIALS_GLOBAL, allow_redirects=True, log_response=False) # Can't log response because returns credentials
+    try:
+      return self._root.invoke("GET", self.path + _CAB_API_CREDENTIALS_GLOBAL, allow_redirects=True, log_response=False) # Can't log response because returns credentials
+    except Exception as e:
+      raise PopupException('Failed to obtain storage credentials from IDBroker with error: %s' % e.message)

+ 2 - 1
desktop/libs/aws/src/aws/client.py

@@ -213,7 +213,8 @@ class Client(object):
         connection = boto.s3.connect_to_region(self._region,
                                              aws_access_key_id=self._access_key_id,
                                              aws_secret_access_key=self._secret_access_key,
-                                             security_token=self._security_token)
+                                             security_token=self._security_token,
+                                             calling_format=self._calling_format)
       else:
         kwargs.update({'host': 's3.amazonaws.com'})
         connection = boto.s3.connection.S3Connection(**kwargs)

+ 2 - 1
desktop/libs/aws/src/aws/s3/s3fs.py

@@ -170,7 +170,8 @@ class S3FileSystem(object):
         raise S3FileSystemException(_('User is not authorized to access path: "%s"') % path)
       else:
         raise S3FileSystemException(_('Failed to access path "%s": %s') % (path, e.reason))
-
+    except Exception as e: # SSL errors show up here, because they've been remapped in boto
+      raise S3FileSystemException(_('Failed to access path "%s": %s') % (path, e.message))
     if key is None:
       key = self._get_key(path, validate=False)
     return self._stats_key(key)