Browse Source

HUE-8591 [cluster] Prevent red error popups

Romain Rigaux 7 years ago
parent
commit
6a945fcd15

+ 4 - 1
apps/beeswax/src/beeswax/server/dbms.py

@@ -95,7 +95,10 @@ def get_query_server_config(name='beeswax', server=None, cluster=None):
     clusters = [_cluster for _cluster in api.list_clusters()['clusters'] if _cluster['status'] == 'ONLINE']
     clusters = [_cluster for _cluster in api.list_clusters()['clusters'] if _cluster['status'] == 'ONLINE']
     cluster_config = {'server_host': clusters[0]['coordinatorEndpoint']['publicHost'], 'name': clusters[0]['name']}
     cluster_config = {'server_host': clusters[0]['coordinatorEndpoint']['publicHost'], 'name': clusters[0]['name']}
 
 
-  LOG.debug("Query cluster mapping %s: %s %s" % (cluster, repr(cluster_config), socket.gethostbyaddr(cluster_config['server_host'])))
+  try:
+    LOG.debug("Query cluster mapping %s: %s %s" % (cluster, repr(cluster_config), socket.gethostbyaddr(cluster_config['server_host'])))
+  except Exception, e:
+    LOG.debug('Failed to get cluster %s host: %s "%s"' % (cluster, e, cluster_config['server_host']))
 
 
 
 
   if name == 'impala':
   if name == 'impala':

+ 5 - 3
apps/beeswax/src/beeswax/server/hive_server2_lib.py

@@ -486,8 +486,8 @@ class HiveServerClient:
 
 
     use_sasl, mechanism, kerberos_principal_short_name, impersonation_enabled, auth_username, auth_password = self.get_security()
     use_sasl, mechanism, kerberos_principal_short_name, impersonation_enabled, auth_username, auth_password = self.get_security()
     LOG.info(
     LOG.info(
-        '%s: use_sasl=%s, mechanism=%s, kerberos_principal_short_name=%s, impersonation_enabled=%s, auth_username=%s' % (
-        self.query_server['server_name'], use_sasl, mechanism, kerberos_principal_short_name, impersonation_enabled, auth_username)
+        '%s: server_host=%s, use_sasl=%s, mechanism=%s, kerberos_principal_short_name=%s, impersonation_enabled=%s, auth_username=%s' % (
+        self.query_server['server_name'], self.query_server['server_host'], use_sasl, mechanism, kerberos_principal_short_name, impersonation_enabled, auth_username)
     )
     )
 
 
     self.use_sasl = use_sasl
     self.use_sasl = use_sasl
@@ -523,6 +523,8 @@ class HiveServerClient:
       from ImpalaService import ImpalaHiveServer2Service
       from ImpalaService import ImpalaHiveServer2Service
       thrift_class = ImpalaHiveServer2Service
       thrift_class = ImpalaHiveServer2Service
 
 
+    LOG.debug('Using host_name %(server_host)s' % query_server)
+
     self._client = thrift_util.get_client(
     self._client = thrift_util.get_client(
         thrift_class.Client,
         thrift_class.Client,
         query_server['server_host'],
         query_server['server_host'],
@@ -604,7 +606,7 @@ class HiveServerClient:
 
 
     req = TOpenSessionReq(**kwargs)
     req = TOpenSessionReq(**kwargs)
     res = self._client.OpenSession(req)
     res = self._client.OpenSession(req)
-    self.coordinator_host = self._client.get_coordinator_host()
+    self.coordinator_host = '' #self._client.get_coordinator_host()
 
 
     if res.status is not None and res.status.statusCode not in (TStatusCode.SUCCESS_STATUS,):
     if res.status is not None and res.status.statusCode not in (TStatusCode.SUCCESS_STATUS,):
       if hasattr(res.status, 'errorMessage') and res.status.errorMessage:
       if hasattr(res.status, 'errorMessage') and res.status.errorMessage:

+ 30 - 29
apps/impala/src/impala/conf.py

@@ -204,32 +204,33 @@ DAEMON_API_USERNAME = Config(
 def config_validator(user):
 def config_validator(user):
   # dbms is dependent on beeswax.conf (this file)
   # dbms is dependent on beeswax.conf (this file)
   # import in method to avoid circular dependency
   # import in method to avoid circular dependency
-  from beeswax.design import hql_query
-  from beeswax.server import dbms
-  from beeswax.server.dbms import get_query_server_config
-
-  res = []
-  try:
-    try:
-      if not 'test' in sys.argv: # Avoid tests hanging
-        query_server = get_query_server_config(name='impala')
-        server = dbms.get(user, query_server)
-        query = hql_query("SELECT 'Hello World!';")
-        handle = server.execute_and_wait(query, timeout_sec=10.0)
-
-        if handle:
-          server.fetch(handle, rows=100)
-          server.close(handle)
-    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
+  return None
+#   from beeswax.design import hql_query
+#   from beeswax.server import dbms
+#   from beeswax.server.dbms import get_query_server_config
+# 
+#   res = []
+#   try:
+#     try:
+#       if not 'test' in sys.argv: # Avoid tests hanging
+#         query_server = get_query_server_config(name='impala')
+#         server = dbms.get(user, query_server)
+#         query = hql_query("SELECT 'Hello World!';")
+#         handle = server.execute_and_wait(query, timeout_sec=10.0)
+# 
+#         if handle:
+#           server.fetch(handle, rows=100)
+#           server.close(handle)
+#     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

+ 8 - 5
apps/impala/src/impala/server.py

@@ -50,11 +50,14 @@ def get_api(user, url):
 
 
 
 
 def _get_impala_server_url(session):
 def _get_impala_server_url(session):
-  impala_settings = session.get_formatted_properties()
-  http_addr = next((setting['value'] for setting in impala_settings if setting['key'].lower() == 'http_addr'), None)
-  # Remove scheme if found
-  http_addr = http_addr.replace('http://', '').replace('https://', '')
-  return ('https://' if get_webserver_certificate_file() else 'http://') + http_addr
+  if session:
+    impala_settings = session.get_formatted_properties()
+    http_addr = next((setting['value'] for setting in impala_settings if setting['key'].lower() == 'http_addr'), None)
+    # Remove scheme if found
+    http_addr = http_addr.replace('http://', '').replace('https://', '')
+    return ('https://' if get_webserver_certificate_file() else 'http://') + http_addr
+  else:
+    return 'http://impalad:25000'
 
 
 
 
 class ImpalaServerClientException(Exception):
 class ImpalaServerClientException(Exception):

+ 1 - 1
apps/jobbrowser/src/jobbrowser/apis/data_warehouse.py

@@ -57,7 +57,7 @@ class DataWarehouseClusterApi(Api):
         'user': app['clusterName'].split('-', 1)[0],
         'user': app['clusterName'].split('-', 1)[0],
         'progress': app.get('progress', 100),
         'progress': app.get('progress', 100),
         'queue': 'group',
         'queue': 'group',
-        'duration': (datetime.now() - parser.parse(app['creationDate']).replace(tzinfo=None)).seconds * 1000,
+        'duration': ((datetime.now() - parser.parse(app['creationDate']).replace(tzinfo=None)).seconds * 1000) if app['creationDate'] else 0,
         'submitted': app['creationDate'],
         'submitted': app['creationDate'],
         'canWrite': True
         'canWrite': True
       } for app in sorted(jobs['clusters'], key=lambda a: a['creationDate'], reverse=True)],
       } for app in sorted(jobs['clusters'], key=lambda a: a['creationDate'], reverse=True)],