private void EnqueueClient(Uri baseUri, Rest.Client connection)
        {
            ConcurrentQueue <Rest.Client> queue;

            if (!this._clients.TryGetValue(baseUri, out queue))
            {
                return;
            }
            queue.Enqueue(connection);
        }
Exemplo n.º 2
0
        public ThriftConnection(IConnectionSettings2 connectionSettings)
        {
            this._connectionSettings = connectionSettings;
            this._timeout = connectionSettings.Timeout;
            this._poolSize = Math.Max(1, connectionSettings.MaximumAsyncConnections);

            this._resourceLock = new Semaphore(_poolSize, _poolSize);

            for (var i = 0; i <= connectionSettings.MaximumAsyncConnections; i++)
            {
                var tsocket = new TSocket(connectionSettings.Host, connectionSettings.Port);
                var transport = new TBufferedTransport(tsocket, 1024);
                var protocol = new TBinaryProtocol(transport);
                var client = new Rest.Client(protocol);
                _clients.Enqueue(client);
            }
        }
        private Rest.Client CreateClient(Uri uri, ConcurrentQueue <Rest.Client> queue)
        {
            var host      = uri.Host;
            var port      = uri.Port;
            var tsocket   = new TSocket(host, port, this._connectionSettings.Timeout);
            var transport = new TBufferedTransport(tsocket, 1024);
            var protocol  = _protocolFactory == null ? new TBinaryProtocol(transport) : _protocolFactory.GetProtocol(transport);

            var client = new Rest.Client(protocol);

            tsocket.ConnectTimeout           = this._connectionSettings.ConnectTimeout.GetValueOrDefault(200);
            tsocket.Timeout                  = this._connectionSettings.Timeout;
            tsocket.TcpClient.SendTimeout    = this._connectionSettings.Timeout;
            tsocket.TcpClient.ReceiveTimeout = this._connectionSettings.Timeout;
            tsocket.TcpClient.NoDelay        = true;
            queue.Enqueue(client);
            return(client);
        }
        public ThriftConnection(IConnectionConfigurationValues connectionSettings)
        {
            this._connectionSettings = connectionSettings;
            this._timeout = connectionSettings.Timeout;
            this._poolSize = Math.Max(1, connectionSettings.MaximumAsyncConnections);

            this._resourceLock = new Semaphore(_poolSize, _poolSize);
            int seed; bool shouldPingHint;
            for (var i = 0; i <= connectionSettings.MaximumAsyncConnections; i++)
            {
                var uri = this._connectionSettings.ConnectionPool.GetNext(null, out seed, out shouldPingHint);
                var host = uri.Host;
                var port = uri.Port;
                var tsocket = new TSocket(host, port);
                var transport = new TBufferedTransport(tsocket, 1024);
                var protocol = new TBinaryProtocol(transport);
                var client = new Rest.Client(protocol);
                _clients.Enqueue(client);
            }
        }
Exemplo n.º 5
0
        public ThriftConnection(IConnectionConfigurationValues connectionSettings)
        {
            this._connectionSettings = connectionSettings;
            this._timeout            = connectionSettings.Timeout;
            this._poolSize           = Math.Max(1, connectionSettings.MaximumAsyncConnections);

            this._resourceLock = new Semaphore(_poolSize, _poolSize);
            int seed; bool shouldPingHint;

            for (var i = 0; i <= connectionSettings.MaximumAsyncConnections; i++)
            {
                var uri       = this._connectionSettings.ConnectionPool.GetNext(null, out seed, out shouldPingHint);
                var host      = uri.Host;
                var port      = uri.Port;
                var tsocket   = new TSocket(host, port);
                var transport = new TBufferedTransport(tsocket, 1024);
                var protocol  = new TBinaryProtocol(transport);
                var client    = new Rest.Client(protocol);
                _clients.Enqueue(client);
            }
        }
Exemplo n.º 6
0
        public ThriftConnection(IConnectionConfigurationValues connectionSettings)
        {
            this._connectionSettings = connectionSettings;
            this._timeout            = connectionSettings.Timeout;
            var connectionPool     = this._connectionSettings.ConnectionPool;
            var maximumConnections = Math.Max(1, connectionSettings.MaximumAsyncConnections);
            var maximumUrls        = connectionPool.MaxRetries + 1;

            this._poolSize     = maximumConnections;
            this._resourceLock = new Semaphore(_poolSize, _poolSize);

            int seed; int initialSeed = 0; bool shouldPingHint;

            for (var i = 0; i < maximumUrls; i++)
            {
                var uri   = connectionPool.GetNext(initialSeed, out seed, out shouldPingHint);
                var queue = new ConcurrentQueue <Rest.Client>();
                for (var c = 0; c < maximumConnections; c++)
                {
                    var host      = uri.Host;
                    var port      = uri.Port;
                    var tsocket   = new TSocket(host, port);
                    var transport = new TBufferedTransport(tsocket, 1024);
                    var protocol  = new TBinaryProtocol(transport);
                    var client    = new Rest.Client(protocol);
                    tsocket.Timeout = this._connectionSettings.Timeout;
                    tsocket.TcpClient.SendTimeout    = this._connectionSettings.Timeout;
                    tsocket.TcpClient.ReceiveTimeout = this._connectionSettings.Timeout;
                    //tsocket.TcpClient.NoDelay = true;

                    queue.Enqueue(client);

                    initialSeed = seed;
                }
                _clients.TryAdd(uri, queue);
            }
        }
Exemplo n.º 7
0
		public ThriftConnection(IConnectionConfigurationValues connectionSettings)
		{
			this._connectionSettings = connectionSettings;
			this._timeout = connectionSettings.Timeout;
			var connectionPool = this._connectionSettings.ConnectionPool;
			var maximumConnections = Math.Max(1, connectionSettings.MaximumAsyncConnections);
			var maximumUrls = connectionPool.MaxRetries + 1;
			this._poolSize = maximumConnections;
			this._resourceLock = new Semaphore(_poolSize, _poolSize);

			int seed; int initialSeed = 0; bool shouldPingHint;

			for (var i = 0; i < maximumUrls; i++)
			{
				var uri = connectionPool.GetNext(initialSeed, out seed, out shouldPingHint);
				var queue = new ConcurrentQueue<Rest.Client>();
				for (var c = 0; c < maximumConnections; c++)
				{
					var host = uri.Host;
					var port = uri.Port;
					var tsocket = new TSocket(host, port);
					var transport = new TBufferedTransport(tsocket, 1024);
					var protocol = new TBinaryProtocol(transport);
					var client = new Rest.Client(protocol);
					tsocket.Timeout = this._connectionSettings.Timeout;
					tsocket.TcpClient.SendTimeout = this._connectionSettings.Timeout;
					tsocket.TcpClient.ReceiveTimeout = this._connectionSettings.Timeout;
					//tsocket.TcpClient.NoDelay = true;

					queue.Enqueue(client);

					initialSeed = seed;
				}
				_clients.TryAdd(uri, queue);
			}
		}
Exemplo n.º 8
0
        private ElasticsearchResponse <Stream> Execute(RestRequest restRequest, object deserializationState)
        {
            //RestResponse result = GetClient().execute(restRequest);
            //
            var method      = Enum.GetName(typeof(Method), restRequest.Method);
            var path        = restRequest.Uri.ToString();
            var requestData = restRequest.Body;

            if (!this._resourceLock.WaitOne(this._timeout))
            {
                var m = "Could not start the thrift operation before the timeout of " + this._timeout + "ms completed while waiting for the semaphore";
                return(ElasticsearchResponse <Stream> .CreateError(this._connectionSettings, new TimeoutException(m), method, path, requestData));
            }
            try
            {
                Rest.Client client = null;
                if (!this._clients.TryDequeue(out client))
                {
                    var m      = string.Format("Could dequeue a thrift client from internal socket pool of size {0}", this._poolSize);
                    var status = ElasticsearchResponse <Stream> .CreateError(this._connectionSettings, new Exception(m), method, path, requestData);

                    return(status);
                }
                try
                {
                    if (!client.InputProtocol.Transport.IsOpen)
                    {
                        client.InputProtocol.Transport.Open();
                    }

                    var result = client.execute(restRequest);
                    if (result.Status == Status.OK || result.Status == Status.CREATED || result.Status == Status.ACCEPTED)
                    {
                        var response = ElasticsearchResponse <Stream> .Create(
                            this._connectionSettings, (int)result.Status, method, path, requestData, new MemoryStream(result.Body));

                        return(response);
                    }
                    else
                    {
                        var response = ElasticsearchResponse <Stream> .Create(
                            this._connectionSettings, (int)result.Status, method, path, requestData, new MemoryStream(result.Body));

                        return(response);
                    }
                }
                catch (SocketException)
                {
                    client.InputProtocol.Transport.Close();
                    throw;
                }
                catch (IOException)
                {
                    client.InputProtocol.Transport.Close();
                    throw;
                }
                finally
                {
                    //make sure we make the client available again.
                    this._clients.Enqueue(client);
                }
            }
            catch (Exception e)
            {
                return(ElasticsearchResponse <Stream> .CreateError(this._connectionSettings, e, method, path, requestData));
            }
            finally
            {
                this._resourceLock.Release();
            }
        }
		private Rest.Client CreateClient(Uri uri, ConcurrentQueue<Rest.Client> queue)
		{
			var host = uri.Host;
			var port = uri.Port;
			var tsocket = new TSocket(host, port, this._connectionSettings.Timeout);
			var transport = new TBufferedTransport(tsocket, 1024);
			var protocol = _protocolFactory == null ? new TBinaryProtocol(transport) : _protocolFactory.GetProtocol(transport);

			var client = new Rest.Client(protocol);
			tsocket.ConnectTimeout = this._connectionSettings.ConnectTimeout.GetValueOrDefault(200);
			tsocket.Timeout = this._connectionSettings.Timeout;
			tsocket.TcpClient.SendTimeout = this._connectionSettings.Timeout;
			tsocket.TcpClient.ReceiveTimeout = this._connectionSettings.Timeout;
			tsocket.TcpClient.NoDelay = true;
			queue.Enqueue(client);
			return client;
		}