Every merge opened a walk and the next merge of the branch superseded it: two catalogue merges 18 s apart left a walk no delivery held, and the operator started it by hand 58 minutes later. A merge now joins the open batch, kept in the store (migration 0089), which is cut into one walk when no merge came for merge-window (90 s) or at merge-window-at-most (10 min): one commit per repository, the latest of its branch, with every file the batch's merges changed. One walk at a time; a started walk is never superseded, a waiting one is folded into the next. The walk names every merge it answers on the wire (delivery.merges, taken_over_by, batch). A failed walk walks its earlier merges alone, newest first, until one is delivered. A delivery group's order becomes tier edges inside the walk. plans shows the batch assembling; S18 and S19 bound its waits; S16 names the merges a waiting walk answers.
164 lines
4.0 KiB
JSON
164 lines
4.0 KiB
JSON
{
|
|
"module": "mesh-controller",
|
|
"version": "1",
|
|
"slug": "control",
|
|
"claims": [
|
|
{
|
|
"name": "mesh-controller",
|
|
"scope": "mesh"
|
|
}
|
|
],
|
|
"accesses": [
|
|
{
|
|
"path": "/var/lib/mesh-broker-tls",
|
|
"mode": "read"
|
|
}
|
|
],
|
|
"own-secrets": {
|
|
"inventory": "${dir:mesh-state}/inventory",
|
|
"identity": "${dir:mesh-state}/identity",
|
|
"licences": "${dir:mesh-state}/licences",
|
|
"broker": "${dir:mesh-state}/broker",
|
|
"broker-management": "${dir:mesh-state}/broker-management",
|
|
"broker-address": "${dir:mesh-state}/broker-address",
|
|
"bus": "${dir:mesh-state}/bus"
|
|
},
|
|
"secrets-owner": "mesh-controller",
|
|
"prepares": true,
|
|
"settings": {
|
|
"merge-window": {
|
|
"kind": "preference",
|
|
"default": "90s",
|
|
"why": "merges are collected while they keep coming, and a batch is planned once no merge came for this long (novox/hq ADR 0276)"
|
|
},
|
|
"merge-window-at-most": {
|
|
"kind": "preference",
|
|
"default": "10m",
|
|
"why": "a busy period never holds a batch longer than this after its first merge (novox/hq ADR 0276)"
|
|
}
|
|
},
|
|
"tools": [
|
|
"tools",
|
|
"calls",
|
|
"status",
|
|
"nodes",
|
|
"node",
|
|
"modules",
|
|
"seats",
|
|
"builds",
|
|
"plans",
|
|
"delivery-plan",
|
|
"delivery-order",
|
|
"delivery-check",
|
|
"deliver",
|
|
"delivery-stop",
|
|
"delivery-walks",
|
|
"plan",
|
|
"assign",
|
|
"unassign",
|
|
"pin",
|
|
"unpin",
|
|
"push",
|
|
"rotate",
|
|
"give",
|
|
"issue",
|
|
"token",
|
|
"settings",
|
|
"command",
|
|
"queue",
|
|
"cancel",
|
|
"clear",
|
|
"rebuild",
|
|
"replay",
|
|
"kill",
|
|
"pause",
|
|
"resume",
|
|
"hand-act",
|
|
"drill",
|
|
"warranted",
|
|
"hand-acts",
|
|
"durations",
|
|
"conditions",
|
|
"healers",
|
|
"doctor",
|
|
"upgrade",
|
|
"bus",
|
|
"retire",
|
|
"cleanup",
|
|
"dead-letters",
|
|
"root-free",
|
|
"data",
|
|
"build",
|
|
"artifacts",
|
|
"collect",
|
|
"images",
|
|
"mirrors"
|
|
],
|
|
"resources": [
|
|
{
|
|
"id": "account",
|
|
"type": "user",
|
|
"name": "mesh-controller",
|
|
"shell": "/usr/bin/nologin",
|
|
"home": "/var/lib/mesh-controller"
|
|
},
|
|
{
|
|
"id": "mesh-state",
|
|
"type": "directory",
|
|
"mode": "0700",
|
|
"place": "mesh",
|
|
"owner": "mesh-controller"
|
|
},
|
|
{
|
|
"id": "merge-window",
|
|
"type": "file",
|
|
"path": "${dir:mesh-state}/merge-window.json",
|
|
"mode": "0600",
|
|
"owner": "mesh-controller",
|
|
"content": "{\n \"merge-window\": \"${setting:merge-window}\",\n \"merge-window-at-most\": \"${setting:merge-window-at-most}\"\n}\n"
|
|
},
|
|
{
|
|
"id": "controller",
|
|
"type": "process",
|
|
"name": "mesh-controller",
|
|
"artifact": "controller",
|
|
"run": [
|
|
"./mesh-controller",
|
|
"serve"
|
|
],
|
|
"user": "mesh-controller",
|
|
"env": {
|
|
"MESH_BROKER_CERTIFICATE": "/var/lib/mesh-broker-tls/tls.crt",
|
|
"MESH_STORE_INVENTORY_FILE": "${dir:mesh-state}/inventory",
|
|
"MESH_STORE_IDENTITY_FILE": "${dir:mesh-state}/identity",
|
|
"MESH_STORE_LICENCES_FILE": "${dir:mesh-state}/licences",
|
|
"MESH_BROKER_MANAGEMENT_FILE": "${dir:mesh-state}/broker-management",
|
|
"MESH_BROKER_ADDRESS_FILE": "${dir:mesh-state}/broker-address",
|
|
"MESH_STORE_INVENTORY_PORT": "${seat:mesh-store:5432}",
|
|
"MESH_STORE_IDENTITY_PORT": "${seat:mesh-store:5432}",
|
|
"MESH_STORE_LICENCES_PORT": "${seat:mesh-store:5432}",
|
|
"MESH_BROKER_MANAGEMENT_PORT": "${seat:mesh-broker:15672}",
|
|
"MESH_BROKER_ADDRESS_PORT": "${seat:mesh-broker:5671}",
|
|
"MESH_BUS_NATS_FILE": "${dir:mesh-state}/bus",
|
|
"MESH_CONTROLLER_VERSION": "${version}",
|
|
"MESH_MERGE_WINDOW_FILE": "${dir:mesh-state}/merge-window.json"
|
|
},
|
|
"replaces": [
|
|
"server"
|
|
]
|
|
}
|
|
],
|
|
"build": {
|
|
"artifacts": [
|
|
{
|
|
"name": "controller",
|
|
"kind": "bundle",
|
|
"language": "go",
|
|
"system": "arch",
|
|
"from": "cmd/mesh-controller",
|
|
"binary": "mesh-controller"
|
|
}
|
|
]
|
|
}
|
|
}
|