def test_upper_bound(): l = [[29431330, 'A'], [82426238, 'B'], [101760716, 'C'], [118725487, 'D'], [122951927, 'E']] assert upper_bound(l, 10) == 0 assert upper_bound(l, l[0][0] + 10) == 1 assert upper_bound(l, l[3][0] + 10) == 4 assert upper_bound(l, l[4][0] + 10) == 5
def resolve_group_to_version(self, name, value=None): """ Pick a version from a routing group using a random or provided value A routing group looks like (weight, version): {"APP": [[29431330, 'A'], [82426238, 'B'], [101760716, 'C'], [118725487, 'D'], [122951927, 'E']]} """ if name not in self.current_rg: return name routing_group = self.current_rg[name] if len(routing_group) == 0: self.logger.warning("empty rounting group %s", name) return name value = value or random.randint(0, 1 << 32) index = upper_bound(routing_group, value) return routing_group[index if index < len(routing_group) else 0][1]