Skip to content

Commit 8581e6d

Browse files
committed
Mapnik Datasource pooling and logging
1 parent cee9deb commit 8581e6d

File tree

5 files changed

+16
-12
lines changed

5 files changed

+16
-12
lines changed

local-root/docker-compose.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ services:
114114
py-modules: ../py-modules
115115
environment:
116116
- DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@database:5432/${POSTGRES_DB}
117-
- MAPNIK_POOL_SIZE=64
117+
- MAPNIK_POOL_SIZE=8
118118
command: >
119119
uvicorn --host 0.0.0.0 --port 8000
120120
macrostrat.legacy_tileserver:app

services/legacy-tileserver/macrostrat/legacy_tileserver/__init__.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
from enum import Enum
2-
from functools import lru_cache
31
from os import environ
4-
from pathlib import Path
52

63
from buildpg import render
74
from buildpg.asyncpg import create_pool_b
5+
from enum import Enum
86
from fastapi import BackgroundTasks, Depends, FastAPI, Request
9-
from morecantile import Tile
10-
from starlette.middleware import Middleware
11-
from starlette.middleware.cors import CORSMiddleware
12-
from starlette.responses import HTMLResponse
13-
7+
from functools import lru_cache
148
from macrostrat.database import Database
159
from macrostrat.tileserver_utils import (
1610
CachedTileArgs,
@@ -20,6 +14,11 @@
2014
handle_cached_tile_request,
2115
)
2216
from macrostrat.utils import get_logger, setup_stderr_logs
17+
from morecantile import Tile
18+
from pathlib import Path
19+
from starlette.middleware import Middleware
20+
from starlette.middleware.cors import CORSMiddleware
21+
from starlette.responses import HTMLResponse
2322

2423
from .image_tiles import MapnikMapPool, get_image_tile
2524

@@ -39,7 +38,7 @@ async def startup_event():
3938
# Tile rendering map pool size
4039
# This controls how many image tiles can be concurrently rendered.
4140
# Database access is somewhat inefficient, so we may need to adjust this.
42-
mapnik_pool_size = int(environ.get("MAPNIK_POOL_SIZE", "64"))
41+
mapnik_pool_size = int(environ.get("MAPNIK_POOL_SIZE", "8"))
4342
log.info(f"Setting up Mapnik map pool with size {mapnik_pool_size}")
4443

4544
app.state.pool = await create_pool_b(url)

services/legacy-tileserver/macrostrat/legacy_tileserver/image_tiles/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,7 @@ async def get_image_tile(request: Request, args: CachedTileArgs) -> bytes:
4141
# Render map to image
4242
im = Image(512, 512)
4343
render(_map, im, 2)
44+
4445
# Return image as binary
45-
return im.tostring("png")
46+
res = im.tostring("png")
47+
return res

services/legacy-tileserver/macrostrat/legacy_tileserver/image_tiles/pool.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@ async def map_context(self, scale: str) -> Map:
6969
"""Get a map from the pool."""
7070
q = self.storage[scale]
7171
_map = await q.get()
72+
t = time.time()
7273
try:
7374
yield _map
7475
finally:
7576
await q.put(_map)
77+
dt = time.time() - t
78+
log.debug(f"Returned map to pool for scale {scale} in {dt:.3f} seconds")

services/legacy-tileserver/uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)