Merge branch 'pr4/install-marker-and-identity' into pr5/surface-headers
This commit is contained in:
@@ -653,6 +653,15 @@ def _sweep_debris(directory: Path) -> None:
|
|||||||
quarantined.unlink()
|
quarantined.unlink()
|
||||||
except OSError:
|
except OSError:
|
||||||
continue
|
continue
|
||||||
|
# The same reasoning covers *.tmp. _write_identity and _install_salt both
|
||||||
|
# create one and unlink it in a finally, which a SIGKILL skips, and no glob
|
||||||
|
# in this module matches the leftovers either.
|
||||||
|
for temporary in directory.glob("telemetry-*.tmp"):
|
||||||
|
try:
|
||||||
|
if now - temporary.stat().st_mtime > CLAIM_STALE_SECONDS:
|
||||||
|
temporary.unlink()
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
def _claim_parked(directory: Path) -> Path | None:
|
def _claim_parked(directory: Path) -> Path | None:
|
||||||
|
|||||||
@@ -430,3 +430,17 @@ def test_quarantined_batches_are_eventually_collected(telemetry):
|
|||||||
|
|
||||||
assert fresh.exists(), "a recent quarantine was discarded before anyone could look at it"
|
assert fresh.exists(), "a recent quarantine was discarded before anyone could look at it"
|
||||||
assert not old.exists(), "an expired quarantine was left on disk forever"
|
assert not old.exists(), "an expired quarantine was left on disk forever"
|
||||||
|
|
||||||
|
|
||||||
|
def test_temp_files_orphaned_by_a_kill_are_collected(telemetry):
|
||||||
|
"""_write_identity and _install_salt unlink in a finally, which SIGKILL skips."""
|
||||||
|
directory = telemetry.memory_core.data_dir()
|
||||||
|
directory.mkdir(parents=True, exist_ok=True)
|
||||||
|
orphan = directory / "telemetry-salt.999.tmp"
|
||||||
|
orphan.write_text("abandoned", encoding="utf-8")
|
||||||
|
stale = time.time() - (telemetry.CLAIM_STALE_SECONDS + 60)
|
||||||
|
os.utime(orphan, (stale, stale))
|
||||||
|
|
||||||
|
telemetry._sweep_debris(directory)
|
||||||
|
|
||||||
|
assert not orphan.exists(), "a killed process left a temp file on disk forever"
|
||||||
|
|||||||
@@ -653,6 +653,15 @@ def _sweep_debris(directory: Path) -> None:
|
|||||||
quarantined.unlink()
|
quarantined.unlink()
|
||||||
except OSError:
|
except OSError:
|
||||||
continue
|
continue
|
||||||
|
# The same reasoning covers *.tmp. _write_identity and _install_salt both
|
||||||
|
# create one and unlink it in a finally, which a SIGKILL skips, and no glob
|
||||||
|
# in this module matches the leftovers either.
|
||||||
|
for temporary in directory.glob("telemetry-*.tmp"):
|
||||||
|
try:
|
||||||
|
if now - temporary.stat().st_mtime > CLAIM_STALE_SECONDS:
|
||||||
|
temporary.unlink()
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
def _claim_parked(directory: Path) -> Path | None:
|
def _claim_parked(directory: Path) -> Path | None:
|
||||||
|
|||||||
@@ -653,6 +653,15 @@ def _sweep_debris(directory: Path) -> None:
|
|||||||
quarantined.unlink()
|
quarantined.unlink()
|
||||||
except OSError:
|
except OSError:
|
||||||
continue
|
continue
|
||||||
|
# The same reasoning covers *.tmp. _write_identity and _install_salt both
|
||||||
|
# create one and unlink it in a finally, which a SIGKILL skips, and no glob
|
||||||
|
# in this module matches the leftovers either.
|
||||||
|
for temporary in directory.glob("telemetry-*.tmp"):
|
||||||
|
try:
|
||||||
|
if now - temporary.stat().st_mtime > CLAIM_STALE_SECONDS:
|
||||||
|
temporary.unlink()
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
def _claim_parked(directory: Path) -> Path | None:
|
def _claim_parked(directory: Path) -> Path | None:
|
||||||
|
|||||||
@@ -653,6 +653,15 @@ def _sweep_debris(directory: Path) -> None:
|
|||||||
quarantined.unlink()
|
quarantined.unlink()
|
||||||
except OSError:
|
except OSError:
|
||||||
continue
|
continue
|
||||||
|
# The same reasoning covers *.tmp. _write_identity and _install_salt both
|
||||||
|
# create one and unlink it in a finally, which a SIGKILL skips, and no glob
|
||||||
|
# in this module matches the leftovers either.
|
||||||
|
for temporary in directory.glob("telemetry-*.tmp"):
|
||||||
|
try:
|
||||||
|
if now - temporary.stat().st_mtime > CLAIM_STALE_SECONDS:
|
||||||
|
temporary.unlink()
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
def _claim_parked(directory: Path) -> Path | None:
|
def _claim_parked(directory: Path) -> Path | None:
|
||||||
|
|||||||
@@ -653,6 +653,15 @@ def _sweep_debris(directory: Path) -> None:
|
|||||||
quarantined.unlink()
|
quarantined.unlink()
|
||||||
except OSError:
|
except OSError:
|
||||||
continue
|
continue
|
||||||
|
# The same reasoning covers *.tmp. _write_identity and _install_salt both
|
||||||
|
# create one and unlink it in a finally, which a SIGKILL skips, and no glob
|
||||||
|
# in this module matches the leftovers either.
|
||||||
|
for temporary in directory.glob("telemetry-*.tmp"):
|
||||||
|
try:
|
||||||
|
if now - temporary.stat().st_mtime > CLAIM_STALE_SECONDS:
|
||||||
|
temporary.unlink()
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
def _claim_parked(directory: Path) -> Path | None:
|
def _claim_parked(directory: Path) -> Path | None:
|
||||||
|
|||||||
@@ -653,6 +653,15 @@ def _sweep_debris(directory: Path) -> None:
|
|||||||
quarantined.unlink()
|
quarantined.unlink()
|
||||||
except OSError:
|
except OSError:
|
||||||
continue
|
continue
|
||||||
|
# The same reasoning covers *.tmp. _write_identity and _install_salt both
|
||||||
|
# create one and unlink it in a finally, which a SIGKILL skips, and no glob
|
||||||
|
# in this module matches the leftovers either.
|
||||||
|
for temporary in directory.glob("telemetry-*.tmp"):
|
||||||
|
try:
|
||||||
|
if now - temporary.stat().st_mtime > CLAIM_STALE_SECONDS:
|
||||||
|
temporary.unlink()
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
def _claim_parked(directory: Path) -> Path | None:
|
def _claim_parked(directory: Path) -> Path | None:
|
||||||
|
|||||||
@@ -653,6 +653,15 @@ def _sweep_debris(directory: Path) -> None:
|
|||||||
quarantined.unlink()
|
quarantined.unlink()
|
||||||
except OSError:
|
except OSError:
|
||||||
continue
|
continue
|
||||||
|
# The same reasoning covers *.tmp. _write_identity and _install_salt both
|
||||||
|
# create one and unlink it in a finally, which a SIGKILL skips, and no glob
|
||||||
|
# in this module matches the leftovers either.
|
||||||
|
for temporary in directory.glob("telemetry-*.tmp"):
|
||||||
|
try:
|
||||||
|
if now - temporary.stat().st_mtime > CLAIM_STALE_SECONDS:
|
||||||
|
temporary.unlink()
|
||||||
|
except OSError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
def _claim_parked(directory: Path) -> Path | None:
|
def _claim_parked(directory: Path) -> Path | None:
|
||||||
|
|||||||
Reference in New Issue
Block a user