in eureka-client/src/main/java/com/netflix/discovery/AbstractAzToRegionMapper.java [51:88]
public synchronized void setRegionsToFetch(String[] regionsToFetch) {
if (null != regionsToFetch) {
this.regionsToFetch = regionsToFetch;
logger.info("Fetching availability zone to region mapping for regions {}", (Object) regionsToFetch);
availabilityZoneVsRegion.clear();
for (String remoteRegion : regionsToFetch) {
Set<String> availabilityZones = getZonesForARegion(remoteRegion);
if (null == availabilityZones
|| (availabilityZones.size() == 1 && availabilityZones.contains(DEFAULT_ZONE))
|| availabilityZones.isEmpty()) {
logger.info("No availability zone information available for remote region: {}"
+ ". Now checking in the default mapping.", remoteRegion);
if (defaultRegionVsAzMap.containsKey(remoteRegion)) {
Collection<String> defaultAvailabilityZones = defaultRegionVsAzMap.get(remoteRegion);
for (String defaultAvailabilityZone : defaultAvailabilityZones) {
availabilityZoneVsRegion.put(defaultAvailabilityZone, remoteRegion);
}
} else {
String msg = "No availability zone information available for remote region: " + remoteRegion
+ ". This is required if registry information for this region is configured to be "
+ "fetched.";
logger.error(msg);
throw new RuntimeException(msg);
}
} else {
for (String availabilityZone : availabilityZones) {
availabilityZoneVsRegion.put(availabilityZone, remoteRegion);
}
}
}
logger.info("Availability zone to region mapping for all remote regions: {}", availabilityZoneVsRegion);
} else {
logger.info("Regions to fetch is null. Erasing older mapping if any.");
availabilityZoneVsRegion.clear();
this.regionsToFetch = EMPTY_STR_ARRAY;
}
}