示例#1
0
			public void send_execute(RestRequest request)
			{
				oprot_.WriteMessageBegin(new TMessage("execute", TMessageType.Call, 0));
				var args = new execute_args();
				args.Request = request;
				args.Write(oprot_);
				oprot_.WriteMessageEnd();
				oprot_.Transport.Flush();
			}
		public ElasticsearchResponse<Stream> HeadSync(Uri uri, IRequestConfiguration requestConfiguration = null)
		{
			var restRequest = new RestRequest();
			restRequest.Method = Method.HEAD;
			restRequest.Uri = uri;

			restRequest.Headers = new Dictionary<string, string>();
			restRequest.Headers.Add("Content-Type", "application/json");
			return this.Execute(restRequest, requestConfiguration);
		}
示例#3
0
        public Task<ElasticsearchResponse> Delete(string path)
        {
            var restRequest = new RestRequest();
            restRequest.Method = Method.DELETE;
            restRequest.Uri = path;

            restRequest.Headers = new Dictionary<string, string>();
            restRequest.Headers.Add("Content-Type", "application/json");
            return Task.Factory.StartNew<ElasticsearchResponse>(() =>
            {
                return this.Execute(restRequest);
            });
        }
		public Task<ElasticsearchResponse<Stream>> Head(Uri uri, IRequestConfiguration requestConfiguration = null)
		{
			var restRequest = new RestRequest();
			restRequest.Method = Method.HEAD;
			restRequest.Uri = uri;

			restRequest.Headers = new Dictionary<string, string>();
			restRequest.Headers.Add("Content-Type", "application/json");
			return Task.Factory.StartNew<ElasticsearchResponse<Stream>>(() =>
			{
				return this.Execute(restRequest, requestConfiguration);
			});
		}
        public Task<ElasticsearchResponse<Stream>> Delete(Uri uri, byte[] data, IRequestConnectionConfiguration deserializationState = null)
        {
            var restRequest = new RestRequest();
            restRequest.Method = Method.DELETE;
            restRequest.Uri = uri;

            restRequest.Body = data;
            restRequest.Headers = new Dictionary<string, string>();
            restRequest.Headers.Add("Content-Type", "application/json");
            return Task.Factory.StartNew<ElasticsearchResponse<Stream>>(() =>
            {
                return this.Execute(restRequest, deserializationState);
            });
        }
示例#6
0
			public RestResponse execute(RestRequest request)
			{
				send_execute(request);
				return recv_execute();
			}
示例#7
0
			public void Read(TProtocol iprot)
			{
				TField field;
				iprot.ReadStructBegin();
				while (true)
				{
					field = iprot.ReadFieldBegin();
					if (field.Type == TType.Stop)
					{
						break;
					}
					switch (field.ID)
					{
						case 1:
							if (field.Type == TType.Struct)
							{
								request = new RestRequest();
								request.Read(iprot);
								__isset.request = true;
							}
							else
							{
								TProtocolUtil.Skip(iprot, field.Type);
							}
							break;
						default:
							TProtocolUtil.Skip(iprot, field.Type);
							break;
					}
					iprot.ReadFieldEnd();
				}
				iprot.ReadStructEnd();
			}
        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 ?? new byte[0]));
                        return response;
                    }
                    else
                    {
                        var response = ElasticsearchResponse<Stream>.Create(
                            this._connectionSettings, (int)result.Status, method, path, requestData, new MemoryStream(result.Body ?? new byte[0]));
                        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();
            }
        }
        public ElasticsearchResponse<Stream> PutSync(Uri uri, byte[] data, IRequestConnectionConfiguration deserializationState = null)
        {
            var restRequest = new RestRequest();
            restRequest.Method = Method.PUT;
            restRequest.Uri = uri;

            restRequest.Body = data;
            restRequest.Headers = new Dictionary<string, string>();
            restRequest.Headers.Add("Content-Type", "application/json");
            return this.Execute(restRequest, deserializationState);
        }
示例#10
0
        public ElasticsearchResponse DeleteSync(string path)
        {
            var restRequest = new RestRequest();
            restRequest.Method = Method.DELETE;
            restRequest.Uri = path;

            restRequest.Headers = new Dictionary<string, string>();
            restRequest.Headers.Add("Content-Type", "application/json");
            return this.Execute(restRequest);
        }
示例#11
0
        public ElasticsearchResponse PutSync(string path, byte[] data)
        {
            var restRequest = new RestRequest();
            restRequest.Method = Method.PUT;
            restRequest.Uri = path;

            restRequest.Body = data;
            restRequest.Headers = new Dictionary<string, string>();
            restRequest.Headers.Add("Content-Type", "application/json");
            return this.Execute(restRequest);
        }
		private ElasticsearchResponse<Stream> Execute(RestRequest restRequest, object requestConfiguration)
		{
			var method = Enum.GetName(typeof(Method), restRequest.Method);
			var requestData = restRequest.Body;
			var uri = restRequest.Uri;
			var path = uri.ToString();

			if (this._resourceLock != null && !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
			{
				var baseUri = this.GetBaseBaseUri(uri);
				string errorMessage;
				var client = this.GetClientForUri(baseUri, out errorMessage);
				if (client == null)
					return ElasticsearchResponse<Stream>.CreateError(
						this._connectionSettings, new Exception(errorMessage), method, path, requestData);
				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 ?? new byte[0]));
						return response;
					}
					else
					{
						var response = ElasticsearchResponse<Stream>.Create(
							this._connectionSettings, (int)result.Status, method, path, requestData, new MemoryStream(result.Body ?? new byte[0]));
						return response;
					}
				}
				catch (SocketException)
				{
					client.InputProtocol.Transport.Close();
					throw;
				}
				catch (IOException)
				{
					client.InputProtocol.Transport.Close();
					throw;
				}
				catch (TTransportException)
				{
					client.InputProtocol.Transport.Close();
					throw;
				}
				finally
				{
					this.EnqueueClient(baseUri, client);
				}

			}
			catch (Exception e)
			{
				return ElasticsearchResponse<Stream>.CreateError(this._connectionSettings, e, method, path, requestData);
			}
			finally
			{
				if (this._resourceLock != null)
					this._resourceLock.Release();
			}
		}
        public IList<Uri> Sniff(Uri uri)
        {
            var restRequest = new RestRequest();
            restRequest.Method = Method.GET;
            restRequest.Uri = new Uri(uri,"/_nodes/_all/clear?timeout=" + this._connectionSettings.PingTimeout.GetValueOrDefault(50));

            restRequest.Headers = new Dictionary<string, string>();
            restRequest.Headers.Add("Content-Type", "application/json");
            var r  = this.Execute(restRequest);
            using (var memoryStream = new MemoryStream(r.ResultBytes))
            {
                return Sniffer.FromStream(memoryStream, this._connectionSettings.Serializer);
            }
        }
        public Task<ElasticsearchResponse> Put(Uri uri, byte[] data)
        {
            var restRequest = new RestRequest();
            restRequest.Method = Method.PUT;
            restRequest.Uri = uri;

            restRequest.Body = data;
            restRequest.Headers = new Dictionary<string, string>();
            restRequest.Headers.Add("Content-Type", "application/json");
            return Task.Factory.StartNew<ElasticsearchResponse>(() =>
            {
                return this.Execute(restRequest);
            });
        }
        public bool Ping(Uri uri)
        {
            var restRequest = new RestRequest();
            restRequest.Method = Method.HEAD;
            restRequest.Uri = uri;

            restRequest.Headers = new Dictionary<string, string>();
            restRequest.Headers.Add("Content-Type", "application/json");
            var r  = this.Execute(restRequest);
            return r.Success;
        }
        public ElasticsearchResponse HeadSync(Uri uri)
        {
            var restRequest = new RestRequest();
            restRequest.Method = Method.HEAD;
            restRequest.Uri = uri;

            restRequest.Headers = new Dictionary<string, string>();
            restRequest.Headers.Add("Content-Type", "application/json");
            return this.Execute(restRequest);
        }