浏览代码

HUE-2123 [beeswax] Handle cancel state properly

Romain Rigaux 11 年之前
父节点
当前提交
6bb4941

+ 6 - 3
apps/beeswax/src/beeswax/api.py

@@ -178,7 +178,7 @@ def watch_query_refresh_json(request, id):
   job_urls = massage_job_urls_for_json(jobs)
   job_urls = massage_job_urls_for_json(jobs)
 
 
   result = {
   result = {
-    'status': 0,
+    'status': -1,
     'log': log,
     'log': log,
     'jobs': jobs,
     'jobs': jobs,
     'jobUrls': job_urls,
     'jobUrls': job_urls,
@@ -192,11 +192,14 @@ def watch_query_refresh_json(request, id):
   # Run time error
   # Run time error
   if query_history.is_failure():
   if query_history.is_failure():
     res = db.get_operation_status(handle)
     res = db.get_operation_status(handle)
-    if hasattr(res, 'errorMessage') and res.errorMessage:
+    if query_history.is_canceled(res):
+      result['status'] = 0
+    elif hasattr(res, 'errorMessage') and res.errorMessage:
       result['message'] = res.errorMessage
       result['message'] = res.errorMessage
     else:
     else:
       result['message'] = _('Bad status for request %s:\n%s') % (id, res)
       result['message'] = _('Bad status for request %s:\n%s') % (id, res)
-    result['status'] = -1
+  else:
+    result['status'] = 0
 
 
   return HttpResponse(json.dumps(result), mimetype="application/json")
   return HttpResponse(json.dumps(result), mimetype="application/json")
 
 

+ 4 - 0
apps/beeswax/src/beeswax/models.py

@@ -213,6 +213,10 @@ class HiveServerQueryHistory(QueryHistory):
     self.last_state = new_state.index
     self.last_state = new_state.index
     self.save()
     self.save()
 
 
+  @classmethod
+  def is_canceled(self, res):
+    return res.operationState in (TOperationState.CANCELED_STATE, TOperationState.CLOSED_STATE)
+
 
 
 class SavedQuery(models.Model):
 class SavedQuery(models.Model):
   """
   """

+ 0 - 1
apps/beeswax/src/beeswax/server/hive_server2_lib.py

@@ -683,7 +683,6 @@ class HiveServerClientCompatible(object):
   def get_state(self, handle):
   def get_state(self, handle):
     operationHandle = handle.get_rpc_handle()
     operationHandle = handle.get_rpc_handle()
     res = self._client.get_operation_status(operationHandle)
     res = self._client.get_operation_status(operationHandle)
-
     return HiveServerQueryHistory.STATE_MAP[res.operationState]
     return HiveServerQueryHistory.STATE_MAP[res.operationState]