'This is called when a read operation times out from the coordinator\'s
perspective (i.e. a replica did not respond to the coordinator in time).
It should return a tuple with two items: one of the class enums (such
as :attr:`.RETRY`) and a :class:`.ConsistencyLevel` to retry the
operation at or :const:`None` to keep the same consistency level.
`query` is the :class:`.Statement` that timed out.
`consistency` is the :class:`.ConsistencyLevel` that the operation was
attempted at.
The `required_responses` and `received_responses` parameters describe
how many replicas needed to respond to meet the requested consistency
level and how many actually did respond before the coordinator timed
out the request. `data_retrieved` is a boolean indicating whether
any of those responses contained data (as opposed to just a digest).
`retry_num` counts how many times the operation has been retried, so
the first time this method is called, `retry_num` will be 0.
By default, operations will be retried at most once, and only if
a sufficient number of replicas responded (with data digests).'

def on_read_timeout(self, query, consistency, required_responses, received_responses, data_retrieved, retry_num):

    if (retry_num != 0):
        return (self.RETHROW, None)
    elif ((received_responses >= required_responses) and (not data_retrieved)):
        return (self.RETRY, consistency)
    else:
        return (self.RETHROW, None)
