@@ -424,14 +424,13 @@ def test_retry_policy_on_request_error(self):
424424 "message" : "server_error"
425425 }
426426
427- # Test the on_request_error call
427+ # Test the on_request_error call for errors that should retry
428428 retry_policy = CounterRetryPolicy ()
429429 self .set_cluster (retry_policy )
430430
431431 for prime_error , exc in [
432432 (overloaded_error , OverloadedErrorMessage ),
433433 (bootstrapping_error , IsBootstrappingErrorMessage ),
434- (truncate_error , TruncateError ),
435434 (server_error , ServerError )]:
436435
437436 clear_queries ()
@@ -444,13 +443,24 @@ def test_retry_policy_on_request_error(self):
444443
445444 assert len (rf .attempted_hosts ) == 1 # no retry
446445
447- assert next (retry_policy .request_error ) == 4
446+ assert next (retry_policy .request_error ) == 3
448447
449- # Test that by default, retry on next host
448+ # Test TruncateError is not retried (no on_request_error call)
449+ clear_queries ()
450+ query_to_prime = "SELECT * from simulacron_keyspace.simulacron_table;"
451+ prime_query (query_to_prime , then = truncate_error , rows = None , column_types = None )
452+ rf = self .session .execute_async (query_to_prime )
453+
454+ with pytest .raises (TruncateError ):
455+ rf .result ()
456+
457+ assert len (rf .attempted_hosts ) == 1 # no retry
458+
459+ # Test that by default, errors retry on next host (except TruncateError)
450460 retry_policy = RetryPolicy ()
451461 self .set_cluster (retry_policy )
452462
453- for e in [overloaded_error , bootstrapping_error , truncate_error , server_error ]:
463+ for e in [overloaded_error , bootstrapping_error , server_error ]:
454464 clear_queries ()
455465 query_to_prime = "SELECT * from simulacron_keyspace.simulacron_table;"
456466 prime_query (query_to_prime , then = e , rows = None , column_types = None )
@@ -460,3 +470,14 @@ def test_retry_policy_on_request_error(self):
460470 rf .result ()
461471
462472 assert len (rf .attempted_hosts ) == 3 # all 3 nodes failed
473+
474+ # Test TruncateError does not retry even with default RetryPolicy
475+ clear_queries ()
476+ query_to_prime = "SELECT * from simulacron_keyspace.simulacron_table;"
477+ prime_query (query_to_prime , then = truncate_error , rows = None , column_types = None )
478+ rf = self .session .execute_async (query_to_prime )
479+
480+ with pytest .raises (TruncateError ):
481+ rf .result ()
482+
483+ assert len (rf .attempted_hosts ) == 1 # no retry for TruncateError
0 commit comments