0

この単純なプログラムでは、プライマリ ノードがクラッシュしたときにレプリカ セットに再接続したいと考えています。しかし、うまくいきません。プライマリ ノードがクラッシュした場合、このプログラムは何も出力せずにすぐに終了し、141 を返します。理由はわかりません。レプリカ セットに再接続する適切な方法は何ですか?

#include <stdio.h>
#include <mongo.h>

int insertVal(mongo *conn, int val) {
    bson op[1];
    bson_init(op);
    bson_append_int(op, "val", val);
    bson_finish(op);

    int status = mongo_insert(conn, "test.vals", op, NULL);

    bson_destroy(op);
    return status;
}

int main()
{
    mongo conn[1];
    mongo_replset_init(conn, "test");
    mongo_replset_add_seed(conn, "localhost", 27017);
    mongo_replset_add_seed(conn, "localhost", 27018);
    mongo_replset_add_seed(conn, "localhost", 27019);
    int status = mongo_replset_connect(conn);
    if (status != MONGO_OK) {
    return 1;
    }

    for (int i = 0; i < 1000 * 1000; ++i) {
        status = insertVal(conn, i);
        if (status != MONGO_OK) {
            printf("%d\n", status);
            --i;
            mongo_reconnect(conn);
        }
    }

    mongo_destroy(conn);
    return 0;
}
4

1 に答える 1

0

自分でDB 管理操作を行う必要はなくmongo_reconnect(conn);、mongodb と競合する可能性があります。

こちらのドキュメントを参照してください。「Mongodb レプリカ セットには、自動フェイルオーバー機能があります。プライマリがオフラインになるか、応答しなくなり、元のセット メンバーの大部分が相互に接続できる場合、セットは新しいプライマリを選択します」.

于 2012-12-23T19:05:48.017 に答える