コード例 #1
0
        private BlockingQueue <QueryNodeResponse> QueueSeedListQueries()
        {
            var responseQueue = new BlockingQueue <QueryNodeResponse>();
            var addresses     = server.Settings.Servers.ToList();
            var endPoints     = server.EndPoints.ToList();

            for (int i = 0; i < addresses.Count; i++)
            {
                var args = new QueryNodeParameters {
                    Address       = addresses[i],
                    EndPoint      = endPoints[i],
                    ResponseQueue = responseQueue
                };
                ThreadPool.QueueUserWorkItem(QueryNodeWorkItem, args);
                queries.Add(addresses[i]);
            }
            return(responseQueue);
        }
コード例 #2
0
        private void Discover(TimeSpan timeout)
        {
            var connectionQueue = new BlockingQueue <MongoServerInstance>();

            for (int i = 0; i < _instances.Count; i++)
            {
                var local = _instances[i];
                connectionQueue.EnqueuWorkItem(() =>
                {
                    try
                    {
                        local.Connect();
                    }
                    catch
                    {
                        // instance is keeping it's last ConnectionException
                    }
                    return(local);
                });
            }

            MongoServerInstance instance = null;
            var timeRemaining            = timeout;
            var timeoutAt = DateTime.UtcNow + timeout;

            while ((instance = connectionQueue.Dequeue(timeRemaining)) != null)
            {
                if (instance.ConnectException == null)
                {
                    CreateActualProxy(instance, connectionQueue);
                    return;
                }

                timeRemaining = timeoutAt - DateTime.UtcNow;
            }

            throw new MongoConnectionException(string.Format("Unable to connect in the specified timeframe of '{0}'.", timeout));
        }
コード例 #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ReplicaSetMongoServerProxy"/> class.
 /// </summary>
 /// <param name="serverSettings">The server settings.</param>
 /// <param name="instances">The instances.</param>
 /// <param name="stateChangeQueue">The state change queue.</param>
 /// <param name="connectionAttempt">The connection attempt.</param>
 public ReplicaSetMongoServerProxy(MongoServerSettings serverSettings, IEnumerable <MongoServerInstance> instances, BlockingQueue <MongoServerInstance> stateChangeQueue, int connectionAttempt)
     : base(serverSettings, instances, stateChangeQueue, connectionAttempt)
 {
 }
コード例 #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MultipleInstanceMongoServerProxy"/> class.
        /// </summary>
        /// <param name="settings">The settings.</param>
        /// <param name="instances">The instances.</param>
        /// <param name="connectionQueue">The state change queue.</param>
        /// <param name="connectionAttempt">The connection attempt.</param>
        /// <remarks>This constructor is used when the instances have already been instructed to connect.</remarks>
        protected MultipleInstanceMongoServerProxy(MongoServerSettings settings, IEnumerable <MongoServerInstance> instances, BlockingQueue <MongoServerInstance> connectionQueue, int connectionAttempt)
        {
            _state              = MongoServerState.Connecting;
            _settings           = settings;
            _connectedInstances = new ConnectedInstanceCollection();
            _connectionAttempt  = connectionAttempt;

            _outstandingInstanceConnections = connectionQueue.Count;
            ThreadPool.QueueUserWorkItem(_ =>
            {
                while (connectionQueue.Count > 0)
                {
                    connectionQueue.Dequeue();
                    Interlocked.Decrement(ref _outstandingInstanceConnections);
                }
            });

            // It's important to have our own copy of this list because it might get modified during iteration.
            _instances = instances.ToList();
            foreach (var instance in instances)
            {
                instance.StateChanged += InstanceStateChanged;
                ProcessInstanceStateChange(instance);
            }
        }
コード例 #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ShardedMongoServerProxy"/> class.
 /// </summary>
 /// <param name="server">The server.</param>
 /// <param name="instances">The instances.</param>
 /// <param name="stateChangedQueue">The state changed queue.</param>
 /// <param name="connectionAttempt">The connection attempt.</param>
 public ShardedMongoServerProxy(MongoServer server, IEnumerable <MongoServerInstance> instances, BlockingQueue <MongoServerInstance> stateChangedQueue, int connectionAttempt)
     : base(server, instances, stateChangedQueue, connectionAttempt)
 {
 }