我正在使用 c++ 2.2.3 驱动程序使用 ScopedDbConnection 连接到 mongo 副本集。在测试以下故障转移场景时,应用程序只是崩溃并且无法恢复。
当所有的slave都宕机时,它无法写入master,这很明显,但是在下一次mongo操作之前,我把slave重新启动,即使之后也无法恢复。
但是,相同的场景适用于 mongo 2.0 和 cpp 驱动程序 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;
}
提前感谢您的帮助。