فهرست منبع

HUE-1883 [beeswax] Query with expired result will break the editor

Add Javascript to handle the errors.
Also expire queries.
Abraham Elmahrek 12 سال پیش
والد
کامیت
1b8b5ee
2فایلهای تغییر یافته به همراه16 افزوده شده و 7 حذف شده
  1. 10 2
      apps/beeswax/src/beeswax/api.py
  2. 6 5
      apps/beeswax/static/js/beeswax.vm.js

+ 10 - 2
apps/beeswax/src/beeswax/api.py

@@ -44,9 +44,9 @@ LOG = logging.getLogger(__name__)
 
 
 def error_handler(view_fn):
-  def decorator(*args, **kwargs):
+  def decorator(request, *args, **kwargs):
     try:
-      return view_fn(*args, **kwargs)
+      return view_fn(request, *args, **kwargs)
     except Http404, e:
       raise e
     except Exception, e:
@@ -54,6 +54,14 @@ def error_handler(view_fn):
         message = str(e)
       else:
         message = force_unicode(e.message, strings_only=True, errors='replace')
+        
+        if 'Invalid OperationHandle' in message and 'id' in kwargs:
+          # Expired state.
+          query_history = authorized_get_query_history(request, kwargs['id'], must_exist=False)
+          if query_history:
+            query_history.set_to_expired()
+            query_history.save()
+
       response = {
         'status': -1,
         'message': message,

+ 6 - 5
apps/beeswax/static/js/beeswax.vm.js

@@ -514,7 +514,7 @@ function BeeswaxViewModel(server) {
     self.design.explain(false);
     self.design.isRunning(true);
     self.design.isFinished(true);
-    self.design.errors.removeAll();
+    self.resetErrors();
 
     var data = {
       'next': true
@@ -559,7 +559,7 @@ function BeeswaxViewModel(server) {
         self.design.isRunning(false);
         try {
           var data = $.parseJSON(jqXHR.responseText);
-          self.design.errors.push(data.error);
+          self.design.watch.errors.push(data.error);
         } catch(e) {
           $(document).trigger('server.unmanageable_error', jqXHR.responseText);
         }
@@ -574,13 +574,14 @@ function BeeswaxViewModel(server) {
     var timer = null;
 
     self.design.watch.logs.removeAll();
-    self.design.watch.errors.removeAll();
     self.design.results.rows.removeAll();
     self.design.results.columns.removeAll();
+    self.resetErrors();
 
     var _fn = function() {
       $(document).one('watched.query', function(e, data) {
-        if (data.isSuccess || data.isFailure) {
+        var failed = data.isFailure  || data.status != 0;
+        if (data.isSuccess || failed) {
           clearTimeout(timer);
           self.design.isRunning(false);
 
@@ -588,7 +589,7 @@ function BeeswaxViewModel(server) {
             self.design.watch.logs.push(data.log);
             // scroll logs
           }
-          if (!data.isFailure) {
+          if (!failed) {
             $(document).trigger('stop_watch.query');
 
             if (fn) {