Browse Source

HUE-2935 [core] Check status of cluster as the hue user

Health calls should be made as the user running the server, not
the logged-in user.
Romain Rigaux 10 years ago
parent
commit
059a226

+ 4 - 4
apps/jobbrowser/src/jobbrowser/tests.py

@@ -387,10 +387,6 @@ class TestMapReduce2NoHadoop:
     if not hasattr(history_server_api, 'old_get_history_server_api'):
       history_server_api.old_get_history_server_api = history_server_api.get_history_server_api
 
-    resource_manager_api.get_resource_manager = lambda: MockResourceManagerApi()
-    mapreduce_api.get_mapreduce_api = lambda: MockMapreduceApi()
-    history_server_api.get_history_server_api = lambda: HistoryServerApi()
-
     self.c = make_logged_in_client(is_superuser=False)
     grant_access("test", "test", "jobbrowser")
     self.user = User.objects.get(username='test')
@@ -399,6 +395,10 @@ class TestMapReduce2NoHadoop:
     grant_access("test2", "test2", "jobbrowser")
     self.user2 = User.objects.get(username='test2')
 
+    resource_manager_api.get_resource_manager = lambda user: MockResourceManagerApi(user)
+    mapreduce_api.get_mapreduce_api = lambda: MockMapreduceApi()
+    history_server_api.get_history_server_api = lambda: HistoryServerApi()
+
     self.finish = [
         YARN_CLUSTERS['default'].SUBMIT_TO.set_for_testing(True),
         SHARE_JOBS.set_for_testing(False)

+ 13 - 13
apps/jobbrowser/src/jobbrowser/views.py

@@ -108,21 +108,21 @@ def jobs(request):
   retired = request.GET.get('retired')
 
   if request.GET.get('format') == 'json':
-#    try:
+    try:
       # Limit number of jobs to be 10,000
       jobs = get_api(request.user, request.jt).get_jobs(user=request.user, username=user, state=state, text=text, retired=retired, limit=10000)
-#    except Exception, ex:
-#      ex_message = str(ex)
-#      if 'Connection refused' in ex_message or 'standby RM' in ex_message:
-#        raise PopupException(_('Resource Manager cannot be contacted or might be down.'))
-#      elif 'Could not connect to' in ex_message:
-#        raise PopupException(_('Job Tracker cannot be contacted or might be down.'))
-#      else:
-#        raise ex
-      json_jobs = {
-        'jobs': [massage_job_for_json(job, request) for job in jobs],
-      }
-      return JsonResponse(json_jobs, encoder=JSONEncoderForHTML)
+    except Exception, ex:
+      ex_message = str(ex)
+      if 'Connection refused' in ex_message or 'standby RM' in ex_message:
+        raise PopupException(_('Resource Manager cannot be contacted or might be down.'))
+      elif 'Could not connect to' in ex_message:
+        raise PopupException(_('Job Tracker cannot be contacted or might be down.'))
+      else:
+        raise ex
+    json_jobs = {
+      'jobs': [massage_job_for_json(job, request) for job in jobs],
+    }
+    return JsonResponse(json_jobs, encoder=JSONEncoderForHTML)
 
   return render('jobs.mako', request, {
     'request': request,

+ 3 - 1
desktop/libs/hadoop/src/hadoop/cluster.py

@@ -22,6 +22,7 @@ from hadoop import conf
 from hadoop.fs import webhdfs, LocalSubFileSystem
 from hadoop.job_tracker import LiveJobTracker
 
+from desktop.conf import DEFAULT_USER
 from desktop.lib.paths import get_build_dir
 
 
@@ -31,6 +32,7 @@ LOG = logging.getLogger(__name__)
 FS_CACHE = None
 MR_CACHE = None
 MR_NAME_CACHE = 'default'
+DEFAULT_USER = DEFAULT_USER.get()
 
 
 def _make_filesystem(identifier):
@@ -185,7 +187,7 @@ def get_next_ha_yarncluster():
   for name in conf.YARN_CLUSTERS.keys():
     config = conf.YARN_CLUSTERS[name]
     if config.SUBMIT_TO.get():
-      rm = ResourceManagerApi(config.RESOURCE_MANAGER_API_URL.get(), config.SECURITY_ENABLED.get(), config.SSL_CERT_CA_VERIFY.get())
+      rm = ResourceManagerApi(DEFAULT_USER, config.RESOURCE_MANAGER_API_URL.get(), config.SECURITY_ENABLED.get(), config.SSL_CERT_CA_VERIFY.get())
       if has_ha:
         try:
           cluster_info = rm.cluster()

+ 1 - 1
desktop/libs/hadoop/src/hadoop/conf.py

@@ -209,7 +209,7 @@ def test_yarn_configurations(user):
 
   try:
     url = ''
-    api = get_resource_manager(user)
+    api = get_resource_manager(user.username)
     url = api._url
     api.apps()
   except Exception, e:

+ 2 - 3
desktop/libs/hadoop/src/hadoop/yarn/resource_manager_api.py

@@ -76,8 +76,8 @@ class ResourceManagerApi(object):
   def _get_params(self):
     params = {}
 
-    if DEFAULT_USER != self._user.username: # We impersonate if needed
-      params['doAs'] = self._user.username
+    if self._user != DEFAULT_USER: # We impersonate if needed
+      params['doAs'] = self._user
       if not self.security_enabled:
         params['user.name'] = DEFAULT_USER
 
@@ -96,7 +96,6 @@ class ResourceManagerApi(object):
 
   def cluster(self, **kwargs):
     params = self._get_params()
-    params.update(kwargs)
     return self._execute(self._root.get, 'cluster/info', params=params, headers={'Accept': _JSON_CONTENT_TYPE})
 
   def apps(self, **kwargs):