-
Type: Bug
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: 1.2.0
-
Component/s: None
-
None
*Summary (Jesse)*: this was two bugs in the single-threaded implementation of the Server Discovery And Monitoring and Server Selection specs. First, after failing an initial connection, the client never re-attempted connection. Second, it spun in a tight loop until the server selection timeout (default 30 seconds) expired. The fix is to actually re-attempt a connection after each connection failure (until the timeout), and to pause half a second between attempts (the minHeartbeatFrequencyMS in Server Discovery And Monitoring).
*Original Report (Hannes)*:
Straight from the example docs - modifying the port to not-a-mongod will result in an endless loop.
#include <bson.h> #include <mongoc.h> #include <stdio.h> int main (int argc, char *argv[]) { mongoc_client_t *client; mongoc_collection_t *collection; mongoc_cursor_t *cursor; bson_error_t error; bson_oid_t oid; bson_t *doc; mongoc_init (); client = mongoc_client_new ("mongodb://localhost:27016/"); collection = mongoc_client_get_collection (client, "test", "test"); doc = bson_new (); bson_oid_init (&oid, NULL); BSON_APPEND_OID (doc, "_id", &oid); BSON_APPEND_UTF8 (doc, "hello", "world"); if (!mongoc_collection_insert (collection, MONGOC_INSERT_NONE, doc, NULL, &error)) { printf ("Insert failed: %s\n", error.message); } bson_destroy (doc); doc = bson_new (); BSON_APPEND_OID (doc, "_id", &oid); if (!mongoc_collection_delete (collection, MONGOC_DELETE_SINGLE_REMOVE, doc, NULL, &error)) { printf ("Delete failed: %s\n", error.message); } bson_destroy (doc); mongoc_collection_destroy (collection); mongoc_client_destroy (client); return 0; }
mongoc1.2.x
vagrant@precise64:~/mongo-c-driver$ time ./uds Insert failed: Timed out trying to select a server Delete failed: Timed out trying to select a server real 3m0.011s
mongoc1.1.x resulted in correct:
015/04/07 18:32:18.0622: [10104]: DEBUG: cluster: Client initialized in direct mode. 2015/04/07 18:32:18.0623: [10104]: WARNING: client: Failed to connect to: ipv4 127.0.0.1:27016, error: 111, Connection refused Insert failed: Failed to connect to target host: localhost:27016 2015/04/07 18:32:18.0624: [10104]: WARNING: client: Failed to connect to: ipv4 127.0.0.1:27016, error: 111, Connection refused Delete failed: Failed to connect to target host: localhost:27016
- is related to
-
CDRIVER-594 Make all of the timeouts and intervals in SS/SDAM work correctly
- Closed
-
CDRIVER-2484 Retry logic
- Closed
-
PHPC-252 Application freezes for a minute when providing invalid hosts
- Closed