From 98d5306d6b33dcec028c3fdab03d200c44147d96 Mon Sep 17 00:00:00 2001 From: jochen Date: Sat, 31 Oct 2026 09:28:15 +0100 Subject: [PATCH] Say which machines are inside the private network from placement, for route-proxy, whose membership read goes with the assignments stream (issue 774, research 072 rows 33 and 34) --- go/delivery/placement_keys.go | 16 ++++++++++++++++ go/delivery/placement_test.go | 3 +++ 2 files changed, 19 insertions(+) diff --git a/go/delivery/placement_keys.go b/go/delivery/placement_keys.go index 087a552..47f97bb 100644 --- a/go/delivery/placement_keys.go +++ b/go/delivery/placement_keys.go @@ -578,3 +578,19 @@ func PlacementValues(p Placement) (map[string][]byte, error) { } return out, nil } + +// InsideAddresses is every node's address on the private network as its placement decides it (NodeDecided.Address), +// sorted and each once: the machines inside the private network, which a membership's Mesh carried until the assignments +// stream went (ADR 0167; research 072 rows 33 and 34). A node with no address decided is left out. +func InsideAddresses(placements map[string]Placement) []string { + seen := map[string]bool{} + out := []string{} + for _, p := range placements { + if a := strings.TrimSpace(p.Decided.Address); a != "" && !seen[a] { + seen[a] = true + out = append(out, a) + } + } + sort.Strings(out) + return out +} diff --git a/go/delivery/placement_test.go b/go/delivery/placement_test.go index 309340f..ec6e28d 100644 --- a/go/delivery/placement_test.go +++ b/go/delivery/placement_test.go @@ -180,6 +180,9 @@ func TestPlacement(t *testing.T) { if err != nil || !SamePlacement(got["g14"], g14) || len(got) != 1 { t.Fatalf("PlacementsOf = %+v, %v", got, err) } + if got := InsideAddresses(map[string]Placement{"g14": g14, "novox": novox, "x": {Node: "x"}, "y": {Node: "y", Decided: NodeDecided{Address: " 10.77.0.1"}}}); strings.Join(got, ",") != "10.77.0.1,10.77.0.2" { + t.Errorf("InsideAddresses = %v", got) + } legacy, _ := EncodePlacement(novox) stale, _ := EncodePlacement(Placement{Node: "g14"}) both := map[string][]byte{"placement.novox": legacy, "placement.g14": stale}