Драйвер MongoDB C ++ не выдает ошибку соединения - PullRequest
2 голосов
/ 10 января 2012

Вот мой код-

DBClientBase *conn = NULL;
string err_msg;
ConnectionString cs = ConnectionString::parse(connString, err_msg);

if (!cs.isValid()) {
   throw "bad: " + err_msg;
}

try {
  conn = cs.connect(err_msg);
}
catch (DBException &e) {
   cout << "caught " << err_msg << endl;
   return 1;
}

if (!conn) {
   cout << "Unable to connect to DB" << endl;
   return 1;
}

Я ожидаю, что MongoDB выдаст исключение в случае, если БД недоступен. Тем не менее, я обнаружил, что if (!conn) становится удовлетворенным.

Почему

catch (DBException &e) {
   cout << "caught " << err_msg << endl;
   return 1;
}

блок не работает?

1 Ответ

2 голосов
/ 10 января 2012

Начиная с текущий магистральный источник , ConnectionString::connect, похоже, создает исключение только в том случае, если сама строка была недопустимой (и вы уже знаете, что это не так, из вашего первого условного выражения).

Он просто возвращает нулевой указатель и устанавливает errMsg во всех других случаях.

В вашу защиту я нигде не смог найти это документированное; очень простой пример connect - это все, что я мог найти.

string err_msg;
ConnectionString cs = ConnectionString::parse(connString, err_msg);

if (!cs.isValid()) {
   throw "bad: " + err_msg;
}

DBClientBase* conn = cs.connect(err_msg);

if (!conn) {
   cout << "Unable to connect to DB: " << err_msg << endl;
   return 1;
}
...