Simplify logic in Downgrading write timeout, and test
This commit is contained in:
@@ -816,14 +816,19 @@ class DowngradingConsistencyRetryPolicy(RetryPolicy):
|
||||
required_responses, received_responses, retry_num):
|
||||
if retry_num != 0:
|
||||
return (self.RETHROW, None)
|
||||
elif write_type in (WriteType.SIMPLE, WriteType.BATCH, WriteType.COUNTER) and received_responses > 0:
|
||||
return (self.IGNORE, None)
|
||||
|
||||
if write_type in (WriteType.SIMPLE, WriteType.BATCH, WriteType.COUNTER):
|
||||
if received_responses > 0:
|
||||
# persisted on at least one replica
|
||||
return (self.IGNORE, None)
|
||||
else:
|
||||
return (self.RETHROW, None)
|
||||
elif write_type == WriteType.UNLOGGED_BATCH:
|
||||
return self._pick_consistency(received_responses)
|
||||
elif write_type == WriteType.BATCH_LOG:
|
||||
return (self.RETRY, consistency)
|
||||
else:
|
||||
return (self.RETHROW, None)
|
||||
|
||||
return (self.RETHROW, None)
|
||||
|
||||
def on_unavailable(self, query, consistency, required_replicas, alive_replicas, retry_num):
|
||||
if retry_num != 0:
|
||||
|
||||
@@ -1052,20 +1052,17 @@ class DowngradingConsistencyRetryPolicyTest(unittest.TestCase):
|
||||
self.assertEqual(retry, RetryPolicy.RETHROW)
|
||||
self.assertEqual(consistency, None)
|
||||
|
||||
# On these type of writes failures should not be ignored
|
||||
# if received_responses is 0
|
||||
for write_type in (WriteType.SIMPLE, WriteType.BATCH, WriteType.COUNTER):
|
||||
retry, consistency = policy.on_write_timeout(
|
||||
query=None, consistency=ONE, write_type=write_type,
|
||||
required_responses=1, received_responses=0, retry_num=0)
|
||||
self.assertEqual(retry, RetryPolicy.RETHROW)
|
||||
|
||||
# ignore failures on these types of writes
|
||||
for write_type in (WriteType.SIMPLE, WriteType.BATCH, WriteType.COUNTER):
|
||||
# ignore failures if at least one response (replica persisted)
|
||||
retry, consistency = policy.on_write_timeout(
|
||||
query=None, consistency=ONE, write_type=write_type,
|
||||
required_responses=1, received_responses=2, retry_num=0)
|
||||
self.assertEqual(retry, RetryPolicy.IGNORE)
|
||||
# retrhow if we can't be sure we have a replica
|
||||
retry, consistency = policy.on_write_timeout(
|
||||
query=None, consistency=ONE, write_type=write_type,
|
||||
required_responses=1, received_responses=0, retry_num=0)
|
||||
self.assertEqual(retry, RetryPolicy.RETHROW)
|
||||
|
||||
# downgrade consistency level on unlogged batch writes
|
||||
retry, consistency = policy.on_write_timeout(
|
||||
|
||||
Reference in New Issue
Block a user