func()

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
}