C 主节点崩溃时如何重新连接到副本集?

C 主节点崩溃时如何重新连接到副本集?,c,mongodb,database-replication,mongodb-c,database,C,Mongodb,Database Replication,Mongodb C,Database,在这个简单的程序中,我想在主节点崩溃时重新连接到副本集。但它不起作用:如果主节点崩溃,该程序将立即终止,没有任何输出,并返回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)

在这个简单的程序中,我想在主节点崩溃时重新连接到副本集。但它不起作用:如果主节点崩溃,该程序将立即终止,没有任何输出,并返回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;
}
#包括
#包括
int insertVal(蒙哥*康涅狄格州,int val){
bson op[1];
bson_init(op);
bson_append_int(op,“val”,val);
bson_饰面(op);
int status=mongo_insert(连接,“test.vals”,op,NULL);
bson_销毁(op);
返回状态;
}
int main()
{
康涅狄格州蒙戈[1];
mongo_replset_init(连接,“测试”);
mongo_replset_add_seed(康涅狄格州,“本地主机”,27017);
mongo_replset_add_seed(康涅狄格州,“本地主机”,27018);
mongo_replset_add_seed(康涅狄格州,“本地主机”,27019);
int status=mongo\u replset\u connect(连接);
如果(状态!=MONGO_正常){
返回1;
}
对于(int i=0;i<1000*1000;++i){
状态=插入值(conn,i);
如果(状态!=MONGO_正常){
printf(“%d\n”,状态);
--一,;
蒙哥乌(康涅狄格州);
}
}
康涅狄格州蒙哥乌市;
返回0;
}

您不需要执行数据库管理操作,如
mongo_重新连接(conn)由您自己执行,可能会与mongodb发生冲突


看这里。“Mongodb副本集具有自动故障切换功能。如果主副本集脱机或无响应,并且大多数原始副本集成员仍然可以相互连接,则副本集将选择新的主副本集。”

我试图删除
Mongou重新连接(conn)
,但问题是没有改变。我认为您根本不需要检查副本集状态,因为mongodb将自行处理。我同意金卓的看法。如果你做了很多工作,你可能需要处理的唯一一件事就是在Mongo重新选举一个新的初选时等待一两秒钟。不确定是否需要,但需要考虑一下。根据我的经验,选择新的初选并不是一蹴而就的。