private void monitorDnsChange(final SingleServerConfig cfg) { monitorFuture = GlobalEventExecutor.INSTANCE.scheduleWithFixedDelay( new Runnable() { @Override public void run() { try { InetAddress master = currentMaster.get(); InetAddress now = InetAddress.getByName(cfg.getAddress().getHost()); if (!now.getHostAddress().equals(master.getHostAddress())) { log.info( "Detected DNS change. {} has changed from {} to {}", cfg.getAddress().getHost(), master.getHostAddress(), now.getHostAddress()); if (currentMaster.compareAndSet(master, now)) { changeMaster( MAX_SLOT, cfg.getAddress().getHost(), cfg.getAddress().getPort()); log.info("Master has been changed"); } } } catch (Exception e) { log.error(e.getMessage(), e); } } }, cfg.getDnsMonitoringInterval(), cfg.getDnsMonitoringInterval(), TimeUnit.MILLISECONDS); }