The mesh-catalog container goes with its Dockerfile, build bases, bus credential and mesh-state directory. Its words are the database URL file where the mesh writes it. `pg` is a dependency in its package.json, which the builder now installs and inlines into the bundle (mesh-controller: a TypeScript bundle installs its module's own packages). `prepares: true` needs a container running the module's own artifact, so it becomes what ADR 0198 §3 says it is: prepare/index.js run by node as a run-once process, with the same words and no bus, before the runtime is started with the version that needs it, and again when the database URL changes.
19 lines
1.1 KiB
TypeScript
19 lines
1.1 KiB
TypeScript
// The catalogue's state, brought to the shape this version needs (novox/hq ADR 0135).
|
|
//
|
|
// **The mesh runs this before the version that needs it, and does not start that version if it
|
|
// fails** — and the refusal reaches this module and nothing else on the machine
|
|
// (novox/hq ADR 0136). That is the whole difference from where this used to happen: at start, inside
|
|
// the runtime, a schema that could not be brought up was a crash loop, the graph kept a gap, and
|
|
// nothing anywhere said so.
|
|
//
|
|
// Nothing here connects to the broker. Preparation runs before the version that would use it, so
|
|
// there is nothing yet to talk to: the host runs this file as a run-once process, with the module's
|
|
// words and no bus (novox/hq ADR 0198 §3), before the node's runtime is started with the version
|
|
// that needs it, and this process exiting non-zero is how the host knows the step did not complete.
|
|
import { Graph } from "../store.js";
|
|
|
|
const graph = Graph.fromEnv();
|
|
await graph.migrate();
|
|
console.log("[mesh-catalog] the module graph's schema is what this version needs");
|
|
await graph.close();
|