Make pending assignments safe to race, settle them on a tick, and say only what was checked
Review of #150: a withdrawal could land between the look and the act, a failed ask read as a build in flight, a request kept the wrong asker, a build being registered read as not built, build "true" could ask a build nothing waited on, and a status read changed state. Claim a row under the machine's hold before making it, keep a request only once asked, settle on the controller's own tick, raise an assignment not made as a condition until it is answered, and tie each row to its machine.
This commit is contained in:
@@ -179,10 +179,11 @@ var ControllerVerbs = []Verb{
|
||||
}, []string{"node"}, "files", "diff")},
|
||||
{Name: "assign", Description: "Put a module on a machine. Refused with the mesh's own words when it cannot resolve there, " +
|
||||
"or when a seat its resources are applied through is held by nothing on the machine (novox/hq ADR 0207). " +
|
||||
"A module not registered yet is looked for (novox/hq issue 325): while its build runs — a merge that adds " +
|
||||
"a module asks for one — the assignment is kept as pending and made when the build registers it, said in " +
|
||||
"`status`, and expires with why if the build fails; a module known and not built is said, and build asks " +
|
||||
"for its build; a name the mesh never heard of is refused with the closest names.",
|
||||
"A module not registered yet is looked for (novox/hq issue 325, ADR 0261): while its build runs — a merge " +
|
||||
"that adds a module asks for one — the assignment is kept as pending and the controller makes it when the " +
|
||||
"build registers it; `status` lists it, and if the build fails it expires with why and raises a condition. " +
|
||||
"A module known and not built is said, and build asks for its build; a name with no module and no build " +
|
||||
"request kept is refused with the closest names.",
|
||||
Input: schema(map[string]string{"node": "the machine's name",
|
||||
"module": "the module's name; several comma-separated are judged together",
|
||||
"build": "\"true\": for a module known and not built (its last build failed, or was never asked), ask " +
|
||||
|
||||
Reference in New Issue
Block a user