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;
}
助けてくれてありがとう。