Sniffing on startupedit

Connection pools that return true for SupportsReseeding will sniff on startup by default.

We can demonstrate this by creating a virtual Elasticsearch cluster with NEST’s Test Framework. Here we create a 10 node cluster that uses a SniffingConnectionPool, setting sniff to fail on all nodes except 9202

var audit = new Auditor(() => Framework.Cluster
    .Nodes(10)
    .Sniff(s => s.Fails(Always))
    .Sniff(s => s.OnPort(9202).Succeeds(Always))
    .SniffingConnectionPool()
    .AllDefaults()
);

When the client call is made, we can see from the audit trail that the pool first tried to sniff on startup, with a sniff failure on 9200 and 9201, followed by a sniff success on 9202. A ping and healthy response are made on 9200

await audit.TraceCall(new ClientCall
 {
    { SniffOnStartup},
    { SniffFailure, 9200},
    { SniffFailure, 9201},
    { SniffSuccess, 9202},
    { PingSuccess , 9200},
    { HealthyResponse, 9200}
});
var audit = new Auditor(() => Framework.Cluster
    .Nodes(10)
    .Sniff(s => s.Fails(Always))
    .Sniff(s => s.OnPort(9202).Succeeds(Always, Framework.Cluster.Nodes(8, startFrom: 9204)))
    .SniffingConnectionPool()
    .AllDefaults()
);

await audit.TraceCall(new ClientCall {
{ SniffOnStartup},
{ SniffFailure, 9200},
{ SniffFailure, 9201},
{ SniffSuccess, 9202},
{ PingSuccess, 9204},
{ HealthyResponse, 9204}
            });
var audit = new Auditor(() => Framework.Cluster
    .Nodes(10)
    .Sniff(s => s.Fails(Always))
    .Sniff(s => s.OnPort(9209).Succeeds(Always))
    .SniffingConnectionPool()
    .AllDefaults()
);

await audit.TraceCall(new ClientCall {
{ SniffOnStartup},
{ SniffFailure, 9200},
{ SniffFailure, 9201},
{ SniffFailure, 9202},
{ SniffFailure, 9203},
{ SniffFailure, 9204},
{ SniffFailure, 9205},
{ SniffFailure, 9206},
{ SniffFailure, 9207},
{ SniffFailure, 9208},
{ SniffSuccess, 9209},
{ PingSuccess, 9200},
{ HealthyResponse, 9200}
            });
var audit = new Auditor(() => Framework.Cluster
    .Nodes(new[] {
        new Node(new Uri("http://localhost:9200")) { MasterEligible = false },
        new Node(new Uri("http://localhost:9201")) { MasterEligible = false },
        new Node(new Uri("http://localhost:9202")) { MasterEligible = true },
    })
    .Sniff(s => s.Succeeds(Always))
    .SniffingConnectionPool()
    .AllDefaults()
);

await audit.TraceCall(new ClientCall {
{ SniffOnStartup},
{ SniffSuccess, 9202},
{ PingSuccess, 9200},
{ HealthyResponse, 9200}
            });
var audit = new Auditor(() => Framework.Cluster
    .Nodes(new[] {
        new Node(new Uri("http://localhost:9200")) { MasterEligible = true },
        new Node(new Uri("http://localhost:9201")) { MasterEligible = true },
        new Node(new Uri("http://localhost:9202")) { MasterEligible = false },
    })
    .Sniff(s => s.Fails(Always))
    .Sniff(s => s.OnPort(9202).Succeeds(Always))
    .SniffingConnectionPool()
    .AllDefaults()
);

await audit.TraceCall(new ClientCall {
{ SniffOnStartup},
{ SniffFailure, 9200},
{ SniffFailure, 9201},
{ SniffSuccess, 9202},
{ PingSuccess, 9200},
{ HealthyResponse, 9200}
            });
var audit = new Auditor(() => Framework.Cluster
    .Nodes(10)
    .Sniff(s => s.Fails(Always))
    .Sniff(s => s.OnPort(9202).Succeeds(Always))
    .SniffingConnectionPool()
    .AllDefaults()
);
await audit.TraceCalls(
     new ClientCall
     {
        { SniffOnStartup},
        { SniffFailure, 9200},
        { SniffFailure, 9201},
        { SniffSuccess, 9202},
        { PingSuccess , 9200},
        { HealthyResponse, 9200}
    },
    new ClientCall
    {
        { PingSuccess, 9201},
        { HealthyResponse, 9201}
    }
);