Пример #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;
 }
Пример #2
0
 private boolean waitRegister() {
   long limitMs = System.currentTimeMillis() + PerfConf.get().UNREGISTER_TIMEOUT_MS;
   while (System.currentTimeMillis() < limitMs) {
     try {
       Thread.sleep(1000);
     } catch (InterruptedException e) {
       e.printStackTrace();
       LOG.error(e);
       return false;
     }
     if (mSlaveStatus.allRegistered()) {
       return true;
     }
   }
   List<String> remains = mSlaveStatus.getUnregisterSlaves();
   StringBuffer sbInfo = new StringBuffer("Unregister time out:");
   for (String slave : remains) {
     sbInfo.append(" ").append(slave);
   }
   System.err.println(sbInfo.toString());
   LOG.error(sbInfo.toString());
   return false;
 }
Пример #3
0
 private boolean waitFinish() {
   PerfConf conf = PerfConf.get();
   while (true) {
     try {
       Thread.sleep(2000);
     } catch (InterruptedException e) {
       e.printStackTrace();
       return false;
     }
     String info = mSlaveStatus.getFinishStatus(conf.STATUS_DEBUG);
     System.out.println(info);
     LOG.info(info);
     int state = mSlaveStatus.finished(conf.FAILED_THEN_ABORT, conf.FAILED_PERCENTAGE);
     if (state == -1) {
       System.err.println("Enough slaves failed. Abort all the slaves.");
       LOG.error("Enough slaves failed. Abort all the slaves.");
       return true;
     }
     if (state == 1) {
       return true;
     }
   }
 }
Пример #4
0
 public void stop() throws Exception {
   mSlaveStatus.cleanup();
   stopMasterService();
 }