Simplify logic in Downgrading write timeout, and test

This commit is contained in:
Adam Holmberg
2015-07-16 16:08:47 -05:00
parent be479b95d6
commit 49357dec11
2 changed files with 15 additions and 13 deletions

View File

@@ -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:

View File

@@ -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(