From 802f0e2c65e543330a4e6ad098d990810c72f8e4 Mon Sep 17 00:00:00 2001 From: Niek Otten Date: Mon, 27 Jul 2026 13:38:47 +0200 Subject: [PATCH] =?UTF-8?q?fix(infra):=20cap=20Objecten/Objecttypen=20uWSG?= =?UTF-8?q?I=20to=201=20worker=20=E2=80=94=20unstarve=20verify-stack=20e2e?= =?UTF-8?q?=20(closes=20#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Maykin images run uWSGI with 4 processes × 4 threads by default. Two web services × 4 idle Django workers (~200 MB each) sat idle during the Playwright e2e step and starved the single shared CI runner, so Keycloak and the portals stopped responding (login never loaded) and Chromium crashed — main verify-stack went red from run 2177 (post-#142) onward while the PR runs passed on a less loaded runner. These APIs only serve single-request smoke checks and are idle during e2e, so 1 worker is plenty. Verified locally: both services healthy with UWSGI_PROCESSES=1 and make verify-objecten / verify-objecttypen still green. Co-Authored-By: Claude Opus 4.8 (1M context) --- infra/docker-compose.local.yml | 6 ++++++ infra/docker-compose.yml | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/infra/docker-compose.local.yml b/infra/docker-compose.local.yml index a03cacd..a148115 100644 --- a/infra/docker-compose.local.yml +++ b/infra/docker-compose.local.yml @@ -583,6 +583,9 @@ services: objecttypen-init: image: docker.io/maykinmedia/objecttypes-api:${OBJECTTYPES_TAG:-3.4.2} environment: &objecttypen-env-local + # 1 uWSGI worker, not the image default of 4×4 (#144) — idle workers starve the CI runner. + UWSGI_PROCESSES: "1" + UWSGI_THREADS: "2" DJANGO_SETTINGS_MODULE: objecttypes.conf.docker SECRET_KEY: ${OBJECTTYPES_SECRET_KEY:-dev-only-not-for-production} DB_HOST: objecttypen-db @@ -644,6 +647,9 @@ services: objecten-init: image: docker.io/maykinmedia/objects-api:${OBJECTS_TAG:-3.4.0} environment: &objecten-env-local + # 1 uWSGI worker, not the image default of 4×4 (#144) — idle workers starve the CI runner. + UWSGI_PROCESSES: "1" + UWSGI_THREADS: "2" DJANGO_SETTINGS_MODULE: objects.conf.docker SECRET_KEY: ${OBJECTS_SECRET_KEY:-dev-only-not-for-production} DB_HOST: objecten-db diff --git a/infra/docker-compose.yml b/infra/docker-compose.yml index 2d0b2a0..c7a1fde 100644 --- a/infra/docker-compose.yml +++ b/infra/docker-compose.yml @@ -596,6 +596,11 @@ services: objecttypen-init: image: docker.io/maykinmedia/objecttypes-api:${OBJECTTYPES_TAG:-3.4.2} environment: &objecttypen-env + # 1 uWSGI worker, not the image default of 4×4: this API only serves single-request smoke + # checks and sits idle during the e2e step — 4 idle Django workers each pin ~200 MB and starve + # the shared CI runner (#144). Init ignores this (it runs setup_configuration, not uwsgi). + UWSGI_PROCESSES: "1" + UWSGI_THREADS: "2" DJANGO_SETTINGS_MODULE: objecttypes.conf.docker SECRET_KEY: ${OBJECTTYPES_SECRET_KEY:-dev-only-not-for-production} DB_HOST: objecttypen-db @@ -662,6 +667,9 @@ services: objecten-init: image: docker.io/maykinmedia/objects-api:${OBJECTS_TAG:-3.4.0} environment: &objecten-env + # 1 uWSGI worker, not the image default of 4×4 — see the objecttypen note above (#144). + UWSGI_PROCESSES: "1" + UWSGI_THREADS: "2" DJANGO_SETTINGS_MODULE: objects.conf.docker SECRET_KEY: ${OBJECTS_SECRET_KEY:-dev-only-not-for-production} DB_HOST: objecten-db -- 2.54.0