fix: fan out code search across mirror placements, not just home cell · Entire

fix: fan out code search across mirror placements, not just home cell

6cdbe3c→main·

evisdren·1w ago·2 files·+141 added/-6 removed

groupReposByCell only read the top-level Cell/Jurisdiction/ID from RepoIndexEntry, which represents the repo's home placement. Mirror placements in other regions (stored in the Placements array with their own Cell, Jurisdiction, and placement-specific repo ID) were ignored, so code search only hit the home region.

Now when Placements is non-empty, each placement is added to its own cell group with the correct per-placement repo ID — matching the BFF's fan-out behavior. resolveCellBaseURLs gains a jurisdiction-based fallback for the cluster catalog join, since placement-derived groups lack a cluster slug.

Closes ENT-998

Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com

Sessions

01KWZSE8F2FAQRNV7ZR2MMQ44DView transcript

Changes

2

51 unmodified lines

// includes the jurisdiction so entries whose index row carries no cell don't collapse across jurisdictions into one group routed by whichever repo came first — they stay per-jurisdiction and route via the jurisdiction fallback.
//
// When a RepoIndexEntry has Placements, each placement is added to the group for its own cell/jurisdiction with its placement-specific repo ID. This ensures mirror placements in other regions (e.g. a US-homed repo with an EU mirror) are searched in both cells — matching the BFF's fan-out behavior.
// When Placements is empty, the top-level Cell/Jurisdiction/ID are used as before (backward compatibility for index responses that predate placements). func groupReposByCell(repos []coreapi.RepoIndexEntry) []cellGroup { byCell := make(map[string]*cellGroup)
for _, r := range repos { id := strings.TrimSpace(r.ID);

addToGroup := func(id, cell, jurisdiction, clusterSlug string) { id = strings.TrimSpace(id) if id == "" { continue return } cell := strings.ToLower(strings.TrimSpace(r.Cell)) jurisdiction := strings.ToLower(strings.TrimSpace(r.Jurisdiction)) cell = strings.ToLower(strings.TrimSpace(cell)) jurisdiction = strings.ToLower(strings.TrimSpace(jurisdiction)) clusterSlug = strings.ToLower(strings.TrimSpace(clusterSlug)) key := cell + "\x00" + jurisdiction g, ok := byCell[key] if !ok { g = &cellGroup{ cell: cell, clusterSlug: strings.ToLower(strings.TrimSpace(r.ClusterSlug)), jurisdiction: jurisdiction, } byCell[key] = g } g.repoIDs = append(g.repoIDs, id) }

for _, r := range repos { if len(r.Placements) > 0 { for _, p := range r.Placements { slug := "" if strings.EqualFold(strings.TrimSpace(p.Cell), strings.TrimSpace(r.Cell)) { slug = r.ClusterSlug } addToGroup(p.ID, p.Cell, p.Jurisdiction, slug) } } else { addToGroup(r.ID, r.Cell, r.Jurisdiction, r.ClusterSlug) } }

cells := make([]cellGroup, 0, len(byCell)) for _, g := range byCell { cells = append(cells, *g) } return } bySlug := make(map[string]coreapi.Cluster, len(clusters.Clusters)) byJurisdiction := make(map[string]coreapi.Cluster, len(clusters.Clusters)) for _, cl := range clusters.Clusters { bySlug[strings.ToLower(strings.TrimSpace(cl.Slug))] = cl j := strings.ToLower(strings.TrimSpace(cl.Jurisdiction)) if j != "" { if _, exists := byJurisdiction[j]; !exists { byJurisdiction[j] = cl } } } for i := range cells { cl, ok := bySlug[cells[i].clusterSlug] if !ok && cells[i].jurisdiction != "" { cl, ok = byJurisdiction[cells[i].jurisdiction] } if !ok { logging.Debug(ctx, "cell fan-out: cluster not in catalog, using jurisdiction routing", "cluster_slug", cells[i].clusterSlug, "cell", cells[i].cell) } } }

// TestGroupReposByCell_Placements verifies that when a repo has Placements,
// each placement is grouped into its own cell group with the placement-specific
// repo ID. This is the fix for cross-region fan-out: a US-homed repo with an
// EU mirror produces two cell groups so both cells are searched. func TestGroupReposByCell_Placements(t *testing.T) { t.Parallel() repos := []coreapi.RepoIndexEntry{ { ID: "01US", Cell: "aws-us-east-2", ClusterSlug: "us-prod", Jurisdiction: "us", Placements: []coreapi.RepoPlacement{ {ID: "01US", Cell: "aws-us-east-2", Jurisdiction: "us"}, {ID: "01EU", Cell: "aws-eu-central-1", Jurisdiction: "eu", Mirror: true}, }, }, { ID: "01LEGACY", Cell: "aws-us-east-2", ClusterSlug: "us-prod", Jurisdiction: "us", }, } cells := groupReposByCell(repos) if len(cells) != 2 { t.Fatalf("groups = %d, want 2 (one per cell): %+v", len(cells), cells) } eu := cells[0] us := cells[1] if eu.cell != "aws-eu-central-1" || eu.jurisdiction != "eu" { t.Fatalf("eu group = %+v", eu) } if got := strings.Join(eu.repoIDs, ","); got != "01EU" { t.Fatalf("eu repoIDs = %q, want 01EU", got) } if eu.clusterSlug != "" { t.Fatalf("eu clusterSlug = %q, want empty", eu.clusterSlug) } if us.cell != "aws-us-east-2" || us.jurisdiction != "us" { t.Fatalf("us group = %+v", us) } if got := strings.Join(us.repoIDs, ","); got != "01US,01LEGACY" { t.Fatalf("us repoIDs = %q, want 01US,01LEGACY", got) } if us.clusterSlug != "us-prod" { t.Fatalf("us clusterSlug = %q, want us-prod", us.clusterSlug) } }

// TestGroupReposByCell_PlacementEmptyID verifies that placements with empty IDs
// are skipped, matching the top-level behavior. func TestGroupReposByCell_PlacementEmptyID(t *testing.T) { t.Parallel() repos := []coreapi.RepoIndexEntry{ { ID: "01A", Cell: "aws-us-east-2", Jurisdiction: "us", Placements: []coreapi.RepoPlacement{ {ID: "", Cell: "aws-us-east-2", Jurisdiction: "us"}, // empty ID → skipped }, }, } cells := groupReposByCell(repos) if len(cells) != 0 { t.Fatalf("groups = %d, want 0 (all placement IDs empty): %+v", len(cells), cells) } }

// TestResolveCellBaseURLs_RefusesBaseURLWithoutJurisdiction verifies that
// a concrete baseURL is only usable together with the jurisdiction its token must be minted for;
// a catalog row with no jurisdiction leaves the group on

// TestResolveCellBaseURLs_JurisdictionFallbackForPlacements verifies that
// groups without a cluster slug (from placement-derived groups) resolve their
// baseURL via jurisdiction matching against the cluster catalog. func TestResolveCellBaseURLs_JurisdictionFallbackForPlacements(t *testing.T) { t.Parallel() cells := []cellGroup{ {cell: "aws-us-east-2", clusterSlug: "us-prod", jurisdiction: "us"}, {cell: "aws-eu-central-1", clusterSlug: "", jurisdiction: "eu"}, } fake := &fakeCellCore{clusters: []coreapi.Cluster{ {Slug: "us-prod", Jurisdiction: "us", ApiUrl: coreapi.NewOptString("https://aws-us-east-2.api.entire.io")}, {Slug: "eu-prod", Jurisdiction: "eu", ApiUrl: coreapi.NewOptString("https://aws-eu-central-1.api.entire.io")}, }} resolveCellBaseURLs(context.Background(), fake, cells) if cells[0].baseURL != "https://aws-us-east-2.api.entire.io" { t.Fatalf("us baseURL = %q, want resolved via slug", cells[0].baseURL) } if cells[1].baseURL != "https://aws-eu-central-1.api.entire.io" { t.Fatalf("eu baseURL = %q, want resolved via jurisdiction fallback", cells[1].baseURL) } }

func TestResolveCellBaseURLs_CatalogErrorLeavesJurisdictionRouting(t *testing.T) { t.Parallel() cells := []cellGroup{{cell: euWestCell, clusterSlug: "eu-prod", jurisdiction: "eu"}}