AcquireConnection() private method

Acquires the connection.
private AcquireConnection ( string databaseName, MongoDB.Driver.MongoCredentials credentials ) : MongoConnection
databaseName string Name of the database.
credentials MongoDB.Driver.MongoCredentials The credentials.
return MongoConnection
        internal MongoConnection AcquireConnection(MongoServerInstance serverInstance)
        {
            MongoConnection requestConnection = null;

            lock (_serverLock)
            {
                // if a thread has called RequestStart it wants all operations to take place on the same connection
                int     threadId = Thread.CurrentThread.ManagedThreadId;
                Request request;
                if (_requests.TryGetValue(threadId, out request))
                {
                    if (request.Connection.ServerInstance != serverInstance)
                    {
                        var message = string.Format(
                            "AcquireConnection called for server instance '{0}' but thread is in a RequestStart for server instance '{1}'.",
                            serverInstance.Address, request.Connection.ServerInstance.Address);
                        throw new MongoConnectionException(message);
                    }
                    requestConnection = request.Connection;
                }
            }

            if (requestConnection != null)
            {
                return(requestConnection);
            }

            return(serverInstance.AcquireConnection());
        }
Beispiel #2
0
        internal MongoConnection AcquireConnection(
            MongoDatabase database,
            MongoServerInstance serverInstance
            )
        {
            // if a thread has called RequestStart it wants all operations to take place on the same connection
            int threadId = Thread.CurrentThread.ManagedThreadId;

            lock (requestsLock) {
                Request request;
                if (requests.TryGetValue(threadId, out request))
                {
                    if (request.Connection.ServerInstance != serverInstance)
                    {
                        var message = string.Format(
                            "AcquireConnection called for server instance '{0}' but thread is in a RequestStart for server instance '{1}'.",
                            serverInstance.Address,
                            request.Connection.ServerInstance.Address
                            );
                        throw new MongoConnectionException(message);
                    }
                    request.Connection.CheckAuthentication(database); // will throw exception if authentication fails
                    return(request.Connection);
                }
            }

            return(serverInstance.AcquireConnection(database));
        }
        /// <summary>
        /// Lets the server know that this thread is about to begin a series of related operations that must all occur
        /// on the same connection. The return value of this method implements IDisposable and can be placed in a
        /// using statement (in which case RequestDone will be called automatically when leaving the using statement).
        /// </summary>
        /// <param name="initialDatabase">One of the databases involved in the related operations.</param>
        /// <param name="serverInstance">The server instance this request should be tied to.</param>
        /// <returns>A helper object that implements IDisposable and calls <see cref="RequestDone"/> from the Dispose method.</returns>
        public virtual IDisposable RequestStart(MongoDatabase initialDatabase, MongoServerInstance serverInstance)
        {
            int threadId = Thread.CurrentThread.ManagedThreadId;

            lock (_serverLock)
            {
                Request request;
                if (_requests.TryGetValue(threadId, out request))
                {
                    if (serverInstance != request.Connection.ServerInstance)
                    {
                        throw new InvalidOperationException("The server instance passed to a nested call to RequestStart does not match the server instance of the current Request.");
                    }
                    request.NestingLevel++;
                    return(new RequestStartResult(this));
                }
            }

            var connection = serverInstance.AcquireConnection();

            lock (_serverLock)
            {
                var request = new Request(connection);
                _requests.Add(threadId, request);
                return(new RequestStartResult(this));
            }
        }
Beispiel #4
0
 // public methods
 /// <summary>
 /// Acquires a connection.
 /// </summary>
 /// <returns>
 /// A connection.
 /// </returns>
 public MongoConnection AcquireConnection()
 {
     return(_serverInstance.AcquireConnection());
 }