fix lock timeouts for good this time

This commit is contained in:
Ronny Pfannschmidt 2018-09-28 22:06:43 +02:00
parent 2532dc1dbb
commit d76fa59b35
2 changed files with 20 additions and 8 deletions

View File

@ -20,6 +20,8 @@ import tempfile
import itertools
LOCK_TIMEOUT = 60 * 60 * 3
get_lock_path = operator.methodcaller("joinpath", ".lock")
@ -155,21 +157,21 @@ def cleanup_candidates(root, prefix, keep):
def cleanup_numbered_dir(root, prefix, keep, consider_lock_dead_if_created_before):
for path in cleanup_candidates(root, prefix, keep):
try_cleanup(path, consider_lock_dead_if_created_before)
known_garbage = list(root.glob("garbage-*"))
for path in known_garbage:
for path in root.glob("garbage-*"):
try_cleanup(path, consider_lock_dead_if_created_before)
def make_numbered_dir_with_cleanup(root, prefix, keep, lock_timeout):
e = None
for i in range(10):
try:
p = make_numbered_dir(root, prefix)
lock_path = create_cleanup_lock(p)
register_cleanup_lock_removal(lock_path)
except Exception:
raise
except Exception as e:
pass
else:
consider_lock_dead_if_created_before = p.stat().st_mtime + lock_timeout
consider_lock_dead_if_created_before = p.stat().st_mtime - lock_timeout
cleanup_numbered_dir(
root=root,
prefix=prefix,
@ -177,6 +179,8 @@ def make_numbered_dir_with_cleanup(root, prefix, keep, lock_timeout):
consider_lock_dead_if_created_before=consider_lock_dead_if_created_before,
)
return p
assert e is not None
raise e
@attr.s

View File

@ -239,7 +239,10 @@ class TestNumberedDir(object):
from _pytest.tmpdir import cleanup_numbered_dir
cleanup_numbered_dir(
root=tmp_path, prefix=self.PREFIX, keep=2, consider_lock_dead_after=0
root=tmp_path,
prefix=self.PREFIX,
keep=2,
consider_lock_dead_if_created_before=0,
)
a, b = tmp_path.iterdir()
print(a, b)
@ -251,5 +254,10 @@ class TestNumberedDir(object):
p = tmpdir.make_numbered_dir(root=tmp_path, prefix=self.PREFIX)
tmpdir.create_cleanup_lock(p)
assert not tmpdir.ensure_deletable(p, p.stat().st_mtime + 1)
assert tmpdir.ensure_deletable(p, p.stat().st_mtime - 1)
assert not tmpdir.ensure_deletable(
p, consider_lock_dead_if_created_before=p.stat().st_mtime - 1
)
assert tmpdir.ensure_deletable(
p, consider_lock_dead_if_created_before=p.stat().st_mtime + 1
)