Keep the started walk started in the let-go test by holding its key, since a walk takes keys at once now (issue 1931)

This commit is contained in:
2026-10-24 04:12:07 +02:00
parent 5ee08cb5e1
commit 2ba9eef58d
2 changed files with 14 additions and 3 deletions
+5 -3
View File
@@ -78,7 +78,7 @@ func TestAPlanGoesOnWithoutAMachineAwayWhenItsTierIsSent(t *testing.T) {
holdB.Store(true) holdB.Store(true)
openPlanKeys = func() (planKeyReads, func(), error) { openPlanKeys = func() (planKeyReads, func(), error) {
all, done, err := wholeKeys() all, done, err := wholeKeys()
return keysHolding{all, "b", &holdB}, done, err return keysHolding{all, "b", &holdB, ""}, done, err
} }
digests := 0 digests := 0
wasSend := sendRollout wasSend := sendRollout
@@ -226,15 +226,17 @@ func TestAPlanGoesOnWithoutAMachineAwayWhenItsTierIsSent(t *testing.T) {
} }
} }
// keysHolding is the stand-in builder's keys but for one module, whose key is not built while held. // keysHolding is the stand-in builder's keys but for one module, whose key is not built while held; only the key of
// the fingerprint fp when that is given.
type keysHolding struct { type keysHolding struct {
planKeyReads planKeyReads
module string module string
held *atomic.Bool held *atomic.Bool
fp string
} }
func (k keysHolding) Build(ctx context.Context, module, fp string) (builderkeys.Key, error) { func (k keysHolding) Build(ctx context.Context, module, fp string) (builderkeys.Key, error) {
if module == k.module && k.held.Load() { if module == k.module && k.held.Load() && (k.fp == "" || fp == k.fp) {
return builderkeys.Key{Module: module, Fingerprint: fp}, nil return builderkeys.Key{Module: module, Fingerprint: fp}, nil
} }
return k.planKeyReads.Build(ctx, module, fp) return k.planKeyReads.Build(ctx, module, fp)
@@ -7,6 +7,7 @@ import (
"io" "io"
"os" "os"
"slices" "slices"
"sync/atomic"
"strings" "strings"
"testing" "testing"
"time" "time"
@@ -512,6 +513,14 @@ func TestALateMergeOfAOneModuleRepositoryIsNamed(t *testing.T) {
func TestAWalkLetGoBesideAStartedOneStartsOnceItEnded(t *testing.T) { func TestAWalkLetGoBesideAStartedOneStartsOnceItEnded(t *testing.T) {
open := windowed(t) open := windowed(t)
asked := asksWithPaths(t) asked := asksWithPaths(t)
// The started walk's key (one at c1) is not built, so that walk stays started as it did while its build ran: with
// the stand-in builder's key done at once, one step would carry it to done and nothing would be beside the other.
wholeKeys, held := openPlanKeys, &atomic.Bool{}
held.Store(true)
openPlanKeys = func() (planKeyReads, func(), error) {
all, done, err := wholeKeys()
return keysHolding{all, "one", held, fpOfModuleAt("one", "c1")}, done, err
}
ctx := t.Context() ctx := t.Context()
hear(t, open, repoMerge("one", "c1", t0), t0) hear(t, open, repoMerge("one", "c1", t0), t0)
cutAt(t, open, t0.Add(2*time.Minute)) cutAt(t, open, t0.Add(2*time.Minute))