Преглед изворни кода

HUE-8925 [fb] Fix config validation for Hive & AWS.

Jean-Francois Desjeans Gauthier пре 6 година
родитељ
комит
1c499788f7

+ 1 - 1
apps/hive/src/hive/conf.py

@@ -67,7 +67,7 @@ def config_validator(user):
     from desktop.lib.fsmanager import get_filesystem
     warehouse = beeswax.hive_site.get_metastore_warehouse_dir()
     fs = get_filesystem()
-    fs.stats(warehouse)
+    fs.do_as_superuser(fs.stats, warehouse)
   except Exception:
     msg = 'Failed to access Hive warehouse: %s'
     LOG.exception(msg % warehouse)

+ 12 - 4
desktop/core/src/desktop/lib/fs/proxyfs.py

@@ -22,9 +22,11 @@ from urlparse import urlparse
 from django.contrib.auth.models import User
 
 from desktop.auth.backend import is_admin
+from desktop.conf import DEFAULT_USER
 
 LOG = logging.getLogger(__name__)
 
+DEFAULT_USER = DEFAULT_USER.get()
 
 class ProxyFS(object):
 
@@ -53,7 +55,10 @@ class ProxyFS(object):
     if path:
       split = urlparse(path)
       scheme = split.scheme if split.scheme else None
-    return scheme or self._default_scheme
+    ret_scheme = scheme or self._default_scheme
+    if not ret_scheme:
+      raise IOError('Can not figure out scheme for path "%s"' % path)
+    return ret_scheme
 
   def _has_access(self, fs):
     from desktop.auth.backend import rewrite_user  # Avoid cyclic loop
@@ -70,8 +75,8 @@ class ProxyFS(object):
 
   def _get_fs(self, path):
     scheme = self._get_scheme(path)
-    if not scheme:
-      raise IOError('Can not figure out scheme for path "%s"' % path)
+    if self.getuser() is None:
+      raise IOError('User not set')
     try:
       fs = self._fs_dict[scheme](self._name, self.getuser())
       if self._has_access(fs):
@@ -115,7 +120,10 @@ class ProxyFS(object):
       self.setuser(prev)
 
   def do_as_superuser(self, fn, *args, **kwargs):
-    return self.do_as_user(self._default_fs.superuser, fn, *args, **kwargs)
+    scheme = self._get_scheme(args[0])
+    fs = self._fs_dict[scheme](self._name)
+    user = fs.superuser if fs.superuser else DEFAULT_USER
+    return self.do_as_user(user, fn, *args, **kwargs)
 
   # Proxy methods to suitable filesystem
   # ------------------------------------

+ 2 - 2
desktop/libs/aws/src/aws/conf.py

@@ -233,10 +233,10 @@ def has_s3_access(user):
 
 def config_validator(user):
   res = []
-  import aws # Circular dependecy
+  from aws.client import get_client # Circular dependecy
   if is_enabled():
     try:
-      conn = aws.get_client('default').get_s3_connection()
+      conn = get_client('default')._s3_connection
       conn.get_canonical_user_id()
     except Exception as e:
       LOG.exception('AWS failed configuration check.')

+ 2 - 2
desktop/libs/liboozie/src/liboozie/conf.py

@@ -97,8 +97,8 @@ def config_validator(user):
       res.append((status, _('The Oozie server is not available')))
     fs = get_filesystem()
     NICE_NAME = 'Oozie'
-    if fs.exists(REMOTE_SAMPLE_DIR.get()):
-      stats = fs.stats(REMOTE_SAMPLE_DIR.get())
+    if fs.do_as_superuser(fs.exists, REMOTE_SAMPLE_DIR.get()):
+      stats = fs.do_as_superuser(fs.stats, REMOTE_SAMPLE_DIR.get())
       mode = oct(stats.mode)
       # if neither group nor others have write permission
       group_has_write = int(mode[-2]) & 2