One machine's unanswerable requirement does not remove it from the mesh
The pass that answers *what does this node offer* takes a failed resolution to mean it learned nothing about that node. So refusing an unanswerable requirement there made the machine disappear — and every other machine was then told, wrongly, that the two of them shared no private network. A wrong answer about a machine nobody asked about, caused by a fault on a third. The lab found it: one module needing a licence that had not been added yet made two unrelated machines look disconnected. The second pass still refuses it, where the question is actually being asked.
This commit is contained in:
@@ -324,6 +324,20 @@ func Resolve(catalogue map[string]Manifest, assigned []string, node Node, world
|
||||
reported[want] = true
|
||||
continue
|
||||
}
|
||||
if world.Unchecked {
|
||||
// The first pass, which exists only to answer *what does this node offer*.
|
||||
//
|
||||
// **Refusing here makes the machine vanish** rather than reporting a problem: the
|
||||
// caller takes a failed resolution to mean it learned nothing about this node, so
|
||||
// one unanswerable requirement on one machine removes that machine from the
|
||||
// private network as far as every OTHER machine is concerned — and they are then
|
||||
// told, wrongly, that the two of them share no network.
|
||||
//
|
||||
// That is a wrong answer about a machine nobody asked about, caused by a fault on
|
||||
// a third. The second pass refuses it properly, where the question is being asked.
|
||||
reported[want] = true
|
||||
continue
|
||||
}
|
||||
reported[want] = true
|
||||
problems = append(problems, fmt.Sprintf(
|
||||
"nothing provides %q, wanted by %s", want, because[want]))
|
||||
|
||||
Reference in New Issue
Block a user