private String findNewMaster( Map<String, LiveInstance> liveInstancesMap, Map<String, InstanceConfig> instanceConfigs, String prevMasterHost, Set<String> slaveSet) { String newMaster = null; SlaveStatus slaveStatusOfNewMaster = null; for (String slave : slaveSet) { if (liveInstancesMap.containsKey(slave) && instanceConfigs.get(slave).getInstanceEnabled()) { MySQLAdmin admin = new MySQLAdmin(instanceConfigs.get(slave)); SlaveStatus slaveStatus = admin.getSlaveStatus(); if (slaveStatus != null) { String masterHost = slaveStatus.getString(SlaveStatusAttribute.Master_Host); String masterPort = slaveStatus.getString(SlaveStatusAttribute.Master_Port); String slaveIOStatus = slaveStatus.getString(SlaveStatusAttribute.Slave_IO_Running); String slaveSQLStatus = slaveStatus.getString(SlaveStatusAttribute.Slave_SQL_Running); String masterLogFile = slaveStatus.getString(SlaveStatusAttribute.Master_Log_File); int readMasterLogPos = slaveStatus.getInt(SlaveStatusAttribute.Read_Master_Log_Pos); if ((masterHost + "_" + masterPort).equals(prevMasterHost) && "YES".equalsIgnoreCase(slaveIOStatus) && "YES".equalsIgnoreCase(slaveSQLStatus)) { if (newMaster == null) { newMaster = slave; slaveStatusOfNewMaster = slaveStatus; } else { boolean isThisSlaveAhead = masterLogFile.compareTo( slaveStatusOfNewMaster.getString( SlaveStatusAttribute.Master_Log_File)) > 0 && readMasterLogPos > slaveStatusOfNewMaster.getInt(SlaveStatusAttribute.Read_Master_Log_Pos); if (isThisSlaveAhead) { newMaster = slave; slaveStatusOfNewMaster = slaveStatus; } } } } } } return newMaster; }