package org.distributeme.registry.metaregistry;
import org.distributeme.core.RegistryUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
public class ClusterChecker extends TimerTask{
private static Logger log = LoggerFactory.getLogger(ClusterChecker.class);
private static Timer timer;
private ClusterChecker(){
}
public void run(){
List<ClusterEntry> entries = Cluster.INSTANCE.entries();
if (log.isDebugEnabled()){
log.debug("Checking entries "+entries);
}
for (ClusterEntry entry : entries){
log.debug("checking "+entry);
if (entry.isMe()){
log.debug("Skiped my reference "+entry);
continue;
}
try{
String pingreply = RegistryUtil.ping(entry);
if (pingreply==null){
entry.setOnline(false);
}else{
if (entry.getIdentity()==null){
entry.setDiscoveredIdentity(pingreply);
}else{
if (pingreply.equals(entry.getIdentity())){
entry.setOnline(true);
}else{
log.debug("unexpected reply from "+entry+" --> "+pingreply+" possible entry restart");
entry.setDiscoveredIdentity(pingreply);
}
}
}
}catch(Exception e){
System.out.println("aborted due to "+e);
e.printStackTrace();
}
}
}
public static void main(String[] a){
start();
}
public static void start() {
ClusterChecker checker = new ClusterChecker();
timer = new Timer("ClusterChecker", true);
timer.scheduleAtFixedRate(checker, 0L, Cluster.INSTANCE.getConfiguration().getClusterCheckPeriod());
}
public static void stop(){
if (timer!=null)
timer.cancel();
}
}