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

  1. List all aliases with GetCellsAliases/vtctldclient GetCellsAliases and remove the conflicting cell from the other alias first.
  2. Restructure aliases so every cell appears in exactly one alias.
  3. 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

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


AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01). Data as JSON: /api/errors/b05654a3b2c02069. Report an issue: GitHub.