ソースを参照

fix kill yarn job error when rm ha switch (#2611)

Co-authored-by: abzymeinsjtu <abzymeinsjtu@B-54Q8MD6R-0244.local>
Co-authored-by: Mahesh Balakrishnan <mbalakrishnan@cloudera.com>
Evans Sun 2 年 前
コミット
f45bffb3d4

+ 4 - 0
apps/jobbrowser/src/jobbrowser/api.py

@@ -87,6 +87,10 @@ class YarnApi(JobBrowserApi):
   def get_job_link(self, job_id):
     return self.get_job(job_id)
 
+  @rm_ha
+  def kill_job(self, job_id):
+    return self.resource_manager_api.kill(job_id)
+
   @rm_ha
   def get_jobs(self, user, **kwargs):
     state_filters = {'running': 'UNDEFINED', 'completed': 'SUCCEEDED', 'failed': 'FAILED', 'killed': 'KILLED',}

+ 5 - 0
apps/jobbrowser/src/jobbrowser/tests.py

@@ -921,6 +921,11 @@ class MockResourceManagerApi(object):
       u'app': MockResourceManagerApi.APPS[job_id]
     }
 
+  def kill(self, job_id):
+    job_id = job_id.replace('job', 'application')
+    self.APPS[job_id]['state'] = 'KILLED'
+
+
 class MockImpalaQueryApi(object):
   APPS = {
     '8a46a8865624698f:b80b211500000000': {

+ 8 - 2
apps/jobbrowser/src/jobbrowser/views.py

@@ -302,14 +302,20 @@ def kill_job(request, job):
   if not can_kill_job(job, request.user):
     raise PopupException(_("Kill operation is forbidden."))
 
+  api = get_api(request.user, request.jt)
+
   try:
-    job.kill()
+    from jobbrowser.api import YarnApi
+
+    if isinstance(api, YarnApi):
+      api.kill_job(job.jobId)
+    else:
+      job.kill()
   except Exception as e:
     LOG.exception('Killing job')
     raise PopupException(e)
 
   cur_time = time.time()
-  api = get_api(request.user, request.jt)
 
   while time.time() - cur_time < 15:
     try: