OSM: Auto-Retry max 3x (30/60/90s), doppelte Tile-Fetches verhindert
Retry-Limit verhindert Endlos-Loop. Delay wächst (30s→60s→90s) damit mehr Tiles gecacht sein können. Kartenbewegung setzt Counter zurück. _fetching-Set im Backend verhindert parallele Doppel-Requests pro Tile. SW by-v407, APP_VER 387
This commit is contained in:
parent
66af669653
commit
6930e6f848
2 changed files with 17 additions and 5 deletions
|
|
@ -37,6 +37,9 @@ _OVERPASS_HEADERS = {
|
|||
# Referenzen auf laufende Hintergrund-Tasks — verhindert GC vor Abschluss
|
||||
_bg_tasks: set = set()
|
||||
|
||||
# Tiles die gerade gefetcht werden — verhindert Doppel-Requests
|
||||
_fetching: set = set()
|
||||
|
||||
OSM_QUERIES = {
|
||||
'waste_basket': '[out:json][timeout:20];node["amenity"="waste_basket"]({bbox});out;',
|
||||
'dog_park': '[out:json][timeout:25];(way["leisure"="dog_park"]({bbox});node["leisure"="dog_park"]({bbox});way["leisure"="park"]["dog"="yes"]({bbox});node["leisure"="park"]["dog"="yes"]({bbox}););out center;',
|
||||
|
|
@ -122,6 +125,10 @@ def _stale_tiles(poi_type, tiles):
|
|||
return stale
|
||||
|
||||
async def _fetch_and_store_tile(poi_type, x, y):
|
||||
fkey = f"{poi_type}_{CACHE_ZOOM}_{x}_{y}"
|
||||
if fkey in _fetching:
|
||||
return # bereits in Arbeit
|
||||
_fetching.add(fkey)
|
||||
key = f"{CACHE_ZOOM}_{x}_{y}"
|
||||
s, w, n, e = _tile_to_bbox(x, y, CACHE_ZOOM)
|
||||
query = OSM_QUERIES[poi_type].format(bbox=f"{s},{w},{n},{e}")
|
||||
|
|
@ -129,6 +136,7 @@ async def _fetch_and_store_tile(poi_type, x, y):
|
|||
elements = await _fetch_overpass(query)
|
||||
except Exception as exc:
|
||||
logger.warning(f"Overpass Fehler {poi_type} Tile {key}: {exc}")
|
||||
_fetching.discard(fkey)
|
||||
return
|
||||
with db() as conn:
|
||||
for el in elements:
|
||||
|
|
@ -159,6 +167,7 @@ async def _fetch_and_store_tile(poi_type, x, y):
|
|||
ON CONFLICT(type, tile_key) DO UPDATE SET cached_at=excluded.cached_at
|
||||
""", (poi_type, key))
|
||||
logger.info(f"OSM Tile {key} ({poi_type}): {len(elements)} POIs gecacht.")
|
||||
_fetching.discard(fkey)
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue