TreeOperations::loadDatabases

bool TreeOperations::loadDatabases(
    std::function<void(RedisClient::DatabaseList)> callback) {
  auto connection = m_connection->clone();
  m_events->registerLoggerForConnection(*connection);
 
  bool connected = false;
 
  try {
    connected = connection->connect(true);
  } catch (const RedisClient::Connection::Exception& e) {
    emit m_events->error(
        QCoreApplication::translate("RDM", "Connection error: ") +
        QString(e.what()));
    return false;
  }
 
  if (!connected) {
    emit m_events->error(
        QCoreApplication::translate(
            "RDM", "Cannot connect to server '%1'. Check log for details.")
            .arg(connection->getConfig().name()));
    return false;
  }
 
  RedisClient::DatabaseList availableDatabeses = connection->getKeyspaceInfo();
 
  if (connection->mode() != RedisClient::Connection::Mode::Cluster) {
    // detect all databases
    RedisClient::Response scanningResp;
    int lastDbIndex =
        (availableDatabeses.size() == 0) ? 0 : availableDatabeses.lastKey() + 1;
 
    if (m_dbCount > 0) {
      for (int index = lastDbIndex; index < m_dbCount; index++) {
        availableDatabeses.insert(index, 0);
      }
    } else {
      uint dbScanLimit = conf().databaseScanLimit();
 
      for (int index = lastDbIndex; index < dbScanLimit; index++) {
        try {
            QString select_cmd = "select";
            QList<QByteArray> select_list;
            select_list.append(select_cmd.toLatin1());
            scanningResp = connection->commandSync(select_list, QString::number(index));
        } catch (const RedisClient::Connection::Exception& e) {
          throw ConnectionsTree::Operations::Exception(
              QCoreApplication::translate("RDM", "Connection error: ") +
              QString(e.what()));
        }
 
        if (!scanningResp.isOkMessage()) {
          break;
        }
 
        availableDatabeses.insert(index, 0);
        ++lastDbIndex;
      }
      m_dbCount = lastDbIndex;
    }
  }
 
  callback(availableDatabeses);
  return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值