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}
}
);