Browse Source

HUE-2749 [hive] Failure to authenticate to HS2 or Impala using LDAP seems silent

Jenny Kim 10 years ago
parent
commit
a937ec4b2c
3 changed files with 39 additions and 15 deletions
  1. 12 4
      apps/beeswax/src/beeswax/api.py
  2. 13 5
      apps/beeswax/src/beeswax/conf.py
  3. 14 6
      apps/impala/src/impala/conf.py

+ 12 - 4
apps/beeswax/src/beeswax/api.py

@@ -27,6 +27,7 @@ from django.utils.translation import ugettext as _
 from thrift.transport.TTransport import TTransportException
 from desktop.context_processors import get_app_name
 from desktop.lib.django_util import JsonResponse
+from desktop.lib.exceptions import StructuredThriftTransportException
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.i18n import force_unicode
 from desktop.lib.parameterization import substitute_variables
@@ -639,10 +640,17 @@ def describe_table(request, database, table):
 
 def get_query_form(request):
   try:
-    # Get database choices
-    query_server = dbms.get_query_server_config(get_app_name(request))
-    db = dbms.get(request.user, query_server)
-    databases = [(database, database) for database in db.get_databases()]
+    try:
+      # Get database choices
+      query_server = dbms.get_query_server_config(get_app_name(request))
+      db = dbms.get(request.user, query_server)
+      databases = [(database, database) for database in db.get_databases()]
+    except StructuredThriftTransportException, e:
+      # If Thrift exception was due to failed authentication, raise corresponding message
+      if 'TSocket read 0 bytes' in str(e) or 'Error validating the login' in str(e):
+        raise PopupException(_('Failed to authenticate to query server, check authentication configurations.'), detail=e)
+      else:
+        raise e
   except Exception, e:
     raise PopupException(_('Unable to access databases, Query Server or Metastore may be down.'), detail=e)
 

+ 13 - 5
apps/beeswax/src/beeswax/conf.py

@@ -25,6 +25,7 @@ from django.utils.translation import ugettext_lazy as _t, ugettext as _
 from desktop.conf import default_ssl_cacerts, default_ssl_validate, AUTH_PASSWORD as DEFAULT_AUTH_PASSWORD,\
   coerce_password_from_script, AUTH_USERNAME as DEFAULT_AUTH_USERNAME
 from desktop.lib.conf import ConfigSection, Config, coerce_bool
+from desktop.lib.exceptions import StructuredThriftTransportException
 
 from beeswax.settings import NICE_NAME
 
@@ -180,13 +181,20 @@ def config_validator(user):
 
   res = []
   try:
-    if not 'test' in sys.argv: # Avoid tests hanging
-      server = dbms.get(user)
-      server.get_databases()
-  except:
+    try:
+      if not 'test' in sys.argv: # Avoid tests hanging
+        server = dbms.get(user)
+        server.get_databases()
+    except StructuredThriftTransportException, e:
+      if 'Error validating the login' in str(e):
+        msg = 'Failed to authenticate to HiveServer2, check authentication configurations.'
+        LOG.exception(msg)
+        res.append((NICE_NAME, _(msg)))
+      else:
+        raise e
+  except Exception, e:
     msg = "The application won't work without a running HiveServer2."
     LOG.exception(msg)
-
     res.append((NICE_NAME, _(msg)))
 
   try:

+ 14 - 6
apps/impala/src/impala/conf.py

@@ -23,6 +23,7 @@ from django.utils.translation import ugettext_lazy as _t, ugettext as _
 from desktop.conf import default_ssl_cacerts, default_ssl_validate, AUTH_USERNAME as DEFAULT_AUTH_USERNAME,\
   AUTH_PASSWORD as DEFAULT_AUTH_PASSWORD, coerce_password_from_script
 from desktop.lib.conf import ConfigSection, Config, coerce_bool
+from desktop.lib.exceptions import StructuredThriftTransportException
 
 from impala.settings import NICE_NAME
 
@@ -163,14 +164,21 @@ def config_validator(user):
 
   res = []
   try:
-    if not 'test' in sys.argv: # Avoid tests hanging
-      query_server = get_query_server_config(name='impala')
-      server = dbms.get(user, query_server)
-      server.get_databases()
-  except:
+    try:
+      if not 'test' in sys.argv: # Avoid tests hanging
+        query_server = get_query_server_config(name='impala')
+        server = dbms.get(user, query_server)
+        server.get_databases()
+    except StructuredThriftTransportException, ex:
+      if 'TSocket read 0 bytes' in str(ex):  # this message appears when authentication fails
+        msg = "Failed to authenticate to Impalad, check authentication configurations."
+        LOG.exception(msg)
+        res.append((NICE_NAME, _(msg)))
+      else:
+       raise ex
+  except Exception, ex:
     msg = "No available Impalad to send queries to."
     LOG.exception(msg)
-
     res.append((NICE_NAME, _(msg)))
 
   return res