From 8280506cee87db3661b6e8a0568b74c780456d46 Mon Sep 17 00:00:00 2001 From: jochen Date: Sat, 24 Oct 2026 18:22:22 +0200 Subject: [PATCH] Start the world's change counter, which the pass of a held backup reads (issue 1906, review round 1) --- .../cmd/mesh-delivery-assigner/world.go | 2 +- .../cmd/mesh-delivery-assigner/world_test.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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 ccbf75e..7519cb7 100644 --- a/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world.go +++ b/modules/mesh-delivery-assigner/cmd/mesh-delivery-assigner/world.go @@ -56,7 +56,7 @@ type parsed struct { } func newWorld() *world { - return &world{values: map[string]map[string][]byte{}, manifests: map[string]parsed{}, healthy: map[string][]string{}} + return &world{values: map[string]map[string][]byte{}, manifests: map[string]parsed{}, healthy: map[string][]string{}, changes: map[string]uint64{}} } // put takes a change of a watched bucket in: a value, or nil for a key deleted or purged. 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 5211c7a..ecea239 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 @@ -111,3 +111,17 @@ func TestAManifestFallingBackToAPredefinedKeyIsReadable(t *testing.T) { t.Errorf("xterm: waits %q, unreadable %q, want read", waits, ch.Unreadable["xterm"]) } } + +// Review round 1 (items 3 and 4): the world counts the values a key takes, so a have written again after an answer is seen. +func TestTheWorldCountsTheValuesAKeyTakes(t *testing.T) { + w := newWorld() + w.put(delivery.HaveBucket, "ace.web", []byte(`{"v":1}`)) + w.put(delivery.HaveBucket, "ace.web", []byte(`{"v":1}`)) + w.put(delivery.HaveBucket, "ace.mail", []byte(`{"v":1}`)) + if got := w.changed(delivery.HaveBucket, "ace.web"); got != 2 { + t.Errorf("changed = %d, want 2", got) + } + if got := w.changed(delivery.HaveBucket, "gone"); got != 0 { + t.Errorf("changed = %d for a key never seen", got) + } +}