mongoc_uri_t
Synopsis
typedef struct _mongoc_uri_t mongoc_uri_t;
Description
mongoc_uri_t provides an abstraction on top of the MongoDB connection URI format. It provides standardized parsing as well as convenience methods for extracting useful information such as replica hosts or authorization information.
See Connection String URI Reference on the MongoDB website for more information.
Format
mongodb:// <1> [username:password@] <2> host1 <3> [:port1] <4> [,host2[:port2],...[,hostN[:portN]]] <5> [/[database] <6> [?options]] <7>
mongodb is the specifier of the MongoDB protocol.
An optional username and password.
The only required part of the uri. This specifies either a hostname, IP address or UNIX domain socket.
An optional port number. Defaults to :27017.
Extra optional hosts and ports. You would specify multiple hosts, for example, for connections to replica sets.
The name of the database to authenticate if the connection string includes authentication credentials. If /database is not specified and the connection string includes credentials, defaults to the 'admin' database.
Connection specific options.
Replica Set Example
To describe a connection to a replica set named 'test' with the following mongod hosts:
db1.example.com on port 27017
db2.example.com on port 2500
You would use the connection string that resembles the following.
mongodb://db1.example.com,db2.example.com:2500/?replicaSet=test
Connection Options
ssl |
{true|false}, indicating if SSL must be used. (See also mongoc_client_set_ssl_opts and mongoc_client_pool_set_ssl_opts.) |
connectTimeoutMS |
A timeout in milliseconds to attempt a connection before timing out. This setting applies to server discovery and monitoring connections as well as to connections for application operations. The default is 10 seconds. |
socketTimeoutMS |
The time in milliseconds to attempt to send or receive on a socket before the attempt times out. The default is 5 minutes. |
Setting any of the *TimeoutMS options above to 0 will be interpreted as "use the default value"
Server Discovery, Monitoring, and Selection Options
Clients in a mongoc_client_pool_t share a topology scanner that runs on a background thread. The thread wakes every heartbeatFrequencyMS (default 10 seconds) to scan all MongoDB servers in parallel. Whenever an application operation requires a server that is not known--for example, if there is no known primary and your application attempts an insert--the thread rescans all servers every half-second. In this situation the pooled client waits up to serverSelectionTimeoutMS (default 30 seconds) for the thread to find a server suitable for the operation, then returns an error with domain MONGOC_ERROR_SERVER_SELECTION.
Technically, the total time an operation may wait while a pooled client scans the topology is controlled both by serverSelectionTimeoutMS and connectTimeoutMS. The longest wait occurs if the last scan begins just at the end of the selection timeout, and a slow or down server requires the full connection timeout before the client gives up.
A non-pooled client is single-threaded. Every heartbeatFrequencyMS, it blocks the next application operation while it does a parallel scan. This scan takes as long as needed to check the slowest server: roughly connectTimeoutMS. Therefore the default heartbeatFrequencyMS for single-threaded clients is greater than for pooled clients: 60 seconds.
By default, single-threaded (non-pooled) clients scan only once when an operation requires a server that is not known. If you attempt an insert and there is no known primary, the client checks all servers once trying to find it, then succeeds or returns an error with domain MONGOC_ERROR_SERVER_SELECTION. But if you set serverSelectionTryOnce to "false", the single-threaded client loops, checking all servers every half-second, until serverSelectionTimeoutMS.
The total time an operation may wait for a single-threaded client to scan the topology is determined by connectTimeoutMS in the try-once case, or serverSelectionTimeoutMS and connectTimeoutMS if serverSelectionTryOnce is set "false".
heartbeatFrequencyMS |
The interval between server monitoring checks. Defaults to 10 seconds in pooled (multi-threaded) mode, 60 seconds in non-pooled mode (single-threaded). |
serverSelectionTimeoutMS |
A timeout in milliseconds to block for server selection before throwing an exception. The default is 30 seconds. |
serverSelectionTryOnce |
If "true", the driver scans the topology exactly once after server selection fails, then either selects a server or returns an error. If it is false, then the driver repeatedly searches for a suitable server for up to serverSelectionTimeoutMS milliseconds (pausing a half second between attempts). The default for serverSelectionTryOnce is "false" for pooled clients, otherwise "true". Pooled clients ignore serverSelectionTryOnce; they signal the thread to rescan the topology every half-second until serverSelectionTimeoutMS expires. |
socketCheckIntervalMS |
Only applies to single threaded clients. If a socket has not been used within this time, its connection is checked with a quick "isMaster" call before it is used again. Defaults to 5 seconds. |
Setting any of the *TimeoutMS options above to 0 will be interpreted as "use the default value"
Connection Pool Options
These options govern the behavior of a mongoc_client_pool_t. They are ignored by a non-pooled mongoc_client_t.
maxPoolSize |
The maximum number of clients created by a mongoc_client_pool_t total (both in the pool and checked out). The default value is 100. Once it is reached, mongoc_client_pool_pop blocks until another thread pushes a client. |
minPoolSize |
The number of clients to keep in the pool; once it is reached, mongoc_client_pool_push destroys clients instead of pushing them. The default value, 0, means "no minimum": a client pushed into the pool is always stored, not destroyed. |
maxIdleTimeMS |
Not implemented. |
waitQueueMultiple |
Not implemented. |
waitQueueTimeoutMS |
Not implemented. |
Write Concern Options
w |
|
||||||||||
wtimeoutMS |
The time in milliseconds to wait for replication to succeed, as specified in the w option, before timing out. When wtimeoutMS is 0, write operations will never time out. |
||||||||||
journal |
Controls whether write operations will wait until the mongod acknowledges the write operations and commits the data to the on disk journal.
|
Read Concern Options
readConcernLevel |
The level of isolation for read operations. If the level is left unspecified, the server default will be used. See readConcern in the MongoDB Manual for details. |
Read Preference Options
When connected to a replica set, the driver chooses which member to query using the read preference:
Choose members whose type matches "readPreference".
From these, if there are any tags sets configured, choose members matching the first tag set. If there are none, fall back to the next tag set and so on, until some members are chosen or the tag sets are exhausted.
From the chosen servers, distribute queries randomly among the server with the fastest round-trip times. These include the server with the fastest time and any whose round-trip time is no more than "localThresholdMS" slower.
readPreference |
Specifies the replica set read preference for this connection. This setting overrides any slaveOk value. The read preference values are the following:
|
readPreferenceTags |
Specifies a tag set as a comma-separated list of colon-separated key-value pairs. Cannot be combined with preference "primary". |
localThresholdMS |
How far to distribute queries, beyond the server with the fastest round-trip time. By default, only servers within 15ms of the fastest round-trip time receive queries. |
"localThresholdMS" is ignored when talking to replica sets through a mongos. The equivalent is mongos's localThreshold command line option.