in grpc-xds/control-plane-go/pkg/xds/eds/locality_priority_by_zone.go [52:83]
func (l LocalityPriorityByZone) BuildPriorityMap(nodeZone string, zonesToPrioritize []string) map[string]uint32 {
region := regionRegexp.FindString(nodeZone)
superRegion := superRegionRegexp.FindString(nodeZone)
multiRegion := multiRegionRegexp.FindString(nodeZone)
zonesByLocalityMatch := map[LocalityMatch][]string{}
for _, zoneToPrioritize := range zonesToPrioritize {
switch {
case nodeZone == zoneToPrioritize:
zonesByLocalityMatch[Zone] = append(zonesByLocalityMatch[Zone], zoneToPrioritize)
case region == regionRegexp.FindString(zoneToPrioritize):
zonesByLocalityMatch[Region] = append(zonesByLocalityMatch[Region], zoneToPrioritize)
case superRegion == superRegionRegexp.FindString(zoneToPrioritize):
zonesByLocalityMatch[SuperRegion] = append(zonesByLocalityMatch[SuperRegion], zoneToPrioritize)
case multiRegion == multiRegionRegexp.FindString(zoneToPrioritize):
zonesByLocalityMatch[MultiRegion] = append(zonesByLocalityMatch[MultiRegion], zoneToPrioritize)
default:
zonesByLocalityMatch[Other] = append(zonesByLocalityMatch[Other], zoneToPrioritize)
}
}
zonePriorities := map[string]uint32{}
var priority uint32
for match := Zone; match <= Other; match++ {
zones := zonesByLocalityMatch[match]
if len(zones) > 0 {
for _, zone := range zones {
zonePriorities[zone] = priority
}
priority++
}
}
return zonePriorities
}