This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: os.link() issues on Windows & ReFS
Type: behavior Stage: resolved
Components: Windows Versions: Python 3.4, Python 3.5
process
Status: closed Resolution: third party
Dependencies: Superseder:
Assigned To: Nosy List: Harry Lam, eryksun, paul.moore, steve.dower, tim.golden, zach.ware
Priority: normal Keywords:

Created on 2015-07-28 01:47 by Harry Lam, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (3)
msg247496 - (view) Author: Harry Lam (Harry Lam) Date: 2015-07-28 01:47
Storage Spaces (RAID volumes) under Windows 8.1 / Server 2012 R2 use ReFS which does not support hard links.

If the Users directory has been moved to a ReFS volume, it causes any script that uses os.link to hang (pip is one of the notable examples). As a side effect -- this also makes it so that Python can not be uninstalled if pip is installed. The script must be terminated with a ctrl-c.

Tested under 3.5.0b3 as well as 3.4.3 (x64 as well as x32).

Traceback from ctrl-c on 'pip list':

I:\>pip list
Traceback (most recent call last):
  File "C:\Program Files\Python 3.5\lib\site-packages\pip\_vendor\lockfile\linkl
ockfile.py", line 30, in acquire
    os.link(self.unique_name, self.lock_file)
OSError: [WinError 50] The request is not supported: 'I:\\Users\\[[USER NAME REMOVED]]\\AppData\
\Local\\pip\\Cache\\[[COMPUTER NAME REMOVED]]-1d14.781968199621979134564595' -> 'I:\\Users\
\[[USER NAME REMOVED]]\\AppData\\Local\\pip\\Cache\\selfcheck.json.lock'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files\Python 3.5\lib\runpy.py", line 170, in _run_module_as_m
ain
    "__main__", mod_spec)
  File "C:\Program Files\Python 3.5\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Program Files\Python 3.5\Scripts\pip.exe\__main__.py", line 9, in <mo
dule>
  File "C:\Program Files\Python 3.5\lib\site-packages\pip\__init__.py", line 217
, in main
    return command.main(cmd_args)
  File "C:\Program Files\Python 3.5\lib\site-packages\pip\basecommand.py", line
220, in main
    pip_version_check(session)
  File "C:\Program Files\Python 3.5\lib\site-packages\pip\utils\outdated.py", li
ne 134, in pip_version_check
    state.save(pypi_version, current_time)
  File "C:\Program Files\Python 3.5\lib\site-packages\pip\utils\outdated.py", li
ne 71, in save
    with lockfile.LockFile(self.statefile_path):
  File "C:\Program Files\Python 3.5\lib\site-packages\pip\_vendor\lockfile\__ini
t__.py", line 238, in __enter__
    self.acquire()
  File "C:\Program Files\Python 3.5\lib\site-packages\pip\_vendor\lockfile\linkl
ockfile.py", line 49, in acquire
    time.sleep(timeout is not None and timeout/10 or 0.1)
KeyboardInterrupt
msg247498 - (view) Author: Harry Lam (Harry Lam) Date: 2015-07-28 02:10
Slight bit of clarification:

This doesn't affect all scripts -- just those which don't have proper Except OSError handling. In pip's case, a timeout is not passed to the acquire() function when it is first being called and causes this issue with hanging.
msg247503 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2015-07-28 05:06
The problem is that the 3rd party [lockfile][1] module assumes that if os.link exists it means hard links are supported for all file systems on a given platform. So in your case it gets stuck repeatedly trying an operation that can never succeed. This can probably be worked around in pip, for which you've already opened an [issue][2]. AFAICT, there's nothing to be done in Python's standard library.

[1]: https://github.com/openstack/pylockfile
[2]: https://github.com/pypa/pip/issues/2993
History
Date User Action Args
2022-04-11 14:58:19adminsetgithub: 68926
2015-07-28 13:50:04r.david.murraysetstatus: open -> closed
type: crash -> behavior
resolution: third party
stage: resolved
2015-07-28 05:06:16eryksunsetnosy: + eryksun
messages: + msg247503
2015-07-28 02:10:34Harry Lamsetmessages: + msg247498
title: os.link issues on Windows & ReFS -> os.link() issues on Windows & ReFS
2015-07-28 01:47:27Harry Lamcreate