Explorar o código

HUE-3228 [dashboard] Split APIs in sync and async

Romain Rigaux %!s(int64=8) %!d(string=hai) anos
pai
achega
9ef6c58

+ 5 - 1
apps/impala/src/impala/dashboard_api.py

@@ -42,8 +42,10 @@ class MockRequest():
 # To inherit from DashboardApi
 class SQLApi():
 
-  def __init__(self, user):
+  def __init__(self, user, engine):
     self.user = user
+    self.engine = engine
+    self.async = engine == 'hive' or engine == 'impala'
 
   def query(self, dashboard, query, facet=None):
     database, table = self._get_database_table_names(dashboard['name'])
@@ -114,6 +116,8 @@ class SQLApi():
         status='ready-execute'
         # historify=False
     )
+    
+    # TODO: sync
     return editor.execute(MockRequest(self.user))
 
 

+ 2 - 2
apps/search/src/search/api_engines.py

@@ -31,9 +31,9 @@ def get_engine(user, engine='solr'):
   if isinstance(engine, dict):
     engine = engine.get('engine', 'solr')
 
-  if engine == 'impala':
+  if engine != 'solr':
     from impala.dashboard_api import SQLApi
-    return SQLApi(user)
+    return SQLApi(user, engine)
   else:
     return SearchApi(user)
 

+ 3 - 2
apps/search/src/search/models.py

@@ -1147,9 +1147,10 @@ def get_engines(user):
   if ENABLE_SQL.get():
     engines += [{
           'name': _('table (%s)') % interpreter['name'],
-          'type': interpreter['type']
+          'type': interpreter['type'],
+          'async': interpreter['interface'] == 'hiveserver2'
         }
-        for interpreter in get_ordered_interpreters(user) if interpreter['interface'] == 'hiveserver2'
+        for interpreter in get_ordered_interpreters(user) if interpreter['interface'] in ('hiveserver2', 'jdbc', 'rdbms')
     ]
 
   return engines

+ 8 - 5
apps/search/src/search/static/search/js/search.ko.js

@@ -455,6 +455,9 @@ var Collection = function (vm, collection) {
   self.engine.subscribe(function() {
     self.name(null);
   });
+  self.async = ko.computed(function() {
+    return ['impala', 'hive'].indexOf(self.engine()) != -1;
+  });
   self.queryResult = ko.observable(new QueryResult(self, {
     type: self.engine(),
   }));
@@ -681,9 +684,9 @@ var Collection = function (vm, collection) {
         );
       });
 
-      // TODO queryResult reload QueryResult
+      // TODO Reload QueryResult
       facet.queryResult = ko.observable(new QueryResult(self, {
-    	    type: self.engine(),
+         type: self.engine(),
       }));
     }
   }
@@ -1742,7 +1745,7 @@ var SearchViewModel = function (collection_json, query_json, initial_json) {
       });
     }
 
-    if (self.collection.engine() == 'impala') {
+    if (self.collection.async()) {
       multiQs = $.map(self.collection.facets(), function(facet) {
         return $.post("/search/search", {
             collection: ko.mapping.toJSON(self.collection),
@@ -1778,7 +1781,7 @@ var SearchViewModel = function (collection_json, query_json, initial_json) {
         }, function (data) {
           data = JSON.bigdataParse(data);
           try {
-            if (self.collection.engine() != 'impala') {
+            if (! self.collection.async()) {
               self._make_grid_result(data, callback);
             } else {
               self.collection.queryResult(new QueryResult(self, {
@@ -1799,7 +1802,7 @@ var SearchViewModel = function (collection_json, query_json, initial_json) {
     )
     .done(function () {
       if (arguments[0] instanceof Array) {
-        if (self.collection.engine() != 'impala') { // If multi queries
+        if (! self.collection.async()) { // If multi queries
           var histograms = self.collection.getHistogramFacets();
           for (var h = 0; h < histograms.length; h++) { // Do not use $.each here
             var histoFacetId = histograms[h].id();