mcon_collection* mongo_find_candidate_servers(mongo_con_manager *manager, mongo_read_preference *rp, mongo_servers *servers) { int i; mcon_collection *all, *filtered; mongo_manager_log(manager, MLOG_RS, MLOG_FINE, "finding candidate servers"); all = mongo_find_all_candidate_servers(manager, rp); if (servers->con_type == MONGO_CON_TYPE_REPLSET) { filtered = mongo_filter_candidates_by_replicaset_name(manager, all, servers); } else { filtered = mongo_filter_candidates_by_seed(manager, all, servers); } mcon_collection_free(all); all = filtered; filtered = mongo_filter_candidates_by_credentials(manager, all, servers); mcon_collection_free(all); all = filtered; if (rp->tagset_count != 0) { mongo_manager_log(manager, MLOG_RS, MLOG_FINE, "limiting by tagsets"); /* If we have tagsets configured for the replicaset then we need to do * some more filtering */ for (i = 0; i < rp->tagset_count; i++) { char *tmp_ts = mongo_read_preference_squash_tagset(rp->tagsets[i]); mongo_manager_log(manager, MLOG_RS, MLOG_FINE, "checking tagset: %s", tmp_ts); filtered = mongo_filter_candidates_by_tagset(manager, all, rp->tagsets[i]); mongo_manager_log(manager, MLOG_RS, MLOG_FINE, "tagset %s matched %d candidates", tmp_ts, filtered->count); free(tmp_ts); if (filtered->count > 0) { mcon_collection_free(all); return filtered; } } mcon_collection_free(filtered); mcon_collection_free(all); return NULL; } else { return all; } }
void mongo_servers_dump(mongo_con_manager *manager, mongo_servers *servers) { int i; mongo_manager_log(manager, MLOG_PARSE, MLOG_INFO, "Seeds:"); for (i = 0; i < servers->count; i++) { mongo_server_def_dump(manager, servers->server[i]); } mongo_manager_log(manager, MLOG_PARSE, MLOG_INFO, ""); mongo_manager_log(manager, MLOG_PARSE, MLOG_INFO, "Options:"); mongo_manager_log(manager, MLOG_PARSE, MLOG_INFO, "- repl_set_name: %s", servers->options.repl_set_name); mongo_manager_log(manager, MLOG_PARSE, MLOG_INFO, "- readPreference: %s", mongo_read_preference_type_to_name(servers->read_pref.type)); for (i = 0; i < servers->read_pref.tagset_count; i++) { char *tmp = mongo_read_preference_squash_tagset(servers->read_pref.tagsets[i]); mongo_manager_log(manager, MLOG_PARSE, MLOG_INFO, "- tagset: %s", tmp); free(tmp); } mongo_manager_log(manager, MLOG_PARSE, MLOG_INFO, "\n"); }