Browse Source

HUE-8586 [metadata] Integrate sample API with the multi cluster logic

Romain Rigaux 7 years ago
parent
commit
798709a

+ 15 - 7
apps/beeswax/src/beeswax/api.py

@@ -148,7 +148,7 @@ def _autocomplete(db, database=None, table=None, column=None, nested=None, query
         response = parse_tree
         # If column or nested type is scalar/primitive, add sample of values
         if parser.is_scalar_type(parse_tree['type']):
-          sample = _get_sample_data(db, database, table, column)
+          sample = _get_sample_data(db, database, table, column, cluster=cluster)
           if 'rows' in sample:
             response['sample'] = sample['rows']
       else:
@@ -649,10 +649,12 @@ def clear_history(request):
 @error_handler
 def get_sample_data(request, database, table, column=None):
   app_name = get_app_name(request)
-  query_server = get_query_server_config(app_name)
+  cluster = json.loads(request.POST.get('cluster', '{}'))
+
+  query_server = get_query_server_config(app_name, cluster=cluster)
   db = dbms.get(request.user, query_server)
 
-  response = _get_sample_data(db, database, table, column)
+  response = _get_sample_data(db, database, table, column, cluster=cluster)
   return JsonResponse(response)
 
 
@@ -675,7 +677,8 @@ def _get_sample_data(db, database, table, column, async=False, cluster=None, ope
           statement=sample_data,
           status='ready-execute',
           skip_historify=True,
-          is_task=False
+          is_task=False,
+          compute=cluster if cluster else None
       )
       response['result'] = notebook.execute(request=MockedDjangoRequest(user=db.client.user), batch=False)
       if table_obj.is_impala_only:
@@ -749,7 +752,9 @@ def get_functions(request):
 @error_handler
 def analyze_table(request, database, table, columns=None):
   app_name = get_app_name(request)
-  query_server = get_query_server_config(app_name)
+  cluster = json.loads(request.POST.get('cluster', '{}'))
+
+  query_server = get_query_server_config(app_name, cluster=cluster)
   db = dbms.get(request.user, query_server)
 
   table_obj = db.get_table(database, table)
@@ -776,7 +781,8 @@ def analyze_table(request, database, table, columns=None):
 @error_handler
 def get_table_stats(request, database, table, column=None):
   app_name = get_app_name(request)
-  cluster = json.loads(request.GET.get('cluster', '{}'))
+  cluster = json.loads(request.POST.get('cluster', '{}'))
+
   query_server = get_query_server_config(app_name, cluster=cluster)
   db = dbms.get(request.user, query_server)
 
@@ -798,7 +804,9 @@ def get_table_stats(request, database, table, column=None):
 @error_handler
 def get_top_terms(request, database, table, column, prefix=None):
   app_name = get_app_name(request)
-  query_server = get_query_server_config(app_name)
+  cluster = json.loads(request.POST.get('cluster', '{}'))
+
+  query_server = get_query_server_config(app_name, cluster=cluster)
   db = dbms.get(request.user, query_server)
 
   response = {'status': -1, 'message': '', 'redirect': ''}

+ 3 - 2
desktop/core/src/desktop/static/desktop/js/apiHelper.js

@@ -1321,7 +1321,7 @@ var ApiHelper = (function () {
           type: sourceType,
           source: isQuery ? 'query' : 'data',
         }),
-        cluster: ko.mapping.toJSON(options.compute)
+        cluster: ko.mapping.toJSON(options.compute ? options.compute : '""')
       },
       timeout: options.timeout
     }).success(function (data) {
@@ -1664,7 +1664,8 @@ var ApiHelper = (function () {
         compute: options.compute
       }),
       async: true,
-      operation: '"' + (options.operation || 'default') + '"'
+      operation: '"' + (options.operation || 'default') + '"',
+      cluster: ko.mapping.toJSON(options.compute ? options.compute : '""')
     }, {
       silenceErrors: options.silenceErrors
     }).done(function (sampleResponse) {

+ 8 - 4
desktop/libs/notebook/src/notebook/connectors/base.py

@@ -22,6 +22,7 @@ import uuid
 
 from django.utils.translation import ugettext as _
 
+from desktop.conf import has_multi_cluster
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.i18n import smart_unicode
 
@@ -314,11 +315,14 @@ def get_api(request, snippet):
   interface = interpreter['interface']
 
   # Multi cluster
-  cluster = json.loads(request.POST.get('cluster', '""')) # Via Catalog autocomplete API or Notebook create sessions
-  if cluster == 'undefined':
+  if has_multi_cluster():
+    cluster = json.loads(request.POST.get('cluster', '""')) # Via Catalog autocomplete API or Notebook create sessions
+    if cluster == 'undefined':
+      cluster = None
+    if not cluster and snippet.get('compute'): # Via notebook.ko.js
+      cluster = snippet['compute']
+  else:
     cluster = None
-  if not cluster and snippet.get('compute'): # Via notebook.ko.js
-    cluster = snippet['compute']
 
   cluster_name = cluster.get('id') if cluster else None
 

+ 3 - 5
desktop/libs/notebook/src/notebook/models.py

@@ -59,7 +59,7 @@ def escape_rows(rows, nulls_only=False, encoding=None):
 def make_notebook(name='Browse', description='', editor_type='hive', statement='', status='ready',
                   files=None, functions=None, settings=None, is_saved=False, database='default', snippet_properties=None, batch_submit=False,
                   on_success_url=None, skip_historify=False, is_task=False, last_executed=-1, is_notebook=False, pub_sub_url=None, result_properties={},
-                  namespace='default', compute={'id':'default'}):
+                  namespace=None, compute=None):
   '''
   skip_historify: do not add the task to the query history. e.g. SQL Dashboard
   isManaged: true when being a managed by Hue operation (include_managed=True in document), e.g. exporting query result, dropping some tables
@@ -128,10 +128,8 @@ def make_notebook(name='Browse', description='', editor_type='hive', statement='
          },
          'name': name,
          'database': database,
-         'namespace': {
-            'id': namespace
-         },
-         'compute': compute,
+         'namespace': namespace if namespace else {},
+         'compute': compute if compute else {},
          'result': {'handle':{}},
          'variables': []
       }

+ 0 - 1
desktop/libs/notebook/src/notebook/static/notebook/js/notebook.ko.js

@@ -381,7 +381,6 @@ var EditorViewModel = (function() {
     };
 
     self.namespace = ko.observable(snippet.namespace);
-
     self.compute = ko.observable(snippet.compute);
 
     self.availableDatabases = ko.observableArray();