Sfoglia il codice sorgente

HUE-8556 [fb] Overuse of trash folder checking

jdesjean 7 anni fa
parent
commit
c0b034e

+ 3 - 3
apps/filebrowser/src/filebrowser/views.py

@@ -58,6 +58,8 @@ from desktop.lib.i18n import smart_str
 from desktop.lib.tasks.compress_files.compress_utils import compress_files_in_hdfs
 from desktop.lib.tasks.extract_archive.extract_utils import extract_archive_in_hdfs
 from desktop.views import serve_403_error
+
+from hadoop.core_site import get_trash_interval
 from hadoop.fs.hadoopfs import Hdfs
 from hadoop.fs.exceptions import WebHdfsException
 from hadoop.fs.fsutils import do_overwrite_save
@@ -495,9 +497,7 @@ def listdir_paged(request, path):
     if page:
       page.object_list = [ _massage_stats(request, stat_absolute_path(path, s)) for s in shown_stats ]
 
-    is_trash_enabled = request.fs._get_scheme(path) == 'hdfs' and \
-                       (request.fs.isdir(_home_trash_path(request.fs, request.user, path)) or
-                        request.fs.isdir(request.fs.trash_path(path)))
+    is_trash_enabled = request.fs._get_scheme(path) == 'hdfs' and int(get_trash_interval()) > 0
 
     is_fs_superuser = _is_hdfs_superuser(request)
     data = {

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

@@ -82,7 +82,7 @@ def get_trash_interval():
 
   Also indicates whether trash is enabled or not.
   """
-  return get_conf().get(_CNF_TRASH_INTERVAL)
+  return get_conf().get(_CNF_TRASH_INTERVAL, 0)
 
 def get_s3a_access_key():
   """

+ 11 - 9
desktop/libs/hadoop/src/hadoop/fs/webhdfs.py

@@ -170,10 +170,11 @@ class WebHdfs(Hdfs):
       return WebHdfs.DEFAULT_USER
 
   def trash_path(self, path=None):
-    trash_path = self.join(self.get_home_dir(), '.Trash')
+    home_dir = self.get_home_dir()
+    trash_path = self.join(home_dir, '.Trash')
     try:
       if not path:
-        path = self.get_home_dir()
+        path = home_dir
       params = self._getparams()
       params['op'] = 'GETTRASHROOT'
       headers = self._getheaders()
@@ -188,8 +189,8 @@ class WebHdfs(Hdfs):
         raise e
     return trash_path
 
-  def current_trash_path(self, path):
-    return self.join(self.trash_path(path), self.TRASH_CURRENT)
+  def current_trash_path(self, trash_path):
+    return self.join(trash_path, self.TRASH_CURRENT)
 
   def _getparams(self):
     return {
@@ -316,9 +317,9 @@ class WebHdfs(Hdfs):
 
   def _ensure_current_trash_directory(self, path):
     """Create trash directory for a user if it doesn't exist."""
-    if not self.exists(self.current_trash_path(path)):
-      self.mkdir(self.current_trash_path(path))
-    return self.current_trash_path(path)
+    trash_path = self.current_trash_path(path)
+    self.mkdir(trash_path)
+    return trash_path
 
   def _trash(self, path, recursive=False):
     """
@@ -336,11 +337,12 @@ class WebHdfs(Hdfs):
     if not recursive and self.isdir(path):
       raise IOError(errno.EISDIR, _("File %s is a directory") % path)
 
-    if path.startswith(self.trash_path(path)):
+    trash_path = self.trash_path(path)
+    if path.startswith(trash_path):
       raise IOError(errno.EPERM, _("File %s is already trashed") % path)
 
     # Make path (with timestamp suffix if necessary)
-    base_trash_path = self.join(self._ensure_current_trash_directory(path), path[1:])
+    base_trash_path = self.join(self._ensure_current_trash_directory(trash_path), path[1:])
     trash_path = base_trash_path
     while self.exists(trash_path):
       trash_path = base_trash_path + str(time.time())