Я использую драйвер С ++ 2.2.3 для подключения к реплике Монго с помощью ScopedDbConnection. При тестировании по сценарию отработки отказа приложение просто аварийно завершает работу и не восстанавливается.
Когда все подчиненные устройства отключаются, он не может записать данные в мастер, что очевидно, но перед следующей операцией монго я снова включаю подчиненное устройство, и оно не может восстановиться даже после.
Тем не менее, тот же сценарий работает хорошо для mongo 2.0 и cpp driver 2.0 со следующим кодом. Он восстанавливает ом после следующего запуска после того, как я поставил раба обратно.
mongo::DBClientBase * MongoKeyValueDataStore::getDbConnection(mongo::ScopedDbConnection * m_scopedDbConnection) {
DBClientBase * clientDbConnection;
try {
clientDbConnection = m_scopedDbConnection->get();
// Following is necessary to check and reconnect if server/replicaset came back up
// works with mongo v2.0 and 2.0 cpp driver but mongo v2.23 and 2.2.3 cpp driver always returns true for isFailed() method
if (clientDbConnection && clientDbConnection->isFailed()) {
m_scopedDbConnection->kill();
return NULL;
}
return clientDbConnection;
}
Заранее благодарю за любую помощь.
Задача ещё не решена.
Других решений пока нет …