mongo_conn_return mongo_reconnect( mongo_connection * conn ){ mongo_conn_return ret; mongo_disconnect(conn); /* single server */ if(conn->right_opts == NULL) return mongo_connect_helper(conn); /* repl pair */ ret = mongo_connect_helper(conn); if (ret == mongo_conn_success && mongo_cmd_ismaster(conn, NULL)){ return mongo_conn_success; } swap_repl_pair(conn); ret = mongo_connect_helper(conn); if (ret == mongo_conn_success){ if(mongo_cmd_ismaster(conn, NULL)) return mongo_conn_success; else return mongo_conn_not_master; } /* failed to connect to both servers */ return ret; }
SEXP mongo_is_master(SEXP mongo_conn) { mongo* conn = _checkMongo(mongo_conn); SEXP ret; PROTECT(ret = allocVector(LGLSXP, 1)); LOGICAL(ret)[0] = mongo_cmd_ismaster(conn, NULL); UNPROTECT(1); return ret; }