todos-contra-el-fuego-web/imports/startup/server
vjrj 56f53e2c23
All checks were successful
build-image / test (push) Successful in 2m49s
build-image / build (push) Successful in 13m4s
perf(subsUnion): unión en árbol, menos vértices, timeout y cota de memoria
Cuatro endurecimientos salidos del banco de carga (bench/union-bench.js), cada
uno con su número:

1. Unión en ÁRBOL en vez de en cadena. La cadena unía siempre contra un polígono
   acumulado que no paraba de crecer. Con 1.000 suscripciones repartidas por el
   mundo —el peor caso, círculos que no se solapan— eran 238 s; en árbol son
   3,6 s, con un documento idéntico. Con datos realistas (España) 10.000
   suscripciones bajan de 39,3 s a 23,5 s. test/server/calcUnionAsync.test.js
   comprueba la equivalencia contra una referencia calculada en cadena.

2. 64 vértices por círculo en vez de 144, configurable con
   `private.unionCircleSteps`. Con 10.000 suscripciones: 23,5 s → 10,0 s y el
   pico de RSS de 777 MB → 421 MB. En pantalla un círculo de 64 lados sigue
   siendo un círculo, y la capa de zonas es un adorno difuso; el host de
   despliegue tiene 5,9 GB para todo el stack.

3. Timeout del worker (10 min por defecto, `private.unionWorkerTimeoutMs`). Un
   worker que no contestaba dejaba la promesa colgada y con ella la cola entera:
   `busy` se quedaba en true y no se volvía a calcular ninguna unión hasta
   reiniciar, sin que nada fallase. Se reintenta una vez ante un error real,
   nunca ante un timeout.

4. Cota de heap del worker (1 GB, `private.unionWorkerMaxHeapMb`), para que un
   caso patológico muera con ERR_WORKER_OUT_OF_MEMORY —que esta capa convierte
   en un rechazo, dejando la unión anterior intacta— en vez de que el kernel se
   lleve por delante el proceso de Meteor.

Además unionTelemetry.js manda a GlitchTip las uniones que pasan de un minuto y
las que hay que degradar por tamaño, y registra duración/tamaño de cada una. El
único aviso de que la unión iba mal era, hasta ahora, que el mapa se quedaba
viejo.

Smoke REST byte-idéntico. 90 tests en verde.
2026-08-01 22:32:37 +02:00
..
accounts WIP(meteor3): boot progresses past linker + several async fixes 2026-07-13 23:46:45 +02:00
api.js quality: web debt batch (tests runner, FireContainer, rate-limit, maps, i18n) 2026-07-21 22:59:06 +02:00
calcUnionAsync.js perf(subsUnion): unión en árbol, menos vértices, timeout y cota de memoria 2026-08-01 22:32:37 +02:00
catchExceptions.js Removed some coments 2018-05-03 01:37:22 +02:00
cron.js notif: remove code migrated to tcef-notifications microservice 2026-07-13 19:45:13 +02:00
email.js WIP(meteor3): boot progresses past linker + several async fixes 2026-07-13 23:46:45 +02:00
facts.js meteor3: purge dead client packages — web UI renders on 3.1 2026-07-14 11:32:19 +02:00
feedback.js Change feedback email 2018-02-21 20:50:44 +01:00
fixtures.js meteor3: re-enable fixtures and sitemaps with async/Meteor-3 implementations 2026-07-14 07:06:07 +02:00
i18n.js deps: i18next 10 -> 23, react-i18next 7 -> 14 2026-07-18 06:28:41 +02:00
index.js sentry: tunnel client events through the app to dodge Cloudflare's 503 2026-07-17 18:17:47 +02:00
IPGeocoder.js smoke: REST API regression harness + baseline snapshots (Meteor 1.6.1.1) 2026-07-13 19:42:55 +02:00
isMaster.js Added master/worker pm2 detection and mail configuration 2018-04-04 08:42:02 +02:00
leaflet-workaround.js Refactor server startup: elimina segfaults, añade leaflet-workaround 2026-07-12 23:26:16 +02:00
migrations.js meteor3: port all 18 migration up() bodies to async 2026-07-14 11:36:30 +02:00
prerender.js Remove log 2018-02-17 08:52:50 +01:00
ravenLogger.js meteor3: raven -> @sentry/node + @sentry/browser 2026-07-16 12:20:02 +02:00
rest.js Rest api updated 2018-06-14 17:55:38 +02:00
sentryTunnel.js sentry: tunnel client events through the app to dodge Cloudflare's 503 2026-07-17 18:17:47 +02:00
sitemaps.js meteor3: re-enable fixtures and sitemaps with async/Meteor-3 implementations 2026-07-14 07:06:07 +02:00
subsUnion.js perf(subsUnion): unión en árbol, menos vértices, timeout y cota de memoria 2026-08-01 22:32:37 +02:00
subsUnionLogic.js perf(subsUnion): unión en árbol, menos vértices, timeout y cota de memoria 2026-08-01 22:32:37 +02:00
unionBounds.js refactor(subsUnion): extract the logic out of Meteor.startup, cap the union size 2026-08-01 18:02:04 +02:00
unionSizeGuard.js refactor(subsUnion): extract the logic out of Meteor.startup, cap the union size 2026-08-01 18:02:04 +02:00
unionTelemetry.js perf(subsUnion): unión en árbol, menos vértices, timeout y cota de memoria 2026-08-01 22:32:37 +02:00