Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed rare race condition error when creating the basetemp directory #5525

Closed
wants to merge 1 commit into from

Conversation

nicoddemus
Copy link
Member

Fix #5524

Probably hard/impossible to reproduce in a test, I'm afraid.

@nicoddemus nicoddemus added the needs backport applied to PRs, indicates that it should be ported to the current bug-fix branch label Jun 29, 2019
@codecov
Copy link

codecov bot commented Jun 29, 2019

Codecov Report

Merging #5525 into master will not change coverage.
The diff coverage is 100%.

Impacted file tree graph

@@           Coverage Diff           @@
##           master    #5525   +/-   ##
=======================================
  Coverage   96.11%   96.11%           
=======================================
  Files         117      117           
  Lines       25695    25695           
  Branches     2493     2493           
=======================================
  Hits        24696    24696           
  Misses        695      695           
  Partials      304      304
Impacted Files Coverage Δ
src/_pytest/pathlib.py 89.08% <100%> (ø) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update d4a76a0...9136b3f. Read the comment docs.

@@ -33,7 +33,7 @@ def ensure_reset_dir(path):
"""
if path.exists():
rmtree(path, force=True)
path.mkdir()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it absolutely has to fail when doing a ensure_reset

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem as I understand, is a race condition between workers trying to create the same basedir at the same time; worker 1 and 2 (for example) manage to rmtree at the same time, but only one of them will succeed when they get to path.mkdir()

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ensure_dir_reset is about completely resetting a folder, if the invariant does not hold, something went baldy wrong, and 2 processes that absolutely should not use the same folder will do so

if self._given_basetemp is not None:
basetemp = self._given_basetemp
ensure_reset_dir(basetemp)
- if a exact basetemp is given

it absolutely never must pass if the observed error happens - basetemp invocation itself is not concurrency save ever

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are right, my bad, indeed basetemp is created by the master process so there's shouldn't be a race condition there.

I'm closing this and the related issue, I will investigate some more on our side as we do pass a basetemp around. 👍

Thanks for the quick review!

@nicoddemus nicoddemus closed this Jun 29, 2019
@nicoddemus nicoddemus deleted the tmpdir-mkdir branch June 29, 2019 18:36
@asottile asottile removed the needs backport applied to PRs, indicates that it should be ported to the current bug-fix branch label Oct 13, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Race condition error while creating basetemp concurrently
3 participants