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());
      }
    }
  }