Rapatrier les tuiles manquantes depuis le serveur amont en mode cache seule

La maintenance de fond plafonne a LIDAR_TILE_BACKGROUND_MAX_Z (16 par
defaut) : les zooms natifs 17-18 de l'interface restaient transparents
sur une machine en cache seule. Une tuile absente du cache est
desormais rapatriee de LIDAR_MAPS_URL (quelques dizaines de Ko, mise en
cache, dedupliquee par verrou) sans aucun rendu local sur le chemin des
requetes.
This commit is contained in:
Antoine Jacquin
2026-09-25 20:27:46 +02:00
parent a2bf478379
commit 665ca29984
3 changed files with 58 additions and 2 deletions

View File

@ -571,11 +571,30 @@ async def tile(layer: str, z: int, x: int, name: str, v: Optional[str] = None):
raise HTTPException(404, "tuile hors grille")
if _env_flag("LIDAR_TILE_CACHE_ONLY"):
# Mode cache seule : aucune navigation ne déclenche de rendu (ni amont).
# Mode cache seule : aucune navigation ne déclenche de RENDU local.
# Une tuile absente (ex. zoom > LIDAR_TILE_BACKGROUND_MAX_Z, jamais
# couverte par la maintenance) est rapatriée du serveur amont
# LIDAR_MAPS_URL — un simple téléchargement de quelques dizaines de
# Ko, mis en cache, sans décodage ni calcul sur cette machine.
data, state = await run_in_threadpool(
tiles_mod.cached_tile, OUTPUT_DIR, layer, z, x, y, scale, fmt)
pending = state == "pending"
empty = state == "empty"
if pending and MAPS_URL:
suffix = "@2x" if scale == 2 else ""
key = (layer, z, x, y, scale, fmt)
entry = _acquire_lock(key)
try:
with entry[0]:
data = _fetch_upstream(f"tiles/{layer}/{z}/{x}/{y}{suffix}.{fmt}")
if data:
tiles_mod._write_atomic(
tiles_mod.tile_cache_path(OUTPUT_DIR, layer, z, x, y,
scale, fmt), data)
pending = False
empty = False
finally:
_release_lock(key, entry)
else:
data = await run_in_threadpool(_tile_bytes, layer, z, x, y, scale, fmt)
pending = False