Skip to content

Add explicit executor worker heartbeats - #211

Open
giscebot wants to merge 2 commits into
mainfrom
fix/issue-188-worker-heartbeats
Open

giscebot wants to merge 2 commits into
mainfrom
fix/issue-188-worker-heartbeats

Conversation

@giscebot

@giscebot giscebot commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #188

Summary

  • persist one explicit heartbeat per executor worker, including PID, loop state, active job, and error count
  • update heartbeats independently while workers are idle or blocked in a running dispatch
  • remove heartbeat rows from previous executor processes at startup, after acquiring the exclusive executor lock
  • alert separately on missing and stale worker heartbeats in gab monitor
  • expose worker liveness through the dashboard process API

Validation

  • pytest -q — 361 passed
  • python3 -m compileall -q src
  • git diff --check

Risk

SQLite writes remain one small upsert per worker every five seconds. Heartbeat storage is bounded to the current executor process: stale rows survive a crash for diagnosis, then are removed safely on the next startup while holding the exclusive executor lock.

Co-authored-by: ecarreras <294235+ecarreras@users.noreply.github.com>
@ecarreras

Copy link
Copy Markdown
Member

@giscebot aquesta informació anirà fent créixer la base de dades i segurament un cop hagi acabat el job no és important mantenir-la, pensa en la durabilitat i el consum d'espai en la base de dades

@giscebot

Copy link
Copy Markdown
Collaborator Author

Tens raó: tal com està ara, no creix a cada heartbeat ni a cada job perquè es fa UPSERT, però sí que creix a cada reinici de l'executor. El worker_id és ${executor_id}/worker-N i l'executor_id és nou per execució; per tant, les files dels executors antics no es reutilitzen ni s'eliminen. És un creixement lent, però sense límit, i a més deixa dades que ja no tenen valor operatiu.

La solució que considero més robusta és mantenir aquesta taula com a estat efímer: a l'arrencada, sota el lock exclusiu de l'executor, eliminar els heartbeats amb executor_id diferent de l'actual abans d'inserir els workers nous. Això també neteja correctament després d'un crash; fer-ho només al shutdown no seria suficient. Mantindria els heartbeats de l'execució actual mentre està parada/stale perquè el monitor pugui diagnosticar la caiguda fins a la següent arrencada.

Caldria afegir un test de reinici que creï heartbeats d'un executor anterior i comprovi que, després d'arrencar el nou, la taula queda limitada als workers actuals. Amb l'estat actual no donaria el punt de durabilitat per resolt.

@ecarreras

Copy link
Copy Markdown
Member

@giscebot fes-ho així, resolt els conflictes i fes-ho

Resolve the monitor conflict while retaining quarantine and worker liveness alerts. Remove heartbeat rows from prior executor processes after acquiring the exclusive executor lock.

Co-authored-by: ecarreras <294235+ecarreras@users.noreply.github.com>
@giscebot

Copy link
Copy Markdown
Collaborator Author

Fet a 66ebe16.

  • He resolt els conflictes amb main, preservant al monitor tant les alertes de quarantena com les de heartbeats.
  • En arrencar, i només després d’adquirir el lock exclusiu de l’executor, s’eliminen els heartbeats amb un executor_id anterior. Això manté la taula limitada als workers de l’execució actual sense perdre el diagnòstic d’un crash fins al següent arrencada.
  • El test de reinici crea dues files d’executors antics i comprova que després de run() només queda el worker actual.
  • Validació completa: 361 passed; git diff --check net.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add explicit executor worker heartbeats

2 participants