From f9adc9d44c79e9fd193a9e50e8ddcaa067af4732 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 4 Nov 2026 16:43:06 +0100 Subject: [PATCH] F-delivery 8: two claims never one number, on the bus, in the builder's whole-module test The case ran only on the in-memory store. Eight claims of one name at once on the builder's state versions, through its own bus adapter, get eight versions; with Create turned into Put they share one. Claude-Session: https://claude.ai/code/session_01JG73KJNrH5EgFXMKKYSrig --- .../mesh-delivery-builder/integration_test.go | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/modules/mesh-delivery-builder/cmd/mesh-delivery-builder/integration_test.go b/modules/mesh-delivery-builder/cmd/mesh-delivery-builder/integration_test.go index ebbc9ee5..eee4c068 100644 --- a/modules/mesh-delivery-builder/cmd/mesh-delivery-builder/integration_test.go +++ b/modules/mesh-delivery-builder/cmd/mesh-delivery-builder/integration_test.go @@ -9,6 +9,7 @@ import ( "encoding/json" "errors" "fmt" + "maps" "os" "path/filepath" "slices" @@ -613,6 +614,29 @@ func TestBuilderMakesADoneKeyWithTheDigests(t *testing.T) { // 1607/AC7 if a := reg.answered(t, key, again); a.Refused || a.Do != versions.AgainRenumber || a.Version != "0.1.6" { t.Errorf("builder_publish_again = %+v, want a new number, 0.1.6", a) } + // Running-testing note (review round 1): two claims never get one number on the bus's own compare-and-set, as + // the builder's state versions keeps them: eight claims of one name at once, eight versions. + store := versions.Versions{Store: awaitedVersions{process.AwaitBucket(b.ctx, b.js, nil, versions.Bucket, "", t.Logf)}} + numbers := make(chan string, 8) + var claims sync.WaitGroup + for i := range 8 { + claims.Go(func() { + d, _, err := store.Number(b.ctx, versions.Claim{Name: "netcheck/race", Kind: versions.KindBundle, Fingerprint: fmt.Sprintf("f%d", i)}) + if err != nil { + t.Error(err) + } + numbers <- d.Version + }) + } + claims.Wait() + close(numbers) + got := map[string]bool{} + for v := range numbers { + got[v] = true + } + if len(got) != 8 { + t.Errorf("eight claims of one name at once were numbered %v, want eight versions", slices.Sorted(maps.Keys(got))) + } if got := reg.numberedOf("netcheck/tools-go"); len(got) != 2 || got[1] != "0.1.6" { t.Errorf("version.numbered of netcheck/tools-go = %v, want 0.1.6 said after 0.1.5", got) }