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():
|
||||
_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"
|
||||
|
||||
Reference in New Issue
Block a user