0

ScopedDbConnectionを使用してmongoレプリカセットに接続するためにc++ 2.2.3ドライバーを使用しています。次のフェールオーバー シナリオのテスト中に、アプリケーションがクラッシュするだけで回復しません。

すべてのスレーブがダウンすると、マスターに書き込むことができなくなりますが、これは明らかですが、次の mongo 操作の前に、スレーブをバックアップした後でも回復できません。

ただし、次のコードを使用すると、同じシナリオが 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