Bläddra i källkod

HUE-6949 [indexer] Cleaner error message when coming from Solr

Romain Rigaux 8 år sedan
förälder
incheckning
62fc869

+ 16 - 8
desktop/libs/dashboard/src/dashboard/api.py

@@ -58,14 +58,7 @@ def search(request):
       else:
         response = get_engine(request.user, collection).query(collection, query, facet)
     except RestException, e:
-      try:
-        message = json.loads(e.message)
-        msg = message['error'].get('msg')
-        response['error'] = msg if msg else message['error']['trace']
-      except Exception, e2:
-        LOG.exception('Failed to extract json message: %s' % force_unicode(e2))
-        LOG.exception('Failed to parse json response: %s' % force_unicode(e))
-        response['error'] = force_unicode(e)
+      response.update(extract_solr_exception_message(e))
     except Exception, e:
       raise PopupException(e, title=_('Error while accessing Solr'))
 
@@ -535,3 +528,18 @@ def get_collections(request):
       result['message'] = force_unicode(e)
 
   return JsonResponse(result)
+
+
+def extract_solr_exception_message(e):
+  response = {}
+
+  try:
+    message = json.loads(e.message)
+    msg = message['error'].get('msg')
+    response['error'] = msg if msg else message['error']['trace']
+  except Exception, e2:
+    LOG.exception('Failed to extract json message: %s' % force_unicode(e2))
+    LOG.exception('Failed to parse json response: %s' % force_unicode(e))
+    response['error'] = force_unicode(e)
+
+  return response

+ 6 - 0
desktop/libs/notebook/src/notebook/decorators.py

@@ -26,7 +26,9 @@ from django.utils.translation import ugettext as _
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.i18n import smart_unicode
+from desktop.lib.rest.http_client import RestException
 from desktop.models import Document2, Document, FilesystemException
+from dashboard.api import extract_solr_exception_message
 
 from notebook.connectors.base import QueryExpired, QueryError, SessionExpired, AuthenticationRequired, OperationTimeout,\
   OperationNotSupported
@@ -108,6 +110,10 @@ def api_error_handler(func):
     except OperationNotSupported, e:
       response['status'] = 5
       response['message'] = e.message
+    except RestException, e:
+      message = extract_solr_exception_message(e)
+      response['status'] = 1
+      response['message'] = message.get('error')
     except Exception, e:
       LOG.exception('Error running %s' % func)
       response['status'] = -1