in eureka-client/src/main/java/com/netflix/appinfo/AmazonInfo.java [221:283]
public AmazonInfo autoBuild(String namespace) {
if (config == null) {
config = new Archaius1AmazonInfoConfig(namespace);
}
for (MetaDataKey key : MetaDataKey.values()) {
int numOfRetries = config.getNumRetries();
while (numOfRetries-- > 0) {
try {
if (key == MetaDataKey.publicIpv4s) {
// macs should be read before publicIpv4s due to declaration order
String[] macs = result.metadata.get(MetaDataKey.macs.getName()).split("\n");
for (String mac : macs) {
URL url = key.getURL(null, mac);
String publicIpv4s = AmazonInfoUtils.readEc2MetadataUrl(key, url, config.getConnectTimeout(), config.getReadTimeout());
if (publicIpv4s != null) {
result.metadata.put(key.getName(), publicIpv4s);
break;
}
}
break;
}
String mac = null;
if (key == MetaDataKey.vpcId) {
mac = result.metadata.get(MetaDataKey.mac.getName()); // mac should be read before vpcId due to declaration order
}
URL url = key.getURL(null, mac);
String value = AmazonInfoUtils.readEc2MetadataUrl(key, url, config.getConnectTimeout(), config.getReadTimeout());
if (value != null) {
result.metadata.put(key.getName(), value);
}
break;
} catch (Throwable e) {
if (config.shouldLogAmazonMetadataErrors()) {
logger.warn("Cannot get the value for the metadata key: {} Reason :", key, e);
}
if (numOfRetries >= 0) {
try {
Thread.sleep(SLEEP_TIME_MS);
} catch (InterruptedException e1) {
}
continue;
}
}
}
if (key == MetaDataKey.instanceId
&& config.shouldFailFastOnFirstLoad()
&& !result.metadata.containsKey(MetaDataKey.instanceId.getName())) {
logger.warn("Skipping the rest of AmazonInfo init as we were not able to load instanceId after " +
"the configured number of retries: {}, per fail fast configuration: {}",
config.getNumRetries(), config.shouldFailFastOnFirstLoad());
break; // break out of loop and return whatever we have thus far
}
}
return result;
}