tileserver will now recognize outdated upstream

This commit is contained in:
Laura Klünder 2024-09-17 21:44:01 +02:00
parent 87822a8426
commit 007fbe3464
2 changed files with 7 additions and 2 deletions

View file

@ -425,6 +425,8 @@ def tile(request, level, zoom, x, y, theme, access_permissions: Optional[set] =
response['ETag'] = tile_etag
response['Cache-Control'] = 'no-cache'
response['Vary'] = 'Cookie'
if access_permissions is not None:
response['X-Processed-Geometry-Update'] = str(MapUpdate.last_processed_geometry_update()[0])
return response
@ -474,4 +476,5 @@ def get_cache_package(request, filetype):
response['Content-Length'] = size
if content_disposition := content_disposition_header(False, filename):
response["Content-Disposition"] = content_disposition
response['X-Processed-Geometry-Update'] = str(MapUpdate.last_processed_geometry_update()[0])
return response

View file

@ -68,6 +68,7 @@ class TileServer:
self.auth_headers = {'X-Tile-Secret': base64.b64encode(self.tile_secret.encode()).decode()}
self.processed_geometry_update = None
self.cache_package = None
self.cache_package_etag = None
self.cache_package_filename = None
@ -136,6 +137,7 @@ class TileServer:
with BytesIO(zstd_decompress(r.content)) as f:
self.cache_package = CachePackage.read(f)
self.cache_package_etag = r.headers.get('ETag', None)
self.processed_geometry_update = int(r.headers['X-Processed-Geometry-Update'])
except Exception as e:
logger.error('Cache package parsing failed: %s' % e)
return False
@ -305,8 +307,8 @@ class TileServer:
(self.upstream_base, level, zoom, x, y, theme_id, access_cache_key),
headers=self.auth_headers, auth=self.http_auth)
if r.status_code == 200 and r.headers['Content-Type'] == 'image/png':
if r.headers['ETag'] != tile_etag:
error = b'outdated tile from upstream'
if int(r.headers.get('X-Processed-Geometry-Update', 0)) < self.processed_geometry_update:
error = b'upstream is outdated'
start_response('503 Service Unavailable', [self.get_date_header(),
('Content-Length', len(error)),
('ETag', tile_etag)])