Simplify logic in Downgrading write timeout, and test
This commit is contained in:
@@ -816,13 +816,18 @@ class DowngradingConsistencyRetryPolicy(RetryPolicy):
|
|||||||
required_responses, received_responses, retry_num):
|
required_responses, received_responses, retry_num):
|
||||||
if retry_num != 0:
|
if retry_num != 0:
|
||||||
return (self.RETHROW, None)
|
return (self.RETHROW, None)
|
||||||
elif write_type in (WriteType.SIMPLE, WriteType.BATCH, WriteType.COUNTER) and received_responses > 0:
|
|
||||||
|
if write_type in (WriteType.SIMPLE, WriteType.BATCH, WriteType.COUNTER):
|
||||||
|
if received_responses > 0:
|
||||||
|
# persisted on at least one replica
|
||||||
return (self.IGNORE, None)
|
return (self.IGNORE, None)
|
||||||
|
else:
|
||||||
|
return (self.RETHROW, None)
|
||||||
elif write_type == WriteType.UNLOGGED_BATCH:
|
elif write_type == WriteType.UNLOGGED_BATCH:
|
||||||
return self._pick_consistency(received_responses)
|
return self._pick_consistency(received_responses)
|
||||||
elif write_type == WriteType.BATCH_LOG:
|
elif write_type == WriteType.BATCH_LOG:
|
||||||
return (self.RETRY, consistency)
|
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):
|
def on_unavailable(self, query, consistency, required_replicas, alive_replicas, retry_num):
|
||||||
|
|||||||
@@ -1052,20 +1052,17 @@ class DowngradingConsistencyRetryPolicyTest(unittest.TestCase):
|
|||||||
self.assertEqual(retry, RetryPolicy.RETHROW)
|
self.assertEqual(retry, RetryPolicy.RETHROW)
|
||||||
self.assertEqual(consistency, None)
|
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):
|
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(
|
retry, consistency = policy.on_write_timeout(
|
||||||
query=None, consistency=ONE, write_type=write_type,
|
query=None, consistency=ONE, write_type=write_type,
|
||||||
required_responses=1, received_responses=2, retry_num=0)
|
required_responses=1, received_responses=2, retry_num=0)
|
||||||
self.assertEqual(retry, RetryPolicy.IGNORE)
|
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
|
# downgrade consistency level on unlogged batch writes
|
||||||
retry, consistency = policy.on_write_timeout(
|
retry, consistency = policy.on_write_timeout(
|
||||||
|
|||||||
Reference in New Issue
Block a user