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; }
mongo_conn_return mongo_connect( mongo_connection * conn , mongo_connection_options * options ){ MONGO_INIT_EXCEPTION(&conn->exception); conn->left_opts = bson_malloc(sizeof(mongo_connection_options)); conn->right_opts = NULL; if ( options ){ memcpy( conn->left_opts , options , sizeof( mongo_connection_options ) ); } else { strcpy( conn->left_opts->host , "127.0.0.1" ); conn->left_opts->port = 27017; } return mongo_connect_helper(conn); }
apr_status_t mongo_connect( apr_pool_t *p, mongo_connection * conn , mongo_connection_options * options ){ MONGO_INIT_EXCEPTION(&conn->exception); conn->p = p; conn->left_opts = (mongo_connection_options*)apr_palloc ( p, sizeof(mongo_connection_options)); conn->right_opts = NULL; if ( options ){ memcpy( conn->left_opts , options , sizeof( mongo_connection_options ) ); } else { strcpy( conn->left_opts->host , "127.0.0.1" ); conn->left_opts->port = 27017; } return mongo_connect_helper(conn); }