tests: Evict stale files in the functional download cache after a while
The download cache of the functional tests is currently only growing. But sometimes tests get removed or changed to use different assets, thus we should clean up the stale old assets after a while when they are not in use anymore. So add a script that looks at the time stamps of the assets and removes them if they haven't been touched for more than half of a year. Since there might also be some assets around that have been added to the cache before we added the time stamp files, assume a default time stamp that is close to the creation date of this patch, so that we don't delete these files too early (so we still have all assets around in case we have to bisect an issue in the recent past of QEMU). Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com> Message-ID: <20251014083424.103202-3-thuth@redhat.com>
This commit is contained in:
parent
cb1379ce64
commit
dd10dbe617
3 changed files with 47 additions and 0 deletions
45
scripts/clean_functional_cache.py
Executable file
45
scripts/clean_functional_cache.py
Executable file
|
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#
|
||||
"""Delete stale assets from the download cache of the functional tests"""
|
||||
|
||||
import os
|
||||
import stat
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
cache_dir_env = os.getenv('QEMU_TEST_CACHE_DIR')
|
||||
if cache_dir_env:
|
||||
cache_dir = Path(cache_dir_env, "download")
|
||||
else:
|
||||
cache_dir = Path(Path("~").expanduser(), ".cache", "qemu", "download")
|
||||
|
||||
if not cache_dir.exists():
|
||||
print(f"Cache dir {cache_dir} does not exist!", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
os.chdir(cache_dir)
|
||||
|
||||
for file in cache_dir.iterdir():
|
||||
# Only consider the files that use a sha256 as filename:
|
||||
if len(file.name) != 64:
|
||||
continue
|
||||
|
||||
try:
|
||||
timestamp = int(file.with_suffix(".stamp").read_text())
|
||||
except FileNotFoundError:
|
||||
# Assume it's an old file that was already in the cache before we
|
||||
# added the code for evicting stale assets. Use the release date
|
||||
# of QEMU v10.1 as a default timestamp.
|
||||
timestamp = time.mktime((2025, 8, 26, 0, 0, 0, 0, 0, 0))
|
||||
|
||||
age = time.time() - timestamp
|
||||
|
||||
# Delete files older than half of a year (183 days * 24h * 60m * 60s)
|
||||
if age > 15811200:
|
||||
print(f"Removing {cache_dir}/{file.name}.")
|
||||
file.chmod(stat.S_IWRITE)
|
||||
file.unlink()
|
||||
Loading…
Add table
Add a link
Reference in a new issue