[8.2.x] Fixes crashing under a squashfuse_ll read-only mount (#12302)

Co-authored-by: Yutian Li <hotpxless@gmail.com>
This commit is contained in:
github-actions[bot] 2024-05-09 18:20:57 +00:00 committed by GitHub
parent 8fdb72947e
commit 328001eab1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 11 additions and 1 deletions

View File

@ -441,6 +441,7 @@ Yao Xiao
Yoav Caspi Yoav Caspi
Yuliang Shao Yuliang Shao
Yusuke Kadowaki Yusuke Kadowaki
Yutian Li
Yuval Shimon Yuval Shimon
Zac Hatfield-Dodds Zac Hatfield-Dodds
Zachary Kneupper Zachary Kneupper

View File

@ -0,0 +1 @@
Fixed handling of 'Function not implemented' error under squashfuse_ll, which is a different way to say that the mountpoint is read-only.

View File

@ -1171,7 +1171,10 @@ def try_makedirs(cache_dir: Path) -> bool:
return False return False
except OSError as e: except OSError as e:
# as of now, EROFS doesn't have an equivalent OSError-subclass # as of now, EROFS doesn't have an equivalent OSError-subclass
if e.errno == errno.EROFS: #
# squashfuse_ll returns ENOSYS "OSError: [Errno 38] Function not
# implemented" for a read-only error
if e.errno in {errno.EROFS, errno.ENOSYS}:
return False return False
raise raise
return True return True

View File

@ -1974,6 +1974,11 @@ def test_try_makedirs(monkeypatch, tmp_path: Path) -> None:
monkeypatch.setattr(os, "makedirs", partial(fake_mkdir, exc=err)) monkeypatch.setattr(os, "makedirs", partial(fake_mkdir, exc=err))
assert not try_makedirs(p) assert not try_makedirs(p)
err = OSError()
err.errno = errno.ENOSYS
monkeypatch.setattr(os, "makedirs", partial(fake_mkdir, exc=err))
assert not try_makedirs(p)
# unhandled OSError should raise # unhandled OSError should raise
err = OSError() err = OSError()
err.errno = errno.ECHILD err.errno = errno.ECHILD