diff --git a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/integration_test.go b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/integration_test.go index a0231066..6f3f28a0 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/integration_test.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/integration_test.go @@ -49,9 +49,9 @@ import ( "git.novox.be/novox/mesh-sdk/go/process" "git.novox.be/novox/mesh-sdk/go/seatdef" + "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient/enginereads" "git.novox.be/novox/mesh-contracts/go/seats/nodeengine" "git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshconditionsclient" - "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient/enginereads" "git.novox.be/novox/mesh-delivery/sdk/graph" "git.novox.be/novox/mesh-sdk/go/views" @@ -534,7 +534,7 @@ func TestWantsAreWrittenAndNoDifferenceIs(t *testing.T) { if err != nil { t.Fatal(err) } - b.putJSON(t, meshprovisionerclient.ProvisionsBucket, "ace.app.database", raw) + b.putJSON(t, buckets.Provisions, "ace.app.database", raw) } // The provisioner keys it from the manifests, as soon as they are known and whether the provider is placed yet or not. asked(meshprovisionerclient.Asked, "the provider's build is not done") diff --git a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/main.go b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/main.go index d72fc8a0..99ad4ee2 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/main.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/main.go @@ -27,7 +27,6 @@ import ( occ "git.novox.be/novox/mesh-contracts/operator-and-conversation/go/clients/operatorchannelclient" oc "git.novox.be/novox/mesh-contracts/operator-and-conversation/go/seats/operatorchannel" mma "git.novox.be/novox/mesh-contracts/placement/go/seats/meshmoduleassigner" - "git.novox.be/novox/mesh-contracts/provisioning/go/clients/meshprovisionerclient" "git.novox.be/novox/mesh-sdk/go/announce" "git.novox.be/novox/mesh-sdk/go/process" @@ -64,7 +63,7 @@ var readBuckets = []string{ buckets.Builds, buckets.Presence, buckets.Have, - meshprovisionerclient.ProvisionsBucket, + buckets.Provisions, buckets.Source, buckets.Merges, } @@ -140,7 +139,7 @@ func open(ctx context.Context, js process.BucketOpener, logf func(string, ...any logf("the bucket %s cannot be opened (%v): it is bound once the bus says it was made", name, err) continue } - if name == meshprovisionerclient.ProvisionsBucket && err != nil { + if name == buckets.Provisions && err != nil { // The seat mesh-provisioner's state, with its own delivery (ADR 0570 ยง4): bound once the bus says it was made; // until then no want waits for a provision, as before. logf("the bucket %s cannot be opened (%v): it is bound once the bus says it was made", name, err) @@ -187,7 +186,7 @@ func open(ctx context.Context, js process.BucketOpener, logf func(string, ...any // states and those new with a delivery of their own, bound once made, and the two that choose the grants' source. func startsWithout(name string) bool { switch name { - case plc.SeatHoldersBucket, meshprovisionerclient.ProvisionsBucket, assign.PoliciesBucket, assign.FindingsBucket, + case plc.SeatHoldersBucket, buckets.Provisions, assign.PoliciesBucket, assign.FindingsBucket, buckets.Puts, buckets.Source, buckets.Merges, engineReadsBucket: return true } @@ -282,7 +281,7 @@ var watched = []string{ buckets.Differences, buckets.Wants, assign.PoliciesBucket, - meshprovisionerclient.ProvisionsBucket, + buckets.Provisions, plc.SeatHoldersBucket, buckets.Source, buckets.Merges, @@ -428,7 +427,7 @@ func follow(ctx context.Context, js jetstream.JetStream, nc process.Subscriber, } } // And the two that choose where grants are read from, with the same delivery as the grants part that writes one. - for _, name := range []string{buckets.Grants, assign.PoliciesBucket, meshprovisionerclient.ProvisionsBucket, plc.SeatHoldersBucket} { + for _, name := range []string{buckets.Grants, assign.PoliciesBucket, buckets.Provisions, plc.SeatHoldersBucket} { if kvs[name] == nil && js != nil { name := name process.AwaitBucket(ctx, js, nc, name, "until then the bucket is not read", diff --git a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/pass.go b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/pass.go index fe5eeac0..0a672ffa 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/pass.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/pass.go @@ -5,6 +5,12 @@ import ( "context" "encoding/json" "errors" + "maps" + "mesh-delivery-assigner/internal/buckets" + "slices" + "strings" + "time" + "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient" mwc "git.novox.be/novox/mesh-contracts/placement/go/clients/meshwantsclient" "git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog" @@ -12,11 +18,6 @@ import ( "git.novox.be/novox/mesh-delivery/modules/mesh-grants/grantsstate" "git.novox.be/novox/mesh-networking/modules/mesh-wireguard/go/overlay" "git.novox.be/novox/mesh-sdk/go/motion" - "maps" - "mesh-delivery-assigner/internal/buckets" - "slices" - "strings" - "time" oc "git.novox.be/novox/mesh-contracts/operator-and-conversation/go/seats/operatorchannel" "git.novox.be/novox/mesh-contracts/provisioning/go/clients/meshprovisionerclient" @@ -941,12 +942,12 @@ func chosenOf(chosen map[string]catalogue.PersonPolicy, module string) *catalogu // provision is also said as the assigner's finding `provider..provision-failed` (a waiting one is the watchman's // needs-operator), deleted once it is no longer failed. func (p *passer) provisionsOf() func(module string) func(node string) map[string]meshprovisionerclient.Provision { - if p.kvs[meshprovisionerclient.ProvisionsBucket] == nil { + if p.kvs[buckets.Provisions] == nil { return func(string) func(string) map[string]meshprovisionerclient.Provision { return nil } } by := map[string]map[string]map[string]meshprovisionerclient.Provision{} // module, node, key failed := map[string]meshprovisionerclient.Provision{} - for key, raw := range p.w.read(meshprovisionerclient.ProvisionsBucket) { + for key, raw := range p.w.read(buckets.Provisions) { pr, err := meshprovisionerclient.Decode(raw) if err != nil { continue diff --git a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/pass_test.go b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/pass_test.go index 010e0816..b039ad13 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/pass_test.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/pass_test.go @@ -33,8 +33,8 @@ import ( "git.novox.be/novox/mesh-sdk/go/busretry" "git.novox.be/novox/mesh-sdk/go/catalogue" - "git.novox.be/novox/mesh-contracts/go/seats/nodeengine" "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient/enginereads" + "git.novox.be/novox/mesh-contracts/go/seats/nodeengine" "git.novox.be/novox/mesh-delivery/sdk/graph" "mesh-delivery-assigner/internal/assign" diff --git a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/puts.go b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/puts.go index b6c0236f..ec85652a 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/puts.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/puts.go @@ -5,12 +5,6 @@ import ( "encoding/json" "errors" "fmt" - "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient" - mwc "git.novox.be/novox/mesh-contracts/placement/go/clients/meshwantsclient" - "git.novox.be/novox/mesh-delivery/contracts/go/clients/meshdeliveryclient" - "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-assigner/asks" - "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds" - "git.novox.be/novox/mesh-delivery/modules/mesh-grants/grantsstate" "mesh-delivery-assigner/internal/buckets" "mesh-delivery-assigner/internal/puts" "sort" @@ -18,6 +12,13 @@ import ( "sync" "time" + "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient" + mwc "git.novox.be/novox/mesh-contracts/placement/go/clients/meshwantsclient" + "git.novox.be/novox/mesh-delivery/contracts/go/clients/meshdeliveryclient" + "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-assigner/asks" + "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds" + "git.novox.be/novox/mesh-delivery/modules/mesh-grants/grantsstate" + "git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshhandactsclient" occ "git.novox.be/novox/mesh-contracts/operator-and-conversation/go/clients/operatorchannelclient" "git.novox.be/novox/mesh-sdk/go/catalogue" diff --git a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/seat_tools_test.go b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/seat_tools_test.go index f4cd84cf..5eb037b5 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/seat_tools_test.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/seat_tools_test.go @@ -5,11 +5,6 @@ import ( "encoding/json" "errors" "fmt" - "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient" - "git.novox.be/novox/mesh-contracts/go/seats/nodeengine" - "git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient" - "git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog" - "git.novox.be/novox/mesh-sdk/go/keys" "mesh-delivery-assigner/internal/buckets" "os" "reflect" @@ -18,6 +13,12 @@ import ( "testing" "time" + "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient" + "git.novox.be/novox/mesh-contracts/go/seats/nodeengine" + "git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient" + "git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog" + "git.novox.be/novox/mesh-sdk/go/keys" + mcc "git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshconditionsclient" mmac "git.novox.be/novox/mesh-contracts/placement/go/clients/meshmoduleassignerclient" mma "git.novox.be/novox/mesh-contracts/placement/go/seats/meshmoduleassigner" @@ -325,13 +326,13 @@ func TestTheSeatsVerbs(t *testing.T) { }) t.Run("1954/D1: a failed provision is the assigner's finding until it is provided", func(t *testing.T) { findings := map[string][]byte{} - p := &passer{w: newWorld(), logf: func(string, ...any) {}, kvs: kvSet{meshprovisionerclient.ProvisionsBucket: nil}, findings: assign.Findings{ + p := &passer{w: newWorld(), logf: func(string, ...any) {}, kvs: kvSet{buckets.Provisions: nil}, findings: assign.Findings{ Put: func(k string, v []byte) error { findings[k] = v; return nil }, Delete: func(k string) error { delete(findings, k); return nil }}} failed, _ := meshprovisionerclient.Encode(meshprovisionerclient.Provision{Provision: "db", Consumer: meshprovisionerclient.End{Module: "photos", Node: "ace"}, Provider: meshprovisionerclient.End{Module: "postgres", Node: "novox"}, State: meshprovisionerclient.Failed, Why: "the role exists already"}) - p.w.putEntry(meshprovisionerclient.ProvisionsBucket, "ace.photos.db", failed, 1, time.Now()) - p.kvs[meshprovisionerclient.ProvisionsBucket] = &memKV{} + p.w.putEntry(buckets.Provisions, "ace.photos.db", failed, 1, time.Now()) + p.kvs[buckets.Provisions] = &memKV{} of := p.provisionsOf() if got := of("photos")("ace"); got["ace.photos.db"].State != meshprovisionerclient.Failed { t.Fatalf("provisions = %+v", got) @@ -341,7 +342,7 @@ func TestTheSeatsVerbs(t *testing.T) { } provided, _ := meshprovisionerclient.Encode(meshprovisionerclient.Provision{Provision: "db", Consumer: meshprovisionerclient.End{Module: "photos", Node: "ace"}, Provider: meshprovisionerclient.End{Module: "postgres", Node: "novox"}, State: meshprovisionerclient.Provided}) - p.w.putEntry(meshprovisionerclient.ProvisionsBucket, "ace.photos.db", provided, 2, time.Now()) + p.w.putEntry(buckets.Provisions, "ace.photos.db", provided, 2, time.Now()) p.provisionsOf() if len(findings) != 0 { t.Errorf("findings after provided = %v", findings) diff --git a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world.go b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world.go index f65ae0d3..ed34c4d9 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world.go @@ -3,6 +3,13 @@ package main import ( "context" "errors" + "maps" + "mesh-delivery-assigner/internal/buckets" + "slices" + "sort" + "sync" + "time" + "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient" "git.novox.be/novox/mesh-contracts/go/seats/nodeengine" wdc "git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshwatchdogsclient" @@ -13,12 +20,6 @@ import ( "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds" "git.novox.be/novox/mesh-delivery/sdk/trunk" "git.novox.be/novox/mesh-sdk/go/keys" - "maps" - "mesh-delivery-assigner/internal/buckets" - "slices" - "sort" - "sync" - "time" "github.com/nats-io/nats.go/jetstream" diff --git a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world_test.go b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world_test.go index cd70b04f..73a1d5cf 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world_test.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world_test.go @@ -2,13 +2,14 @@ package main import ( "context" - "git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient" - "git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog" - "git.novox.be/novox/mesh-delivery/modules/mesh-grants/grantsstate" "mesh-delivery-assigner/internal/buckets" "strings" "testing" "time" + + "git.novox.be/novox/mesh-delivery/contracts/go/clients/meshcatalogclient" + "git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog" + "git.novox.be/novox/mesh-delivery/modules/mesh-grants/grantsstate" ) // fakeManifests is the indexer's manifests bucket in memory. diff --git a/modules/mesh-delivery-assigner/internal/buckets/buckets.go b/modules/mesh-delivery-assigner/internal/buckets/buckets.go index 4aa589ce..e96a59d6 100644 --- a/modules/mesh-delivery-assigner/internal/buckets/buckets.go +++ b/modules/mesh-delivery-assigner/internal/buckets/buckets.go @@ -46,6 +46,10 @@ const ( Graph = IndexerModule + "_graph" ModulesRead = IndexerModule + "." + catalog.StateModules ManifestsRead = IndexerModule + "." + catalog.StateManifests + // ProvisionerModule is the holder of the seat mesh-provisioner, named from this module's manifest (reads its provisions); Provisions + // is its state provisions. + ProvisionerModule = "mesh-provisioner" + Provisions = ProvisionerModule + "_provisions" // Presence holds each part's presence and the node's. Presence = "mesh-delivery-watchman_" + watchdogs.StatePresence // Source and Merges are the gate's. diff --git a/modules/mesh-delivery-assigner/internal/buckets/buckets_test.go b/modules/mesh-delivery-assigner/internal/buckets/buckets_test.go index 70a0fa96..0b6de994 100644 --- a/modules/mesh-delivery-assigner/internal/buckets/buckets_test.go +++ b/modules/mesh-delivery-assigner/internal/buckets/buckets_test.go @@ -13,7 +13,7 @@ func TestBucketsAreTheEarlierNames(t *testing.T) { "Builds": {Builds, "mesh-delivery-builder_builds"}, "Grants": {Grants, "mesh-grants_grants"}, "Wants": {Wants, "mesh-delivery-assigner_wants"}, "Differences": {Differences, "mesh-delivery-assigner_differences"}, "Asks": {Asks, "mesh-delivery-assigner_asks"}, "Puts": {Puts, "mesh-delivery-assigner_puts"}, - "Policies": {Policies, "mesh-delivery-assigner_policies"}, "TellerModule": {TellerModule, "mesh-delivery-teller"}, + "Policies": {Policies, "mesh-delivery-assigner_policies"}, "Provisions": {Provisions, "mesh-provisioner_provisions"}, "TellerModule": {TellerModule, "mesh-delivery-teller"}, } { if c[0] != c[1] { t.Errorf("%s = %q, want %q", name, c[0], c[1]) diff --git a/modules/mesh-delivery-view/cmd/mesh-delivery-view-tools/main.go b/modules/mesh-delivery-view/cmd/mesh-delivery-view-tools/main.go index d70fed2b..1a8f828a 100644 --- a/modules/mesh-delivery-view/cmd/mesh-delivery-view-tools/main.go +++ b/modules/mesh-delivery-view/cmd/mesh-delivery-view-tools/main.go @@ -12,14 +12,13 @@ import ( "time" "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient" + "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient/enginereads" "git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshhandactsclient" "git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshwatchdogsclient" - "git.novox.be/novox/mesh-contracts/provisioning/go/clients/meshprovisionerclient" "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-builder/builds" "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-indexer/takein" "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-view/viewstate" "git.novox.be/novox/mesh-delivery/sdk/buildstep" - "git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient/enginereads" stdio "git.novox.be/novox/mesh-sdk/go" "git.novox.be/novox/mesh-sdk/go/busretry" "git.novox.be/novox/mesh-sdk/go/views" @@ -414,7 +413,7 @@ func main() { r.ConditionsState, r.AttemptsState = read(stdio.State(view.StatusConditionsState)), read(stdio.State(view.StatusAttemptsState)) r.PresenceState, r.StuckState = read(stdio.State(view.StatusPresenceState)), read(stdio.State(view.StatusStuckState)) r.SourceState = read(stdio.State(view.GateModule + ".source")) - r.ProvisionsState = read(stdio.State(meshprovisionerclient.ProvisionsRead)) + r.ProvisionsState = read(stdio.State(view.ProvisionsRead)) r.BuildLog = stdio.Log(builds.BuildLogRead).Since r.Pending = pendingOf u := view.UsageReader{Haves: r.HavesState, Resolved: read(stdio.State("mesh-config.resolved")), Tries: read(stdio.State("mesh-delivery-checker.tries")), diff --git a/modules/mesh-delivery-view/internal/view/names.go b/modules/mesh-delivery-view/internal/view/names.go index 9b4bbe4d..cf3698ce 100644 --- a/modules/mesh-delivery-view/internal/view/names.go +++ b/modules/mesh-delivery-view/internal/view/names.go @@ -14,6 +14,8 @@ import ( const ( IndexerModule = "mesh-delivery-indexer" AssignerModule = "mesh-delivery-assigner" + // ProvisionsRead is the seat mesh-provisioner's state provisions, as the manifest's `reads` names it. + ProvisionsRead = "mesh-provisioner.provisions" WatchmanModule = "mesh-delivery-watchman" GateModule = "mesh-delivery-gate" TellerModule = "mesh-delivery-teller" diff --git a/modules/mesh-delivery-view/manifest_test.go b/modules/mesh-delivery-view/manifest_test.go index 29894aaf..dcb952c3 100644 --- a/modules/mesh-delivery-view/manifest_test.go +++ b/modules/mesh-delivery-view/manifest_test.go @@ -159,6 +159,9 @@ func TestManifestIsTakenAndReadsOnly(t *testing.T) { // 1134/AC7 t.Errorf("the view reads %s, its manifest's reads are %v", read, m.Reads) } } + if !slices.Contains(m.Reads, view.ProvisionsRead) { + t.Errorf("the view reads %s, its manifest's reads are %v", view.ProvisionsRead, m.Reads) + } if !slices.Contains(m.Reads, view.SignersRead) { t.Errorf("the view reads %s, its manifest's reads are %v", view.SignersRead, m.Reads) } diff --git a/modules/mesh-delivery-watchman/cmd/mesh-delivery-watchman/main.go b/modules/mesh-delivery-watchman/cmd/mesh-delivery-watchman/main.go index 8173d2af..3fb22fe7 100644 --- a/modules/mesh-delivery-watchman/cmd/mesh-delivery-watchman/main.go +++ b/modules/mesh-delivery-watchman/cmd/mesh-delivery-watchman/main.go @@ -27,7 +27,6 @@ import ( "github.com/nats-io/nats.go/jetstream" "git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshwatchdogsclient" - "git.novox.be/novox/mesh-contracts/provisioning/go/clients/meshprovisionerclient" "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-indexer/takein" "git.novox.be/novox/mesh-delivery/sdk/buildstep" @@ -382,21 +381,21 @@ func run(ctx context.Context, getenv func(string) string, logOut io.Writer) erro provisionsWatch := func(kv jetstream.KeyValue) (jetstream.KeyWatcher, error) { pw, err := settle(ctx, kv, func(e jetstream.KeyValueEntry) { w.Provision(e.Key(), e.Value(), opOf(e)) }) if err == nil { - w.ReadWhole(meshprovisionerclient.ProvisionsBucket) + w.ReadWhole(watch.ProvisionsBucket) } return pw, err } var provWatch jetstream.KeyWatcher - if kv, err := js.KeyValue(ctx, meshprovisionerclient.ProvisionsBucket); err == nil { + if kv, err := js.KeyValue(ctx, watch.ProvisionsBucket); err == nil { if provWatch, err = provisionsWatch(kv); err != nil { - process.NotWatched(logger.Printf, meshprovisionerclient.ProvisionsBucket, err, "no provision waiting for the operator is said until the watchman starts again") + process.NotWatched(logger.Printf, watch.ProvisionsBucket, err, "no provision waiting for the operator is said until the watchman starts again") } } else { - process.AwaitBucket(ctx, js, conn, meshprovisionerclient.ProvisionsBucket, "no provision waiting for the operator is said", + process.AwaitBucket(ctx, js, conn, watch.ProvisionsBucket, "no provision waiting for the operator is said", logger.Printf).Ready(func(kv jetstream.KeyValue) { pw, err := provisionsWatch(kv) if err != nil { - process.NotWatched(logger.Printf, meshprovisionerclient.ProvisionsBucket, err, "no provision waiting for the operator is said until the watchman starts again") + process.NotWatched(logger.Printf, watch.ProvisionsBucket, err, "no provision waiting for the operator is said until the watchman starts again") return } go func() { diff --git a/modules/mesh-delivery-watchman/internal/watch/findings_test.go b/modules/mesh-delivery-watchman/internal/watch/findings_test.go index b007ff2f..fd5e9562 100644 --- a/modules/mesh-delivery-watchman/internal/watch/findings_test.go +++ b/modules/mesh-delivery-watchman/internal/watch/findings_test.go @@ -17,8 +17,8 @@ import ( "git.novox.be/novox/mesh-delivery/modules/mesh-delivery-indexer/takein" "git.novox.be/novox/mesh-delivery/sdk/buildstep" - "git.novox.be/novox/mesh-contracts/provisioning/go/clients/meshprovisionerclient" "git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshconditionsclient/heard" + "git.novox.be/novox/mesh-contracts/provisioning/go/clients/meshprovisionerclient" ) func mustEncode(t *testing.T, f Finding) []byte { @@ -685,7 +685,7 @@ func TestTheWatchmansFindings(t *testing.T) { w.Want("want.ace.web", held, Put, t0) w.Provision("ace.photos.oidc", asked, Put) w.Build(bkey, queued, Put, t0) - waits := map[string]string{AssignerWantsBucket: "want.ace.web", meshprovisionerclient.ProvisionsBucket: "ace.photos.oidc", BuilderBuildsBucket: bkey} + waits := map[string]string{AssignerWantsBucket: "want.ace.web", ProvisionsBucket: "ace.photos.oidc", BuilderBuildsBucket: bkey} if len(o.pulses) != 3 || len(o.findings) != 0 { t.Fatalf("pulses %v findings %v", o.pulses, o.findings) } diff --git a/modules/mesh-delivery-watchman/internal/watch/names.go b/modules/mesh-delivery-watchman/internal/watch/names.go index 12fe3141..6b2cf0e5 100644 --- a/modules/mesh-delivery-watchman/internal/watch/names.go +++ b/modules/mesh-delivery-watchman/internal/watch/names.go @@ -10,6 +10,8 @@ import ( const ( WatchmanModule = "mesh-delivery-watchman" AssignerModule = "mesh-delivery-assigner" + // ProvisionsBucket is the seat mesh-provisioner's state provisions (reads: mesh-provisioner.provisions). + ProvisionsBucket = "mesh-provisioner_provisions" // IndexerModule is the holder of the seat mesh-catalog, named from this module's manifest (consumes and invokes of mesh-delivery-indexer). IndexerModule = "mesh-delivery-indexer" builderModule = "mesh-delivery-builder" diff --git a/modules/mesh-delivery-watchman/internal/watch/signals.go b/modules/mesh-delivery-watchman/internal/watch/signals.go index ac945e8d..92b43f17 100644 --- a/modules/mesh-delivery-watchman/internal/watch/signals.go +++ b/modules/mesh-delivery-watchman/internal/watch/signals.go @@ -620,7 +620,7 @@ func (w *Watchman) Provision(key string, value []byte, op Op) { // holder wrote it, bounded as a step is, and provided, failed, waiting for the operator (its own finding), retiring or deleted // ends it. Called with the lock held. func (w *Watchman) askedWait(key string, value []byte, op Op) { - bucket := meshprovisionerclient.ProvisionsBucket + bucket := ProvisionsBucket if op == Expired { return } diff --git a/modules/mesh-delivery-watchman/manifest_test.go b/modules/mesh-delivery-watchman/manifest_test.go index 29f4c4d3..79799276 100644 --- a/modules/mesh-delivery-watchman/manifest_test.go +++ b/modules/mesh-delivery-watchman/manifest_test.go @@ -149,18 +149,19 @@ func TestManifestStateAndReads(t *testing.T) { // 1135/AC6 return e } for name, row := range map[string]struct{ got, want string }{ - "module": {watch.WatchmanModule, m.Module}, - "presence": {watch.PresenceBucket, m.Module + "_" + m.State[0].Name}, - "pulse": {watch.PulseBucket, m.Module + "_" + m.State[1].Name}, - "stuck": {watch.StuckBucket, m.Module + "_" + m.State[2].Name}, - "have": {watch.HaveBucket, bucket(m.Reads, "node-engine.have")}, - "health": {watch.NodeHealthBucket, bucket(m.Reads, "mesh-host.health")}, - "builds": {watch.BuilderBuildsBucket, bucket(m.Reads, "mesh-delivery-builder.builds")}, - "steps": {watch.StepsBucket("mesh-build-go"), bucket(m.Reads, "mesh-build-go.steps")}, - "wants": {watch.AssignerWantsBucket, bucket(m.Consumes, "mesh-delivery-assigner.views.wants")}, - "modules": {watch.ModulesBucket, bucket(m.Consumes, "mesh-delivery-indexer.views.modules")}, - "assigner": {watch.AssignerModule + ".assigner_read_wants", entry(m.Invokes, "mesh-delivery-assigner.assigner_read_wants")}, - "indexer": {watch.IndexerModule + ".indexer_pending", entry(m.Invokes, "mesh-delivery-indexer.indexer_pending")}, + "module": {watch.WatchmanModule, m.Module}, + "presence": {watch.PresenceBucket, m.Module + "_" + m.State[0].Name}, + "pulse": {watch.PulseBucket, m.Module + "_" + m.State[1].Name}, + "stuck": {watch.StuckBucket, m.Module + "_" + m.State[2].Name}, + "have": {watch.HaveBucket, bucket(m.Reads, "node-engine.have")}, + "health": {watch.NodeHealthBucket, bucket(m.Reads, "mesh-host.health")}, + "builds": {watch.BuilderBuildsBucket, bucket(m.Reads, "mesh-delivery-builder.builds")}, + "steps": {watch.StepsBucket("mesh-build-go"), bucket(m.Reads, "mesh-build-go.steps")}, + "wants": {watch.AssignerWantsBucket, bucket(m.Consumes, "mesh-delivery-assigner.views.wants")}, + "provisions": {watch.ProvisionsBucket, bucket(m.Reads, "mesh-provisioner.provisions")}, + "modules": {watch.ModulesBucket, bucket(m.Consumes, "mesh-delivery-indexer.views.modules")}, + "assigner": {watch.AssignerModule + ".assigner_read_wants", entry(m.Invokes, "mesh-delivery-assigner.assigner_read_wants")}, + "indexer": {watch.IndexerModule + ".indexer_pending", entry(m.Invokes, "mesh-delivery-indexer.indexer_pending")}, } { if row.got != row.want { t.Errorf("the name for %s is %q, its manifest's is %q", name, row.got, row.want) diff --git a/modules/mesh-grants/internal/buscompose/engine.go b/modules/mesh-grants/internal/buscompose/engine.go index 5838c4ca..236e5bd1 100644 --- a/modules/mesh-grants/internal/buscompose/engine.go +++ b/modules/mesh-grants/internal/buscompose/engine.go @@ -3,7 +3,6 @@ package buscompose import ( nodeengineseat "git.novox.be/novox/mesh-contracts/go/seats/nodeengine" occ "git.novox.be/novox/mesh-contracts/operator-and-conversation/go/clients/operatorchannelclient" - "git.novox.be/novox/mesh-contracts/provisioning/go/clients/meshprovisionerclient" "git.novox.be/novox/mesh-delivery/modules/mesh-grants/busgrants" ) @@ -71,7 +70,7 @@ func engineGrants(p Principal) (pub, sub []string) { // And the provisions its node's modules consume, its own node's keys alone, read (novox/hq ADR 0570 clause 6: the // consuming engine checks the vault's name and generation of what it is handed). if safeSubject.MatchString(p.Node) { - pub = append(pub, readGrants(meshprovisionerclient.ProvisionsBucket, p.Node+".>")...) + pub = append(pub, readGrants(ProvisionerProvisionsBucket, p.Node+".>")...) } // And its node's own health report, its key `` alone (issue 774, the operator's alert table): what the watchman // reads for the machine's alerts. diff --git a/modules/mesh-grants/internal/buscompose/names_test.go b/modules/mesh-grants/internal/buscompose/names_test.go index f2f830e1..e42c94c3 100644 --- a/modules/mesh-grants/internal/buscompose/names_test.go +++ b/modules/mesh-grants/internal/buscompose/names_test.go @@ -42,7 +42,7 @@ func namesAreTheManifests(t *testing.T) { if c.list == "invokes" { list = m.Invokes } - if !slices.Contains(list, c.name) { + if c.list != "" && !slices.Contains(list, c.name) { t.Errorf("the part names %s, its manifest's %s are %v", c.name, c.list, list) } if got := strings.Replace(c.name, ".", "_", 1); got != c.bucket { diff --git a/modules/mesh-grants/internal/buscompose/provisioner.go b/modules/mesh-grants/internal/buscompose/provisioner.go index ba6ad5ed..839f1c78 100644 --- a/modules/mesh-grants/internal/buscompose/provisioner.go +++ b/modules/mesh-grants/internal/buscompose/provisioner.go @@ -5,8 +5,6 @@ import ( "fmt" "strings" - "git.novox.be/novox/mesh-contracts/provisioning/go/clients/meshprovisionerclient" - "github.com/nats-io/nats.go" ) @@ -48,7 +46,7 @@ var ProvisionerReads = []string{ConfigResolvedBucket} // reason** (2026-10-30 recovery, issue 774): the client V3 watches every machine's plans to bind a provider's // consumers, and granted only its own machine's keys it read none. ADR 0570 clause 3 has providers act on the seat's // provision keys instead; once the client does, plans go back to its own machine's keys. -var ProvisionerReadsWhole = []string{PlacementBucket, meshprovisionerclient.PlansBucket} +var ProvisionerReadsWhole = []string{PlacementBucket, ProvisionerPlansBucket} // BoundState is a providing module's state of entries, one per consumer (mesh-sdk go/provider, issue 678): a // consumer's machine's client reads its own keys of it, `..[.]`, to fill @@ -71,6 +69,9 @@ var ( ProvisionerAppliedBucket = BucketName(ProvisionerServerModule, "applied") // ProvisionerCollectBucket is the items of every collection, `..`. ProvisionerCollectBucket = BucketName(ProvisionerServerModule, "collect") + // ProvisionerProvisionsBucket and ProvisionerPlansBucket are its seat states provisions and plans. + ProvisionerProvisionsBucket = BucketName(ProvisionerServerModule, "provisions") + ProvisionerPlansBucket = BucketName(ProvisionerServerModule, "plans") ) // ProvisionerWrites are the server's buckets a client writes, and reads, its own machine's keys of (`.>`)