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:
@ -805,13 +805,22 @@ def cached_tile(output_dir, layer, z, x, y, scale=1, fmt="png"):
|
|||||||
if not empty.exists():
|
if not empty.exists():
|
||||||
_write_atomic(empty, b"")
|
_write_atomic(empty, b"")
|
||||||
return None, "empty"
|
return None, "empty"
|
||||||
if empty.exists():
|
|
||||||
return None, "empty"
|
|
||||||
newest = 0.0
|
newest = 0.0
|
||||||
for src in sources:
|
for src in sources:
|
||||||
m = src.mtime()
|
m = src.mtime()
|
||||||
if m and m > newest:
|
if m and m > newest:
|
||||||
newest = m
|
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:
|
try:
|
||||||
if cache.stat().st_mtime >= newest:
|
if cache.stat().st_mtime >= newest:
|
||||||
return cache.read_bytes(), "fresh"
|
return cache.read_bytes(), "fresh"
|
||||||
|
|||||||
Reference in New Issue
Block a user