// Return if topology has not been initialized
if (!topology.isInitialized())
return false;
// Parse complete message and build event
MemberActivatedEvent event = (MemberActivatedEvent) Util.jsonToObject(message, MemberActivatedEvent.class);
// Apply service filter
if (TopologyServiceFilter.getInstance().isActive()) {
if (TopologyServiceFilter.getInstance().serviceNameExcluded(event.getServiceName())) {
// Service is excluded, do not update topology or fire event
if (log.isDebugEnabled()) {
log.debug(String.format("Service is excluded: [service] %s", event.getServiceName()));
}
return false;
}
}
// Apply cluster filter
if (TopologyClusterFilter.getInstance().isActive()) {
if (TopologyClusterFilter.getInstance().clusterIdExcluded(event.getClusterId())) {
// Cluster is excluded, do not update topology or fire event
if (log.isDebugEnabled()) {
log.debug(String.format("Cluster is excluded: [cluster] %s", event.getClusterId()));
}
return false;
}
}
// Validate event properties
if ((event.getMemberIp() == null) || event.getMemberIp().isEmpty()) {
throw new RuntimeException(String.format("No ip address found in member activated event: [service] %s [cluster] %s [member] %s",
event.getServiceName(),
event.getClusterId(),
event.getMemberId()));
}
if ((event.getPorts() == null) || (event.getPorts().size() == 0)) {
throw new RuntimeException(String.format("No ports found in member activated event: [service] %s [cluster] %s [member] %s",
event.getServiceName(),
event.getClusterId(),
event.getMemberId()));
}
// Validate event against the existing topology
Service service = topology.getService(event.getServiceName());
if (service == null) {
if (log.isWarnEnabled()) {
log.warn(String.format("Service does not exist: [service] %s", event.getServiceName()));
}
return false;
}
Cluster cluster = service.getCluster(event.getClusterId());
if (cluster == null) {
if (log.isWarnEnabled()) {
log.warn(String.format("Cluster does not exist: [service] %s [cluster] %s",
event.getServiceName(), event.getClusterId()));
}
return false;
}
Member member = cluster.getMember(event.getMemberId());
if (member == null) {
if (log.isWarnEnabled()) {
log.warn(String.format("Member does not exist: [service] %s [cluster] %s [member] %s",
event.getServiceName(),
event.getClusterId(),
event.getMemberId()));
}
return false;
}
// Apply member filter
if(TopologyMemberFilter.getInstance().isActive()) {
if(TopologyMemberFilter.getInstance().lbClusterIdExcluded(member.getLbClusterId())) {
if (log.isDebugEnabled()) {
log.debug(String.format("Member is excluded: [lb-cluster-id] %s", member.getLbClusterId()));
}
return false;
}
}
if (member.getStatus() == MemberStatus.Activated) {
if (log.isWarnEnabled()) {
log.warn(String.format("Member already activated: [service] %s [cluster] %s [member] %s",
event.getServiceName(),
event.getClusterId(),
event.getMemberId()));
}
} else {
// Apply changes to the topology
member.addPorts(event.getPorts());
member.setMemberIp(event.getMemberIp());
member.setStatus(MemberStatus.Activated);
if (log.isInfoEnabled()) {
log.info(String.format("Member activated: [service] %s [cluster] %s [member] %s",
event.getServiceName(),
event.getClusterId(),
event.getMemberId()));
}
}
// Notify event listeners
notifyEventListeners(event);