Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
S slapos.core
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Labels
    • Labels
  • Merge requests 26
    • Merge requests 26
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Environments
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Members
    • Members
  • Activity
  • Graph
  • Jobs
  • Commits
Collapse sidebar
  • nexedi
  • slapos.core
  • Merge requests
  • !233

Merged
Created Jun 18, 2020 by Jérome Perrin@jeromeOwner

util.rmtree: fix for python3

  • Overview 5
  • Commits 1
  • Pipelines 4
  • Changes 1

On python3, deleting a chmoded folder causes this error:

Traceback (most recent call last):
  File "/usr/lib/python3.7/shutil.py", line 423, in _rmtree_safe_fd
    dirfd = os.open(entry.name, os.O_RDONLY, dir_fd=topfd)
PermissionError: [Errno 13] Permission denied: 'directory'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "slapos.core/slapos/grid/slapgrid.py", line 607, in processSoftwareReleaseList
    software.destroy()
  File "slapos.core/slapos/grid/SlapObject.py", line 360, in destroy
    rmtree(self.software_path)
  File "slapos.core/slapos/util.py", line 267, in rmtree
    shutil.rmtree(path, onerror=chmod_retry)
  File "/usr/lib/python3.7/shutil.py", line 491, in rmtree
    _rmtree_safe_fd(fd, path, onerror)
  File "/usr/lib/python3.7/shutil.py", line 425, in _rmtree_safe_fd
    onerror(os.open, fullname, sys.exc_info())
  File "slapos.core/slapos/util.py", line 264, in chmod_retry
    func(failed_path)
TypeError: open() missing required argument 'flags' (pos 2)

Our error handler was assuming that on python 3 the EACCESS for the directory would happen first on an os.lstat call 1, which is true when the top level folder is not listable, but it did not support the case where the top level folder is listable but contain another folder that is not listable. In that case, the first error is an os.open 2

Tests from erp5.util (where this function came from) only covered the 1 case but new tests in slapos.core covered the 2.

Anyway, do the "chmod folder and retry from beginning" for both 1 or 2 cases.

Edited Jun 18, 2020 by Jérome Perrin
Assignee
Assign to
Reviewer
Request review from
None
Milestone
None
Assign milestone
Time tracking
Source branch: fix/test_software_deletion_py3
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7