Volver a la wiki

Modo HTTP para bib_openapi — Resolución OOM en STAGE CX23 (s50)

Resumen

En el sprint s50 (05-05-2026) se migró el extractor de schema OpenAPI de la Biblioteca de docker exec a HTTP, resolviendo el OOM (rc=137) que bloqueaba el reindexado automático en el servidor STAGE CX23 (4 GB de RAM).

Commit: 05b0bde19ebd88e4dd409cd0006228b1b116e1f7
Autor: @Esquembri


Problema raíz

El script bib_openapi.py extraía el schema OpenAPI ejecutando python -c api.get_openapi_schema() dentro del container Django mediante docker exec. Esta operación requería cargar Django entero en un proceso efímero, con un pico de ~500 MB de RAM. En STAGE CX23 (4 GB compartidos con la app y Postgres), el kernel mataba el proceso con rc=137 (OOM kill).

ERROR docker exec rc=137
ERROR: rc=137 indica OOM kill — usar --url HTTP en lugar de --container

Solución implementada

1. Nuevo endpoint GET /api/openapi-export

Registrado en config/urls.py. Devuelve api.get_openapi_schema() en el proceso web ya cargado — sin coste adicional de RAM. Protegido por _InternalToolsAuth (Bearer token, INTERNAL_TOOLS_TOKEN, mínimo 32 chars).

2. Modo HTTP en bib_openapi.py

Nueva función extract_openapi_via_http(url, token) que realiza un GET al endpoint con Authorization: Bearer. Se convierte en el modo default (sin --container). El modo docker exec queda como fallback explícito para dev local.

3. Token seguro en cron-bib-reindex.sh

El cron lee el token desde /opt/bib-reindex/.token-internal (chmod 600) y lo exporta como INTERNAL_TOOLS_TOKEN antes de llamar a bib_openapi.py --push. Eliminada la detección de container web activo (docker ps).


Arquitectura antes / después

ANTES (docker exec):
  cron → docker ps → docker exec container → python -c → Django carga entero → OOM ❌

DESPUÉS (HTTP):
  cron → leer .token-internal → bib_openapi.py --push → GET /api/openapi-export → Django ya cargado ✅

Archivos modificados

ArchivoCambio
config/urls.py_InternalToolsAuth + @api.get("/openapi-export")
scripts/bib_openapi.pyModo HTTP default, modo docker como fallback, mensaje OOM
scripts/cron-bib-reindex.shLee .token-internal, exporta INTERNAL_TOOLS_TOKEN, sin docker ps

Impacto


Pasos post-deploy

Ver runbook runbook--infra--deploy-internal-tools-token para la secuencia completa (token, Dokploy, cron entry).


Véase también

Subir