in src/Elastic.Transport/Products/Elasticsearch/ElasticsearchProductRegistration.cs [93:117]
public override int SniffOrder(Node node) =>
node.HasFeature(ElasticsearchNodeFeatures.MasterEligible) ? node.Uri.Port : int.MaxValue;
/// <summary>
/// If we know that a node is a master eligible node that hold no data it is excluded from regular
/// API calls. They are considered for ping and sniff requests.
/// </summary>
public override bool NodePredicate(Node node) =>
// skip master only nodes (holds no data and is master eligible)
!(node.HasFeature(ElasticsearchNodeFeatures.MasterEligible) &&
!node.HasFeature(ElasticsearchNodeFeatures.HoldsData));
/// <inheritdoc cref="ProductRegistration.HttpStatusCodeClassifier"/>
public override bool HttpStatusCodeClassifier(HttpMethod method, int statusCode) =>
statusCode >= 200 && statusCode < 300;
/// <inheritdoc cref="ProductRegistration.TryGetServerErrorReason{TResponse}"/>>
public override bool TryGetServerErrorReason<TResponse>(TResponse response, out string reason)
{
reason = null;
if (response is StringResponse s && s.TryGetElasticsearchServerError(out var e)) reason = e.Error?.ToString();
else if (response is BytesResponse b && b.TryGetElasticsearchServerError(out e)) reason = e.Error?.ToString();
else if (response.TryGetElasticsearchServerError(out e)) reason = e.Error?.ToString();
return e != null;
}