diff --git a/modules/artifact-store-tools/cmd/artifact-store-tools/gone.go b/modules/artifact-store-tools/cmd/artifact-store-tools/gone.go index e9804f483..cca4a96df 100644 --- a/modules/artifact-store-tools/cmd/artifact-store-tools/gone.go +++ b/modules/artifact-store-tools/cmd/artifact-store-tools/gone.go @@ -4,7 +4,8 @@ import ( "encoding/json" "fmt" "sort" - "time" + + sweep "git.novox.be/novox/mesh-delivery/contracts/go/seats/meshartifactsweep" ) // The holders whose states this module reads, one constant each (a reader names its holder once; ADR 0634 ยง4). @@ -13,38 +14,26 @@ const ( indexerModule = "mesh-delivery-indexer" ) -// ArtifactsGoneEvent is the event the seat mesh-artifact-sweep says when the store does not hold an artifact a -// builder's key names. The seat is a seat-list seat, which has no generated types, so its two bodies are the holder's -// own: this module is the one that says the event and answers the verb held. -const ArtifactsGoneEvent = "artifacts-gone" +// The seat mesh-artifact-sweep types the answer of its verb held and the body of its event artifacts-gone; this module +// holds the seat, so it answers and says them in those types. +type ( + // HeldAnswer is the answer of the seat's verb held. + HeldAnswer = sweep.HeldAnswer + // ArtifactsGone is the body of the seat's event artifacts-gone. + ArtifactsGone = sweep.ArtifactsGone +) -// HeldAnswer is the answer of the seat's verb held: the references the store holds, and those it answered 404 for. A -// reference the store could not be asked about is in neither, and named in Unknown with why. -type HeldAnswer struct { - Store string `json:"store,omitempty"` - Held []string `json:"held"` - Gone []string `json:"gone"` - Unknown map[string]string `json:"unknown,omitempty"` -} +// GoneSubject is where the seat says artifacts-gone. +const GoneSubject = sweep.SubjectArtifactsGone -// ArtifactsGone is the body of ArtifactsGoneEvent: the module whose builder's key names a gone artifact, the key and -// its fingerprint, and every reference of it the store does not hold. -type ArtifactsGone struct { - Event string `json:"event"` - Module string `json:"module"` - Key string `json:"key"` - Fingerprint string `json:"fingerprint"` - Gone []string `json:"gone"` - At time.Time `json:"at"` -} - -// EncodeArtifactsGone is the event's body, the references sorted. +// EncodeArtifactsGone is the event's body, the references sorted; it refuses one naming no module, no fingerprint or no +// gone reference. func EncodeArtifactsGone(e ArtifactsGone) ([]byte, error) { - e.Event = ArtifactsGoneEvent + e.Event = sweep.EventArtifactsGone e.Gone = append([]string(nil), e.Gone...) sort.Strings(e.Gone) if e.Module == "" || e.Fingerprint == "" || len(e.Gone) == 0 { - return nil, fmt.Errorf("%s names a module, a fingerprint and at least one gone reference", ArtifactsGoneEvent) + return nil, fmt.Errorf("%s names a module, a fingerprint and at least one gone reference", sweep.EventArtifactsGone) } return json.Marshal(e) } diff --git a/modules/artifact-store-tools/cmd/artifact-store-tools/holder.go b/modules/artifact-store-tools/cmd/artifact-store-tools/holder.go index 1d46218cc..1f3d8f09b 100644 --- a/modules/artifact-store-tools/cmd/artifact-store-tools/holder.go +++ b/modules/artifact-store-tools/cmd/artifact-store-tools/holder.go @@ -49,8 +49,6 @@ const ( FindingsState = meshconditions.StateFindings // Module is this module, the observer its findings name. Module = "artifact-store-tools" - // GoneSubject is where the seat says artifacts-gone. - GoneSubject = "mesh.seat." + catalogue.ArtifactSweepSeat + ".event." + ArtifactsGoneEvent ) // The sweep's bounds, the controller's (cmd/mesh-controller/collect.go mostPerSweep, sweepBudget). @@ -628,7 +626,8 @@ func (h *Holder) sayGone(j *judged, refs []string, how string) { for _, b := range ref.Builds { g := byKey[b.Key] if g == nil { - g = &ArtifactsGone{Module: b.Module, Key: b.Key, Fingerprint: b.FP, At: h.now().UTC()} + at := h.now().UTC() + g = &ArtifactsGone{Module: b.Module, Key: b.Key, Fingerprint: b.FP, At: &at} byKey[b.Key] = g keys = append(keys, b.Key) } diff --git a/modules/artifact-store-tools/go.mod b/modules/artifact-store-tools/go.mod index 66c3b9f23..adcd679f0 100644 --- a/modules/artifact-store-tools/go.mod +++ b/modules/artifact-store-tools/go.mod @@ -3,6 +3,7 @@ module artifactstoretools go 1.26.0 require ( + git.novox.be/novox/mesh-delivery/contracts/go/seats/meshartifactsweep v0.0.0-00010101000000-000000000000 git.novox.be/novox/mesh-contracts/placement/go/seats/meshwants v0.0.0-00010101000000-000000000000 git.novox.be/novox/mesh-contracts/go/seats/nodeengine v0.0.0-00010101000000-000000000000 git.novox.be/novox/mesh-contracts/go/clients/nodeengineclient v0.0.0-00010101000000-000000000000 @@ -22,6 +23,7 @@ require ( require git.novox.be/novox/mesh-contracts/go v0.0.0-20261104174344-ae5266e77639 // indirect require ( + git.novox.be/novox/mesh-delivery/contracts/go/seats/meshartifactsweep v0.0.0-00010101000000-000000000000 github.com/antithesishq/antithesis-sdk-go v0.8.0-default-no-op // indirect github.com/google/go-tpm v0.9.8 // indirect github.com/klauspost/compress v1.20.1 // indirect