|
|
@@ -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)
|
|
|
|