52 lines
1.7 KiB
Go
52 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"sort"
|
|
|
|
sdkdelivery "git.novox.be/novox/mesh-sdk/go/delivery"
|
|
)
|
|
|
|
// composeTrace, when set, is told what composing a node saw and decided: the Input's credential state before it composes, and for
|
|
// each module the digest it composed against the digest already written. A test sets it to read why a composition did or did not
|
|
// move; the controller never does.
|
|
var composeTrace func(string)
|
|
|
|
// traceInput says what the node's composition will read of the pair credentials: those no row holds (would-make) and those held.
|
|
func traceInput(ctx context.Context, open *stores, node string) {
|
|
in, err := inputFor(ctx, open)
|
|
if err != nil {
|
|
composeTrace(fmt.Sprintf("%s: the Input cannot be read: %v", node, err))
|
|
return
|
|
}
|
|
composeTrace(fmt.Sprintf("%s: before composing, would make %+v; credentials held %+v", node, in.wouldMake, in.Credentials))
|
|
}
|
|
|
|
// traceComposed says, per composition of a node, the digest composed now against the one written.
|
|
func traceComposed(ctx context.Context, at composedPlace, node string, comps map[string]sdkdelivery.Composed) {
|
|
keys := make([]string, 0, len(comps))
|
|
for k := range comps {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Strings(keys)
|
|
for _, key := range keys {
|
|
now, err := sdkdelivery.ComposedDigestOf(comps[key])
|
|
if err != nil {
|
|
composeTrace(fmt.Sprintf("%s: %s: no digest: %v", node, key, err))
|
|
continue
|
|
}
|
|
written := "none"
|
|
if e, err := at.digests.Get(ctx, key); err == nil {
|
|
if v, err := sdkdelivery.DecodeComposedDigest(e.Value()); err == nil {
|
|
written = v.Digest
|
|
}
|
|
}
|
|
same := "CHANGED"
|
|
if written == now {
|
|
same = "same"
|
|
}
|
|
composeTrace(fmt.Sprintf("%s: %s: composed %.19s, written %.19s: %s", node, key, now, written, same))
|
|
}
|
|
}
|