Invalider un marqueur de tuile vide des que des sources plus recentes apparaissent

Une tuile rendue transparente (aucune donnee a l'epoque) gardait son
marqueur .empty pour toujours : naviguer une zone avant de la generer
la laissait vide a jamais en mode cache seule. Le marqueur suit
desormais la meme regle de fraicheur que la tuile — plus vieux qu'une
source (dalle apparue depuis, version amont plus neuve), il est
retire : la tuile redevient en attente, rapatriee de l'amont ou
rendue par la maintenance.
This commit is contained in:
Antoine Jacquin
2026-09-26 11:00:31 +02:00
parent 665ca29984
commit 2a84b76d33

View File

@ -805,13 +805,22 @@ def cached_tile(output_dir, layer, z, x, y, scale=1, fmt="png"):
if not empty.exists():
_write_atomic(empty, b"")
return None, "empty"
if empty.exists():
return None, "empty"
newest = 0.0
for src in sources:
m = src.mtime()
if m and m > newest:
newest = m
# Même règle de fraîcheur que la tuile : un marqueur .empty plus vieux
# qu'une source (dalle apparue depuis, version amont plus neuve) est
# invalidé — sinon une zone naviguée avant sa génération resterait
# transparente à jamais.
if empty.exists():
try:
if newest and empty.stat().st_mtime >= newest:
return None, "empty"
except OSError:
return None, "empty"
empty.unlink(missing_ok=True)
try:
if cache.stat().st_mtime >= newest:
return cache.read_bytes(), "fresh"