protected void ensurePoolIntegrity( Connection conn, String masterIp, String username, Queue<String> password, int wait) { try { // try recoverSlave first Set<Host> rcSlaves = Pool.recoverSlaves(conn); // wait 10 second forceSleep(10); for (Host slave : rcSlaves) { for (int i = 0; i < 30; i++) { Connection slaveConn = null; try { String slaveIp = slave.getAddress(conn); s_logger.debug("Logging on as the slave to " + slaveIp); slaveConn = new Connection(getURL(slaveIp), 10); slaveLocalLoginWithPassword(slaveConn, username, password); Pool.Record pr = getPoolRecord(slaveConn); String mIp = pr.master.getAddress(slaveConn); if (mIp.trim().equals(masterIp.trim())) { break; } } catch (Exception e) { } finally { localLogout(slaveConn); slaveConn = null; } // wait 2 second forceSleep(2); } } // then try emergency reset master Set<Host> slaves = Host.getAll(conn); for (Host slave : slaves) { String slaveIp = slave.getAddress(conn); Connection slaveConn = null; try { s_logger.debug("Logging on as the slave to " + slaveIp); slaveConn = new Connection(getURL(slaveIp), 10); slaveLocalLoginWithPassword(slaveConn, username, password); Pool.Record slavePoolr = getPoolRecord(slaveConn); String ip = slavePoolr.master.getAddress(slaveConn); if (!masterIp.trim().equals(ip.trim())) { PoolEmergencyResetMaster(slaveIp, masterIp, username, password); } } catch (Exception e) { s_logger.debug("Unable to login to slave " + slaveIp + " error " + e.getMessage()); } finally { localLogout(slaveConn); slaveConn = null; } } } catch (Exception e) { if (s_logger.isDebugEnabled()) { s_logger.debug("Catch " + e.getClass().getName() + " due to " + e.toString()); } } }