0

我正在使用 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;
}

提前感谢您的帮助。

4

0 回答 0