Explorar o código

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

Add Javascript to handle the errors.
Also expire queries.
Abraham Elmahrek %!s(int64=12) %!d(string=hai) anos
pai
achega
1b8b5ee
Modificáronse 2 ficheiros con 16 adicións e 7 borrados
  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) {