tileserver will now recognize outdated upstream
This commit is contained in:
parent
87822a8426
commit
007fbe3464
2 changed files with 7 additions and 2 deletions
|
@ -425,6 +425,8 @@ def tile(request, level, zoom, x, y, theme, access_permissions: Optional[set] =
|
||||||
response['ETag'] = tile_etag
|
response['ETag'] = tile_etag
|
||||||
response['Cache-Control'] = 'no-cache'
|
response['Cache-Control'] = 'no-cache'
|
||||||
response['Vary'] = 'Cookie'
|
response['Vary'] = 'Cookie'
|
||||||
|
if access_permissions is not None:
|
||||||
|
response['X-Processed-Geometry-Update'] = str(MapUpdate.last_processed_geometry_update()[0])
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
@ -474,4 +476,5 @@ def get_cache_package(request, filetype):
|
||||||
response['Content-Length'] = size
|
response['Content-Length'] = size
|
||||||
if content_disposition := content_disposition_header(False, filename):
|
if content_disposition := content_disposition_header(False, filename):
|
||||||
response["Content-Disposition"] = content_disposition
|
response["Content-Disposition"] = content_disposition
|
||||||
|
response['X-Processed-Geometry-Update'] = str(MapUpdate.last_processed_geometry_update()[0])
|
||||||
return response
|
return response
|
||||||
|
|
|
@ -68,6 +68,7 @@ class TileServer:
|
||||||
|
|
||||||
self.auth_headers = {'X-Tile-Secret': base64.b64encode(self.tile_secret.encode()).decode()}
|
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 = None
|
||||||
self.cache_package_etag = None
|
self.cache_package_etag = None
|
||||||
self.cache_package_filename = None
|
self.cache_package_filename = None
|
||||||
|
@ -136,6 +137,7 @@ class TileServer:
|
||||||
with BytesIO(zstd_decompress(r.content)) as f:
|
with BytesIO(zstd_decompress(r.content)) as f:
|
||||||
self.cache_package = CachePackage.read(f)
|
self.cache_package = CachePackage.read(f)
|
||||||
self.cache_package_etag = r.headers.get('ETag', None)
|
self.cache_package_etag = r.headers.get('ETag', None)
|
||||||
|
self.processed_geometry_update = int(r.headers['X-Processed-Geometry-Update'])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error('Cache package parsing failed: %s' % e)
|
logger.error('Cache package parsing failed: %s' % e)
|
||||||
return False
|
return False
|
||||||
|
@ -305,8 +307,8 @@ class TileServer:
|
||||||
(self.upstream_base, level, zoom, x, y, theme_id, access_cache_key),
|
(self.upstream_base, level, zoom, x, y, theme_id, access_cache_key),
|
||||||
headers=self.auth_headers, auth=self.http_auth)
|
headers=self.auth_headers, auth=self.http_auth)
|
||||||
if r.status_code == 200 and r.headers['Content-Type'] == 'image/png':
|
if r.status_code == 200 and r.headers['Content-Type'] == 'image/png':
|
||||||
if r.headers['ETag'] != tile_etag:
|
if int(r.headers.get('X-Processed-Geometry-Update', 0)) < self.processed_geometry_update:
|
||||||
error = b'outdated tile from upstream'
|
error = b'upstream is outdated'
|
||||||
start_response('503 Service Unavailable', [self.get_date_header(),
|
start_response('503 Service Unavailable', [self.get_date_header(),
|
||||||
('Content-Length', len(error)),
|
('Content-Length', len(error)),
|
||||||
('ETag', tile_etag)])
|
('ETag', tile_etag)])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue