/** * Sends a ping command to the server and stores the result. * * Returns 1 when it worked, and 0 when an error was encountered. */ int mongo_connection_ping(mongo_con_manager *manager, mongo_connection *con, mongo_server_options *options, char **error_message) { mcon_str *packet; struct timeval start, end; char *data_buffer; /* If we haven't hit the ping_interval yet, then there is no need to do a roundtrip to the server */ if (!mongo_connection_ping_check(manager, con->last_ping, &start)) { return 1; } mongo_manager_log(manager, MLOG_CON, MLOG_INFO, "is_ping: pinging %s", con->hash); packet = bson_create_ping_packet(con); if (!mongo_connect_send_packet(manager, con, options, packet, &data_buffer, error_message)) { return 0; } gettimeofday(&end, NULL); free(data_buffer); con->last_ping = end.tv_sec; con->ping_ms = (end.tv_sec - start.tv_sec) * 1000 + (end.tv_usec - start.tv_usec) / 1000; if (con->ping_ms < 0) { /* some clocks do weird stuff */ con->ping_ms = 0; } mongo_manager_log(manager, MLOG_CON, MLOG_INFO, "is_ping: last pinged at %ld; time: %dms", con->last_ping, con->ping_ms); return 1; }
/** * Sends a ping command to the server and stores the result. * * Returns 1 when it worked, and 0 when an error was encountered. */ int mongo_connection_ping(mongo_con_manager *manager, mongo_connection *con, char **error_message) { mcon_str *packet; struct timeval start, end; char *data_buffer; gettimeofday(&start, NULL); if ((con->last_ping + manager->ping_interval) > start.tv_sec) { mongo_manager_log(manager, MLOG_CON, MLOG_FINE, "is_ping: skipping: last ran at %ld, now: %ld, time left: %ld", con->last_ping, start.tv_sec, con->last_ping + manager->ping_interval - start.tv_sec); return 2; } mongo_manager_log(manager, MLOG_CON, MLOG_INFO, "is_ping: pinging %s", con->hash); packet = bson_create_ping_packet(con); if (!mongo_connect_send_packet(manager, con, packet, &data_buffer, error_message)) { return 0; } gettimeofday(&end, NULL); free(data_buffer); con->last_ping = end.tv_sec; con->ping_ms = (end.tv_sec - start.tv_sec) * 1000 + (end.tv_usec - start.tv_usec) / 1000; if (con->ping_ms < 0) { /* some clocks do weird stuff */ con->ping_ms = 0; } mongo_manager_log(manager, MLOG_CON, MLOG_INFO, "is_ping: last pinged at %ld; time: %dms", con->last_ping, con->ping_ms); return 1; }
/** * Sends a ping command to the server and stores the result. * * Returns 1 when it worked, and 0 when an error was encountered. */ int mongo_connection_ping(mongo_con_manager *manager, mongo_connection *con) { mcon_str *packet; char *error_message = NULL; struct timeval start, end; char *data_buffer; mongo_manager_log(manager, MLOG_CON, MLOG_FINE, "is_ping: start"); packet = bson_create_ping_packet(con); gettimeofday(&start, NULL); if (!mongo_connect_send_packet(manager, con, packet, &data_buffer, (char **) &error_message)) { return 0; } gettimeofday(&end, NULL); free(data_buffer); con->last_ping = end.tv_sec; con->ping_ms = (end.tv_sec - start.tv_sec) * 1000 + (end.tv_usec - start.tv_usec) / 1000; if (con->ping_ms < 0) { /* some clocks do weird stuff */ con->ping_ms = 0; } mongo_manager_log(manager, MLOG_CON, MLOG_WARN, "is_ping: last pinged at %ld; time: %dms", con->last_ping, con->ping_ms); return 1; }