فهرست منبع

[core] Protect thread session conflicts

Romain Rigaux 12 سال پیش
والد
کامیت
39222528df
2فایلهای تغییر یافته به همراه13 افزوده شده و 6 حذف شده
  1. 5 3
      desktop/libs/hadoop/src/hadoop/fs/webhdfs.py
  2. 8 3
      desktop/libs/liboozie/src/liboozie/oozie_api.py

+ 5 - 3
desktop/libs/hadoop/src/hadoop/fs/webhdfs.py

@@ -45,6 +45,7 @@ DEFAULT_READ_SIZE = 1024*1024 # 1MB
 
 LOG = logging.getLogger(__name__)
 
+
 class WebHdfs(Hdfs):
   """
   WebHdfs implements the filesystem interface via the WebHDFS rest protocol.
@@ -68,7 +69,8 @@ class WebHdfs(Hdfs):
     self._client = self._make_client(url, security_enabled)
     self._root = resource.Resource(self._client)
 
-    self._user = None
+    # To store user info
+    self._thread_local = threading.local()
 
     LOG.debug("Initializing Hadoop WebHdfs: %s (security: %s, superuser: %s)" %
               (self._url, self._security_enabled, self._superuser))
@@ -124,7 +126,7 @@ class WebHdfs(Hdfs):
   @property
   def user(self):
     try:
-      return self._user
+      return self._thread_local.user
     except AttributeError:
       return WebHdfs.DEFAULT_USER
 
@@ -145,7 +147,7 @@ class WebHdfs(Hdfs):
   def setuser(self, user):
     """Set a new user. Return the current user."""
     curr = self.user
-    self._user = user
+    self._thread_local.user = user
     return curr
 
   def listdir_stats(self, path, glob=None):

+ 8 - 3
desktop/libs/liboozie/src/liboozie/oozie_api.py

@@ -62,7 +62,8 @@ class OozieApi(object):
       self._client.set_kerberos_auth()
     self._root = Resource(self._client)
     self._security_enabled = security_enabled
-    self.user = None # username actually
+    # To store username info
+    self._thread_local = threading.local()
 
   def __str__(self):
     return "OozieApi at %s" % (self._url,)
@@ -75,11 +76,15 @@ class OozieApi(object):
   def security_enabled(self):
     return self._security_enabled
 
+  @property
+  def user(self):
+    return self._thread_local.user
+
   def setuser(self, user):
     if hasattr(user, 'username'):
-      self.user = user.username
+      self._thread_local.user = user.username
     else:
-      self.user = user
+      self._thread_local.user = user
 
   def _get_params(self):
     if self.security_enabled: