Browse Source

HUE-5261 [editor] Move rowcount polling fetching to frontend

Romain Rigaux 8 years ago
parent
commit
3cfb5fd

+ 6 - 11
desktop/libs/notebook/src/notebook/connectors/hiveserver2.py

@@ -23,7 +23,6 @@ import logging
 import re
 import StringIO
 import struct
-import time
 
 from django.core.urlresolvers import reverse
 from django.utils.translation import ugettext as _
@@ -307,7 +306,7 @@ class HS2Api(Api):
 
     if snippet['type'] == 'hive':
       resp['rows'], resp['size'], resp['message'] = self._get_hive_result_size(notebook, snippet)
-    else:  # Impala
+    else:
       resp['rows'], resp['size'], resp['message'] = self._get_impala_result_size(notebook, snippet)
 
     return resp
@@ -793,15 +792,11 @@ DROP TABLE IF EXISTS `%(table)s`;
     server_url = '%s://%s' % (protocol, self._get_impala_server_url(session))
     if query_id:
       LOG.info("Attempting to get Impala query profile at server_url %s for query ID: %s" % (server_url, query_id))
-      retries = 0
-      max_retries = 10
-      total_records_match = None
-      while not total_records_match and retries < max_retries:
-        time.sleep(1.0)
-        fragment = self._get_impala_query_profile(server_url, query_id=query_id)
-        total_records_re = "Coordinator Fragment F\d\d.+?RowsReturned: \d+(?:.\d+[KMB])? \((?P<total_records>\d+)\).*?(Averaged Fragment F\d\d)"
-        total_records_match = re.search(total_records_re, fragment, re.MULTILINE | re.DOTALL)
-        retries += 1
+
+      fragment = self._get_impala_query_profile(server_url, query_id=query_id)
+      total_records_re = "Coordinator Fragment F\d\d.+?RowsReturned: \d+(?:.\d+[KMB])? \((?P<total_records>\d+)\).*?(Averaged Fragment F\d\d)"
+      total_records_match = re.search(total_records_re, fragment, re.MULTILINE | re.DOTALL)
+
     if total_records_match:
       total_records = int(total_records_match.group('total_records'))
 

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

@@ -1341,7 +1341,11 @@ var EditorViewModel = (function() {
       });
     };
 
-    self.fetchResultSize = function() {
+    self.fetchResultSize = function(n) {
+      if (typeof n === 'undefined') {
+        n = 10;
+      }
+
       $.post("/notebook/api/fetch_result_size", {
         notebook: ko.mapping.toJSON(notebook.getContext()),
         snippet: ko.mapping.toJSON(self.getContext())
@@ -1349,6 +1353,10 @@ var EditorViewModel = (function() {
         if (data.status == 0) {
           if (data.result.rows != null) {
             self.result.rows(data.result.rows);
+          } else if (self.type() == 'impala' && n > 0) {
+            setTimeout(function () {
+              self.fetchResultSize(n - 1);
+            }, 1000);
           }
         } else if (data.status == 5) {
           // No supported yet for this snippet