Browse Source

HUE-4215 [yarn] Reset API_CACHE on logout

krish 9 years ago
parent
commit
f2a5141

+ 4 - 5
desktop/libs/hadoop/src/hadoop/yarn/mapreduce_api.py

@@ -45,7 +45,7 @@ def get_mapreduce_api(username):
         yarn_cluster = cluster.get_cluster_conf_for_job_submission()
         yarn_cluster = cluster.get_cluster_conf_for_job_submission()
         if yarn_cluster is None:
         if yarn_cluster is None:
           raise PopupException(_('No Resource Manager are available.'))
           raise PopupException(_('No Resource Manager are available.'))
-        API_CACHE = MapreduceApi(username, yarn_cluster.PROXY_API_URL.get(), yarn_cluster.SECURITY_ENABLED.get(), yarn_cluster.SSL_CERT_CA_VERIFY.get())
+        API_CACHE = MapreduceApi(yarn_cluster.PROXY_API_URL.get(), yarn_cluster.SECURITY_ENABLED.get(), yarn_cluster.SSL_CERT_CA_VERIFY.get())
     finally:
     finally:
       API_CACHE_LOCK.release()
       API_CACHE_LOCK.release()
 
 
@@ -56,8 +56,7 @@ def get_mapreduce_api(username):
 
 
 class MapreduceApi(object):
 class MapreduceApi(object):
 
 
-  def __init__(self, username, mr_url, security_enabled=False, ssl_cert_ca_verify=False):
-    self._user = username
+  def __init__(self, mr_url, security_enabled=False, ssl_cert_ca_verify=False):
     self._url = posixpath.join(mr_url, 'proxy')
     self._url = posixpath.join(mr_url, 'proxy')
     self._client = HttpClient(self._url, logger=LOG)
     self._client = HttpClient(self._url, logger=LOG)
     self._root = Resource(self._client)
     self._root = Resource(self._client)
@@ -94,7 +93,7 @@ class MapreduceApi(object):
       return DEFAULT_USER.get()
       return DEFAULT_USER.get()
 
 
   def setuser(self, user):
   def setuser(self, user):
-    curr = self._user
+    curr = self.username
     self._thread_local.user = user
     self._thread_local.user = user
     return curr
     return curr
 
 
@@ -144,4 +143,4 @@ class MapreduceApi(object):
 
 
   def kill(self, job_id):
   def kill(self, job_id):
     app_id = job_id.replace('job', 'application')
     app_id = job_id.replace('job', 'application')
-    get_resource_manager(self._user).kill(app_id) # We need to call the RM
+    get_resource_manager(self.username).kill(app_id) # We need to call the RM

+ 28 - 0
desktop/libs/hadoop/src/hadoop/yarn/tests.py

@@ -20,6 +20,9 @@ import logging
 from nose.tools import assert_true, assert_equal, assert_not_equal
 from nose.tools import assert_true, assert_equal, assert_not_equal
 
 
 from hadoop.yarn import clients
 from hadoop.yarn import clients
+from hadoop.yarn import mapreduce_api
+from hadoop.yarn.mapreduce_api import MapreduceApi, get_mapreduce_api
+
 
 
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
@@ -47,3 +50,28 @@ def test_get_log_client():
     assert_true('http://test3:8041' in base_urls)
     assert_true('http://test3:8041' in base_urls)
   finally:
   finally:
     clients.MAX_HEAP_SIZE = old_max_heap_size
     clients.MAX_HEAP_SIZE = old_max_heap_size
+
+
+class MapreduceAPIMock(MapreduceApi):
+  EXPECTED_USERNAME = None
+
+  def kill(self, job_id):
+    assert_equal(MapreduceAPIMock.EXPECTED_USERNAME, self._user)
+
+
+class TestMapReduceAPI():
+
+  def setUp(self):
+    if not hasattr(self, 'originalMapReduceApi'):
+      self.originalMapReduceApi = mapreduce_api.MapreduceApi
+    mapreduce_api.MapreduceApi = MapreduceAPIMock
+
+  def tearDown(self):
+    mapreduce_api.MapreduceApi = self.originalMapReduceApi
+
+  def test_MR_Api_Cache(self):
+    MapreduceAPIMock.EXPECTED_USERNAME = 'admin'
+    get_mapreduce_api('admin').kill(job_id='123')
+
+    MapreduceAPIMock.EXPECTED_USERNAME = 'bob'
+    get_mapreduce_api('bob').kill(job_id='123')