in src/Elastic.Transport/Components/Pipeline/RequestPipeline.cs [396:436]
public Task PingAsync(Node node, Auditor? auditor, CancellationToken cancellationToken = default)
=> PingCoreAsync(true, node, auditor, cancellationToken).AsTask();
private async ValueTask PingCoreAsync(bool isAsync, Node node, Auditor? auditor, CancellationToken cancellationToken = default)
{
if (!_productRegistration.SupportsPing) return;
if (PingDisabled(node)) return;
var pingEndpoint = _productRegistration.CreatePingEndpoint(node, PingAndSniffRequestConfiguration);
using var audit = auditor?.Add(PingSuccess, _dateTimeProvider, node);
TransportResponse response;
try
{
if (isAsync)
response = await _productRegistration.PingAsync(_requestInvoker, pingEndpoint, _boundConfiguration, cancellationToken).ConfigureAwait(false);
else
response = _productRegistration.Ping(_requestInvoker, pingEndpoint, _boundConfiguration);
ThrowBadAuthPipelineExceptionWhenNeeded(response.ApiCallDetails);
//ping should not silently accept bad but valid http responses
if (!response.ApiCallDetails.HasSuccessfulStatusCodeAndExpectedContentType)
{
var pipelineFailure = response.ApiCallDetails.HttpStatusCode != null ? PipelineFailure.BadResponse : PipelineFailure.BadRequest;
throw new PipelineException(pipelineFailure, response.ApiCallDetails.OriginalException) { Response = response };
}
}
catch (Exception e)
{
response = (e as PipelineException)?.Response;
if (audit is not null)
{
audit.Event = PingFailure;
audit.Exception = e;
}
throw new PipelineException(PipelineFailure.PingFailure, e) { Response = response };
}
}