MeliGraph.Bootstrapper (MeliGraph v0.3.1)

Copy Markdown View Source

Reconstrói o grafo no boot (e, no modo :horde, em cada realocação) via a MFA on_ready do Config, e expõe o estado de prontidão (ready?/1).

Por que existe: a lib não conhece a fonte da verdade (Postgres, etc.). O on_ready: {mod, fun, args} é o gancho que o app fornece para repovoar a ETS. Como em :horde a árvore da instância só existe no nó dono e é recriada no failover, o Bootstrapper roda só no dono, no boot e a cada realocação — a ETS está sempre fresca (vazia) nesse momento, então o replay é correto. Em :local roda 1× no boot, dando paridade dev/single-node.

Não-bloqueante: init/1 apenas agenda :run e retorna na hora. Um load lento de Postgres não pode segurar o init — em :horde isso estouraria o timeout do start_child do Horde.DynamicSupervisor e o Horde acharia que a árvore não subiu.

Falha de rebuild: a MFA roda numa Task linkada. Se ela levanta, o Bootstrapper cai junto (não fazemos trap_exit); como é o último filho de um supervisor :rest_for_one, restarts repetidos escalam para o restart da árvore inteira (ETS volta vazia) → retry limpo. Contrato do loader: assuma grafo vazio (o insert_edge da v0.2.x soma pesos no re-insert, então não é idempotente sobre ETS já populada).

Summary

Functions

true quando a MFA on_ready terminou (ou quando on_ready é nil).

Functions

ready?(conf)

@spec ready?(MeliGraph.Config.t()) :: boolean()

true quando a MFA on_ready terminou (ou quando on_ready é nil).

start_link(opts)