'Get the partition corresponding to key
:param key: partitioning key
:param all_partitions: list of all partitions sorted by partition ID
:param available: list of available partitions in no particular order
:return: one of the values from all_partitions or available'

@classmethod
def __call__(cls, key, all_partitions, available):

    if (key is None):
        if available:
            return random.choice(available)
        return random.choice(all_partitions)
    idx = murmur2(key)
    idx &= 2147483647
    idx %= len(all_partitions)
    return all_partitions[idx]
