Write each module's have and the node's own facts beside the report, grouped per module and keyed by the module the controller names (issue 1132)
The node-engine reads a resource's module and a declaration's builds, says it does in every report (reads_modules), groups the apply's outcome per module with every failing resource named, and writes have.<node>.<module> and have.<node>.node to the bucket only when a value differs, never ahead of or in place of the report (novox/hq ADR 0429 section 4).
This commit is contained in:
@@ -93,6 +93,9 @@ type Queue struct {
|
||||
saying sync.Mutex
|
||||
counted bool
|
||||
numbers numbered
|
||||
|
||||
// haves is what this node-engine writes beside its reports (novox/hq ADR 0429 §4, issue 1132).
|
||||
haves haveState
|
||||
}
|
||||
|
||||
// Reconcile is the reconcile's act, run by the queue's worker. See Queue.Reconcile.
|
||||
@@ -265,6 +268,14 @@ func (q *Queue) reconcile(ctx context.Context, asked bool) {
|
||||
return
|
||||
}
|
||||
if !asked && (q.News == nil || !q.News(report)) {
|
||||
// Not worth a report, but a reconcile found how each module is now: the have keys say it (issue 1132), so a
|
||||
// node-engine that restarted writes them again without waiting for a change.
|
||||
if q.noteApply(report) {
|
||||
q.mu.Lock()
|
||||
bus := q.bus
|
||||
q.mu.Unlock()
|
||||
q.writeHaves(ctx, bus)
|
||||
}
|
||||
return
|
||||
}
|
||||
if asked {
|
||||
@@ -324,6 +335,10 @@ func (q *Queue) tell(ctx context.Context, r Report, kind kindOf, settle ...Decla
|
||||
q.unasked = &r
|
||||
}
|
||||
if published {
|
||||
// After the report, which is sent first and unchanged; a write the bucket refuses never undoes it (issue 1132).
|
||||
if q.noteApply(r) {
|
||||
q.writeHaves(ctx, bus)
|
||||
}
|
||||
if keep && q.Unsaid != nil {
|
||||
if err := q.Unsaid.Said(r.Declared); err != nil {
|
||||
q.Say("said this apply's report, and cannot forget it: " + err.Error())
|
||||
@@ -354,6 +369,8 @@ func (q *Queue) stamp(r Report) Report {
|
||||
// Every report of a node-engine that orders its reports says it reads a generation (novox/hq issue
|
||||
// 234): this build does, and the controller sends one only to a machine that said so.
|
||||
r.ReadsGeneration = true
|
||||
// And the module of each resource and the build of each module (novox/hq ADR 0429 §4, issue 1132), the same way.
|
||||
r.ReadsModules = true
|
||||
return r
|
||||
}
|
||||
|
||||
@@ -538,6 +555,10 @@ func (q *Queue) SayHealth(ctx context.Context, h Health) bool {
|
||||
q.Say("could not say this machine's health: " + err.Error())
|
||||
return false
|
||||
}
|
||||
// A look that changed a module's health changes its have (issue 1132).
|
||||
if q.noteHealth(h) {
|
||||
q.writeHaves(ctx, bus)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user