classification
Title: shutil.copy2 fails with even with source network filesystem not supporting extended attributes
Type: Stage: patch review
Components: Library (Lib) Versions: Python 3.8, Python 3.7, Python 3.6, Python 3.5, Python 2.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: grebdioZ, hans-meine
Priority: normal Keywords: patch

Created on 2019-05-08 07:43 by hans-meine, last changed 2019-05-16 23:38 by Ying Wang.

Pull Requests
URL Status Linked Edit
PR 8601 giampaolo.rodola, 2019-05-09 19:59
PR 13369 open Ying Wang, 2019-05-16 23:38
Messages (1)
msg341857 - (view) Author: hans.meine (hans-meine) Date: 2019-05-08 07:43
This is a near duplicate of #24564, but has a slightly smaller scope.

We're using a CIFS filesystem and noticed that copying files *from* that filesystem to a local path with `shutil.copy2` does not work, but fails with an `OSError: [Errno 22] Invalid argument`.  This is because `copy2()` calls `copystat()` which contains

    try:
        names = os.listxattr(src, follow_symlinks=follow_symlinks)
    except OSError as e:
        if e.errno not in (errno.ENOTSUP, errno.ENODATA):
            raise

In our case with our CIFS mount, and in the NFS mounts mentioned in #24564, `os.listxattr()` raises an IOError with `errno.EINVAL` (22).  It was proposed in #24564 already to also ignore EINVAL, but with this issue I wanted to specifically propose to do so for the *reading* part.  While I also think that copy2() should work with both source *and* target filesystems not supporting xattr, our use case where the likelihood of data loss is zero (because there have never been xattr in the first place) is particularly annoying.
History
Date User Action Args
2019-05-16 23:38:55Ying Wangsetpull_requests: + pull_request13280
2019-05-09 19:59:52giampaolo.rodolasetkeywords: + patch
stage: patch review
pull_requests: + pull_request13133
2019-05-08 08:25:42grebdioZsetnosy: + grebdioZ
2019-05-08 07:43:31hans-meinecreate