protected override async Task <IQueryResult <T> > ExecuteQueryAsync <T>(IQueryRequest queryRequest) { ApplyCredentials(queryRequest); var baseUri = ConfigContextBase.GetQueryUri(); var queryResult = new StreamingQueryResult <T>(); using (var content = new StringContent(queryRequest.GetFormValuesAsJson(), System.Text.Encoding.UTF8, MediaType.Json)) { try { var requestMessage = new HttpRequestMessage(HttpMethod.Post, baseUri) { Content = content }; HttpClient.Timeout = TimeSpan.FromMilliseconds(Timeout.Infinite); Log.TraceFormat("Sending query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); var response = await HttpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead).ContinueOnAnyContext(); var stream = await response.Content.ReadAsStreamAsync().ContinueOnAnyContext(); { queryResult = new StreamingQueryResult <T> { ResponseStream = stream, HttpStatusCode = response.StatusCode, Success = response.StatusCode == HttpStatusCode.OK, QueryTimer = new QueryTimer(queryRequest, new CommonLogStore(Log), ClientConfig.EnableQueryTiming) }; Log.TraceFormat("Received query cid{0}: {1}", queryRequest.CurrentContextId, queryResult.HttpStatusCode); } baseUri.ClearFailed(); } catch (HttpRequestException e) { Log.InfoFormat("Failed query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); baseUri.IncrementFailed(); ProcessError(e, queryResult); Log.Error(e); } catch (AggregateException ae) { ae.Flatten().Handle(e => { Log.InfoFormat("Failed query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); ProcessError(e, queryResult); return(true); }); } catch (Exception e) { Log.InfoFormat("Failed query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); Log.Info(e); ProcessError(e, queryResult); } } return(queryResult); }
private static void ProcessError <T>(Exception ex, StreamingQueryResult <T> queryResult) { const string message = "Check Exception and Error fields for details."; queryResult.Status = QueryStatus.Fatal; queryResult.HttpStatusCode = HttpStatusCode.BadRequest; queryResult.Success = false; queryResult.Message = message; queryResult.Exception = ex; }
protected override async Task <IQueryResult <T> > ExecuteQueryAsync <T>(IQueryRequest queryRequest, CancellationToken cancellationToken) { var queryResult = new StreamingQueryResult <T>(); FailureCountingUri baseUri; if (!TryGetQueryUri(out baseUri)) { Log.Error(ExceptionUtil.EmptyUriTryingSubmitN1qlQuery); ProcessError(new InvalidOperationException(ExceptionUtil.EmptyUriTryingSubmitN1QlQuery), queryResult); return(queryResult); } ApplyCredentials(queryRequest); string body; using (ClientConfiguration.Tracer.BuildSpan(queryRequest, CouchbaseOperationNames.RequestEncoding).Start()) { body = queryRequest.GetFormValuesAsJson(); } using (var content = new StringContent(body, System.Text.Encoding.UTF8, MediaType.Json)) { try { var requestMessage = new HttpRequestMessage(HttpMethod.Post, baseUri) { Content = content }; Log.Trace("Sending query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); HttpResponseMessage response; using (ClientConfiguration.Tracer.BuildSpan(queryRequest, CouchbaseOperationNames.DispatchToServer).Start()) { response = await HttpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ContinueOnAnyContext(); } var stream = await response.Content.ReadAsStreamAsync().ContinueOnAnyContext(); { queryResult = new StreamingQueryResult <T> { ResponseStream = stream, HttpStatusCode = response.StatusCode, Success = response.StatusCode == HttpStatusCode.OK, QueryTimer = new QueryTimer(queryRequest, new CommonLogStore(Log), ClientConfiguration.EnableQueryTiming), DecodeSpan = ClientConfiguration.Tracer.BuildSpan(queryRequest, CouchbaseOperationNames.ResponseDecoding).Start() }; Log.Trace("Received query cid{0}: {1}", queryRequest.CurrentContextId, queryResult.HttpStatusCode); } baseUri.ClearFailed(); } catch (OperationCanceledException e) { var operationContext = OperationContext.CreateQueryContext(queryRequest.CurrentContextId, Context.BucketName, baseUri?.Authority); if (queryRequest is QueryRequest request) { operationContext.TimeoutMicroseconds = request.TimeoutValue; } Log.Info(operationContext.ToString()); ProcessError(e, queryResult); } catch (HttpRequestException e) { Log.Info("Failed query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); baseUri.IncrementFailed(); ProcessError(e, queryResult); Log.Error(e); } catch (AggregateException ae) { ae.Flatten().Handle(e => { Log.Info("Failed query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); ProcessError(e, queryResult); return(true); }); } catch (Exception e) { Log.Info("Failed query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); Log.Info(e); ProcessError(e, queryResult); } } UpdateLastActivity(); return(queryResult); }
protected override async Task <IQueryResult <T> > ExecuteQueryAsync <T>(IQueryRequest queryRequest, CancellationToken cancellationToken) { var queryResult = new StreamingQueryResult <T>(); FailureCountingUri baseUri; if (!TryGetQueryUri(out baseUri)) { Log.Error(ExceptionUtil.EmptyUriTryingSubmitN1qlQuery); ProcessError(new InvalidOperationException(ExceptionUtil.EmptyUriTryingSubmitN1QlQuery), queryResult); return(queryResult); } ApplyCredentials(queryRequest); using (var content = new StringContent(queryRequest.GetFormValuesAsJson(), System.Text.Encoding.UTF8, MediaType.Json)) { try { var requestMessage = new HttpRequestMessage(HttpMethod.Post, baseUri) { Content = content }; Log.Trace("Sending query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); var response = await HttpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ContinueOnAnyContext(); var stream = await response.Content.ReadAsStreamAsync().ContinueOnAnyContext(); { queryResult = new StreamingQueryResult <T> { ResponseStream = stream, HttpStatusCode = response.StatusCode, Success = response.StatusCode == HttpStatusCode.OK, QueryTimer = new QueryTimer(queryRequest, new CommonLogStore(Log), ClientConfiguration.EnableQueryTiming) }; Log.Trace("Received query cid{0}: {1}", queryRequest.CurrentContextId, queryResult.HttpStatusCode); } baseUri.ClearFailed(); } catch (HttpRequestException e) { Log.Info("Failed query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); baseUri.IncrementFailed(); ProcessError(e, queryResult); Log.Error(e); } catch (AggregateException ae) { ae.Flatten().Handle(e => { Log.Info("Failed query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); ProcessError(e, queryResult); return(true); }); } catch (Exception e) { Log.Info("Failed query cid{0}: {1}", queryRequest.CurrentContextId, baseUri); Log.Info(e); ProcessError(e, queryResult); } } return(queryResult); }