public async Task Should_RetryOnNextHost_When_SendFailsOnCurrentHostRetryPolicy(bool async) { using (var simulacronCluster = SimulacronCluster.CreateNew(3)) { var contactPoint = simulacronCluster.InitialContactPoint; var nodes = simulacronCluster.GetNodes().ToArray(); var queryPlan = new List <SimulacronNode> { nodes[1], nodes[2], nodes[0] }; await queryPlan[0].Stop().ConfigureAwait(false); var currentHostRetryPolicy = new CurrentHostRetryPolicy(10, null); var loadBalancingPolicy = new CustomLoadBalancingPolicy( queryPlan.Select(n => n.ContactPoint).ToArray()); var builder = Cluster.Builder() .AddContactPoint(contactPoint) .WithSocketOptions(new SocketOptions() .SetConnectTimeoutMillis(10000) .SetReadTimeoutMillis(5000)) .WithLoadBalancingPolicy(loadBalancingPolicy) .WithRetryPolicy(currentHostRetryPolicy); using (var cluster = builder.Build()) { var session = (Session)cluster.Connect(); const string cql = "select * from table2"; queryPlan[1].PrimeFluent( b => b.WhenQuery(cql). ThenRowsSuccess(new[] { ("text", DataType.Ascii) }, rows => rows.WithRow("test1").WithRow("test2")));
public async Task Should_RetryOnNextHost_When_SendFailsOnCurrentHostRetryPolicy(bool async) { using (var simulacronCluster = SimulacronCluster.CreateNew(3)) { var contactPoint = simulacronCluster.InitialContactPoint; var nodes = simulacronCluster.GetNodes().ToArray(); var queryPlan = new List <SimulacronNode> { nodes[1], nodes[2], nodes[0] }; var currentHostRetryPolicy = new CurrentHostRetryPolicy(10, i => queryPlan[0].Stop()); var loadBalancingPolicy = new CustomLoadBalancingPolicy( queryPlan.Select(n => n.ContactPoint).ToArray()); var builder = Cluster.Builder() .AddContactPoint(contactPoint) .WithSocketOptions(new SocketOptions() .SetConnectTimeoutMillis(10000) .SetReadTimeoutMillis(5000)) .WithLoadBalancingPolicy(loadBalancingPolicy) .WithRetryPolicy(currentHostRetryPolicy); using (var cluster = builder.Build()) { var session = (Session)cluster.Connect(); const string cql = "select * from table2"; var primeQueryFirstNode = new { when = new { query = cql }, then = new { result = "overloaded", delay_in_ms = 0, message = "overloaded", ignore_on_prepare = false } }; var primeQuerySecondNode = new { when = new { query = cql }, then = new { result = "success", delay_in_ms = 0, rows = new[] { "test1", "test2" }.Select(v => new { text = v }).ToArray(), column_types = new { text = "ascii" }, ignore_on_prepare = false } }; queryPlan[0].Prime(primeQueryFirstNode); queryPlan[1].Prime(primeQuerySecondNode); if (async) { await session.ExecuteAsync( new SimpleStatement(cql).SetConsistencyLevel(ConsistencyLevel.One)).ConfigureAwait(false); } else { session.Execute(new SimpleStatement(cql).SetConsistencyLevel(ConsistencyLevel.One)); } Assert.AreEqual(1, currentHostRetryPolicy.RequestErrorCounter); Assert.AreEqual(1, (await queryPlan[0].GetQueriesAsync(cql).ConfigureAwait(false)).Count); Assert.AreEqual(1, (await queryPlan[1].GetQueriesAsync(cql).ConfigureAwait(false)).Count); Assert.AreEqual(0, (await queryPlan[2].GetQueriesAsync(cql).ConfigureAwait(false)).Count); } } }