瀏覽代碼

HUE-8758 [connectors] List computes and use the selected one

Romain 6 年之前
父節點
當前提交
e23c89f132

+ 11 - 5
apps/beeswax/src/beeswax/server/dbms.py

@@ -92,13 +92,18 @@ def get(user, query_server=None, cluster=None):
 
 
 def get_query_server_config(name='beeswax', connector=None):
-  LOG.debug("Query cluster %s: %s" % ('' if connector else name, connector))
-
   if connector:
+    connector_name = full_connector_name = connector['type']
+    compute_name = None
+    if connector.get('compute'):
+      compute_name = connector['compute']['name']
+      full_connector_name = '%s-%s' % (connector_name, compute_name)
+    LOG.debug("Query cluster connector %s compute %s" % (connector_name, compute_name))
+
     query_server = {
-        'server_name': connector['type'],
-        'server_host': connector['options']['server_host'],
-        'server_port': int(connector['options']['server_port']),
+        'server_name': full_connector_name,
+        'server_host': (connector['compute']['options'] if 'compute' in connector else connector['options'])['server_host'],
+        'server_port': int((connector['compute']['options'] if 'compute' in connector else connector['options'])['server_port']),
         'principal': 'TODO',
         'auth_username': AUTH_USERNAME.get(),
         'auth_password': AUTH_PASSWORD.get(),
@@ -109,6 +114,7 @@ def get_query_server_config(name='beeswax', connector=None):
         'QUERY_TIMEOUT_S': 15 * 60,
     }
   else:
+    LOG.debug("Query cluster %s" % name)
     if name == "llap":
       activeEndpoint = cache.get('llap')
       if activeEndpoint is None:

+ 11 - 11
desktop/core/src/desktop/api2.py

@@ -146,17 +146,6 @@ def get_context_computes(request, interface):
 
   clusters = get_clusters(request.user).values()
 
-  # Currently broken if not sent
-  computes.extend([{
-      'id': cluster['id'],
-      'name': cluster['name'],
-      'namespace': cluster['id'],
-      'interface': interface,
-      'type': cluster['type'],
-      'options': {}
-    } for cluster in clusters if cluster.get('type') == 'direct'
-  ])
-
   if get_cluster_config(request.user)['has_computes']: # TODO: only based on interface selected?
     interpreter = get_interpreter(connector_type=interface, user=request.user)
     if interpreter['dialect'] == 'impala':
@@ -174,6 +163,17 @@ def get_context_computes(request, interface):
           'options': cluster['options'],
         } for cluster in dw_clusters]
       )
+  else:
+    # Currently broken if not sent
+    computes.extend([{
+        'id': cluster['id'],
+        'name': cluster['name'],
+        'namespace': cluster['id'],
+        'interface': interface,
+        'type': cluster['type'],
+        'options': {}
+      } for cluster in clusters if cluster.get('type') == 'direct'
+    ])
 
   response[interface] = computes
   response['status'] = 0

+ 7 - 6
desktop/libs/notebook/src/notebook/connectors/base.py

@@ -322,21 +322,22 @@ def get_api(request, snippet):
   interpreter = get_interpreter(connector_type=snippet['type'], user=request.user)
   interface = interpreter['interface']
 
-  # TODO: clean computes
   if get_cluster_config(request.user)['has_computes']:
     compute = json.loads(request.POST.get('cluster', '""')) # Via Catalog autocomplete API or Notebook create sessions.
     if compute == '""' or compute == 'undefined':
       compute = None
     if not compute and snippet.get('compute'): # Via notebook.ko.js
-      compute = snippet['compute']
-  else:
-    compute = None
+      interpreter['compute'] =  snippet['compute']
 
-  LOG.debug('Selected interpreter %s interface=%s compute=%s' % (interpreter['type'], interface, compute and compute['name']))
+  LOG.debug('Selected interpreter %s interface=%s compute=%s' % (
+    interpreter['type'],
+    interface,
+    interpreter.get('compute') and interpreter['compute']['name'])
+  )
 
   if interface == 'hiveserver2':
     from notebook.connectors.hiveserver2 import HS2Api
-    return HS2Api(user=request.user, request=request, interpreter=compute if compute else interpreter)
+    return HS2Api(user=request.user, request=request, interpreter=interpreter)
   elif interface == 'oozie':
     return OozieApi(user=request.user, request=request)
   elif interface == 'livy':