IList <Uri> ITransportDelegator.Sniff(ITransportRequestState ownerState = null) { int pingTimeout = Settings.PingTimeout.GetValueOrDefault(DefaultPingTimeout); var requestOverrides = new RequestConfiguration { ConnectTimeout = pingTimeout, RequestTimeout = pingTimeout, DisableSniff = true //sniff call should never recurse }; var requestParameters = new RequestParameters { RequestConfiguration = requestOverrides }; try { string path = "_nodes/_all/clear?timeout=" + pingTimeout; OrientdbResponse <Stream> response; using (var requestState = new TransportRequestState <Stream>(Settings, requestParameters, "GET", path)) { response = _requestHandler.Request(requestState); //inform the owing request state of the requests the sniffs did. if (requestState.RequestMetrics != null && ownerState != null) { foreach ( RequestMetrics r in requestState.RequestMetrics.Where(p => p.RequestType == RequestType.OrientdbCall)) { r.RequestType = RequestType.Sniff; } if (ownerState.RequestMetrics == null) { ownerState.RequestMetrics = new List <RequestMetrics>(); } ownerState.RequestMetrics.AddRange(requestState.RequestMetrics); } if (response.HttpStatusCode.HasValue && response.HttpStatusCode == (int)HttpStatusCode.Unauthorized) { throw new OrientdbAuthenticationException(response); } if (response.Response == null) { return(null); } using (response.Response) { return(Sniffer.FromStream(response, response.Response, Serializer)); } } } catch (MaxRetryException e) { throw new MaxRetryException(new SniffException(e)); } }
Task <bool> ITransportDelegator.PingAsync(ITransportRequestState requestState) { int pingTimeout = Settings.PingTimeout.GetValueOrDefault(DefaultPingTimeout); pingTimeout = requestState.RequestConfiguration != null ? requestState.RequestConfiguration.ConnectTimeout.GetValueOrDefault(pingTimeout) : pingTimeout; var requestOverrides = new RequestConfiguration { ConnectTimeout = pingTimeout, RequestTimeout = pingTimeout }; IRequestTimings rq = requestState.InitiateRequest(RequestType.Ping); try { return(Connection.Head(requestState.CreatePathOnCurrentNode(""), requestOverrides) .ContinueWith(t => { if (t.IsFaulted) { rq.Finish(false, null); rq.Dispose(); throw new PingException(requestState.CurrentNode, t.Exception); } rq.Finish(t.Result.Success, t.Result.HttpStatusCode); rq.Dispose(); OrientdbResponse <Stream> response = t.Result; if (!response.HttpStatusCode.HasValue || response.HttpStatusCode.Value == -1) { throw new PingException(requestState.CurrentNode, t.Exception); } if (response.HttpStatusCode == (int)HttpStatusCode.Unauthorized) { throw new OrientdbAuthenticationException(response); } using (response.Response) return response.Success; })); } catch (OrientdbAuthenticationException) { throw; } catch (Exception e) { var tcs = new TaskCompletionSource <bool>(); var pingException = new PingException(requestState.CurrentNode, e); tcs.SetException(pingException); return(tcs.Task); } }
/* PING/SNIFF *** ********************************************/ bool ITransportDelegator.Ping(ITransportRequestState requestState) { int pingTimeout = Settings.PingTimeout.GetValueOrDefault(DefaultPingTimeout); pingTimeout = requestState.RequestConfiguration != null ? requestState.RequestConfiguration.ConnectTimeout.GetValueOrDefault(pingTimeout) : pingTimeout; var requestOverrides = new RequestConfiguration { ConnectTimeout = pingTimeout, RequestTimeout = pingTimeout }; try { OrientdbResponse <Stream> response; using (IRequestTimings rq = requestState.InitiateRequest(RequestType.Ping)) { response = Connection.HeadSync(requestState.CreatePathOnCurrentNode(""), requestOverrides); rq.Finish(response.Success, response.HttpStatusCode); } if (!response.HttpStatusCode.HasValue || response.HttpStatusCode.Value == -1) { throw new Exception("ping returned no status code", response.OriginalException); } if (response.HttpStatusCode == (int)HttpStatusCode.Unauthorized) { throw new OrientdbAuthenticationException(response); } if (response.Response == null) { return(response.Success); } using (response.Response) return(response.Success); } catch (OrientdbAuthenticationException) { throw; } catch (Exception e) { throw new PingException(requestState.CurrentNode, e); } }