in software/webapp/src/main/java/org/apache/brooklyn/entity/proxy/AbstractControllerImpl.java [486:514]
protected void addServerPoolMember(Entity member) {
synchronized (serverPoolAddresses) {
String oldAddress = getAttribute(SERVER_POOL_TARGETS).get(member);
String newAddress = getAddressOfEntity(member);
if (Objects.equal(newAddress, oldAddress)) {
if (LOG.isTraceEnabled())
if (LOG.isTraceEnabled()) LOG.trace("Ignoring unchanged address {}", oldAddress);
return;
} else if (newAddress == null) {
LOG.info("Removing from {}, member {} with old address {}, because inferred address is now null", new Object[] {this, member, oldAddress});
} else {
if (oldAddress != null) {
LOG.info("Replacing in {}, member {} with old address {}, new address {}", new Object[] {this, member, oldAddress, newAddress});
} else {
LOG.info("Adding to {}, new member {} with address {}", new Object[] {this, member, newAddress});
}
}
if (Objects.equal(oldAddress, newAddress)) {
if (LOG.isTraceEnabled()) LOG.trace("For {}, ignoring change in member {} because address still {}", new Object[] {this, member, newAddress});
return;
}
// TODO this does it synchronously; an async method leaning on `updateNeeded` and `update` might
// be more appropriate, especially when this is used in a listener
MapAttribute.put(this, SERVER_POOL_TARGETS, member, newAddress);
updateAsync();
}
}