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; }
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; }
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; } } }
public void stop() throws Exception { mSlaveStatus.cleanup(); stopMasterService(); }