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:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user