Пример #1
0
 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;
 }