vitessio/vitess · error
cell set overlaps with existing alias %v
Error message
cell set overlaps with existing alias %v
What it means
validateAlias iterates all existing cells aliases and fails if any cell in the new alias is already a member of a different existing alias (matched via InCellList). Cell-to-alias membership must be disjoint across aliases.
Source
Thrown at go/vt/topo/cells_aliases.go:208
// This includes the 'err=nil' case.
return err
}
}
}
// validateAlias checks whether the given alias is allowed.
// If the alias overlaps with any existing alias other than itself, this returns
// a non-nil error.
func validateAlias(currentAliases map[string]*topodatapb.CellsAlias, newAliasName string, newAlias *topodatapb.CellsAlias) error {
for name, alias := range currentAliases {
// Skip the alias we're checking against. It's allowed to overlap with itself.
if name == newAliasName {
continue
}
for _, cell := range alias.Cells {
if InCellList(cell, newAlias.Cells) {
return fmt.Errorf("cell set overlaps with existing alias %v", name)
}
}
}
return nil
}
View on GitHub (pinned to 01a25a7d17)
Solutions
- List all aliases with GetCellsAliases/vtctldclient GetCellsAliases and remove the conflicting cell from the other alias first.
- Restructure aliases so every cell appears in exactly one alias.
- If the cell moved permanently, update the old alias (removing the cell) before adding it to the new alias.
Example fix
// before // eu: [c1,c2], creating us: [c2,c3] -> overlap on c2 // after // update eu to [c1], then create us: [c2,c3]
Defensive patterns
Strategy: validation
Validate before calling
func canCreate(aliases map[string]*topodatapb.CellsAlias, name string, cells []string) error {
for an, a := range aliases {
if an == name { continue }
for _, c := range cells {
if topo.InCellList(c, a.Cells) { return fmt.Errorf("%s in %s", c, an) }
}
}
return nil
} Try / catch
if err := validateAgainst(aliases, alias, cells); err != nil {
return fmt.Errorf("cells alias %v is not valid: %v", alias, err)
} Prevention
- Maintain a single source of truth mapping cell -> alias.
- Lint alias configs for disjointness before applying to topo.
- Write a test asserting cell sets are pairwise disjoint.
When it happens
Trigger: CreateCellsAlias or UpdateCellsAlias when the proposed alias's cell set contains a cell listed in another alias; directly exercised in tests via TestValidateAlias.
Common situations: Merging region aliases; typo including a cell that already belongs to another region; legacy aliases from older deployments still holding the cell.
Related errors
- cells alias %v is not valid: %v
- unknown topo protobuf type for %v
- GetKeyspaces: %w
- GetKeyspace(%v): %w
- fromTS.GetKeyspaces: %w
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/b05654a3b2c02069.
Report an issue: GitHub.