)]}'
{"neutron/tests/fullstack/base.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"adb1d71ee0683c66c6bc33189e892b7e5e9da76d","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        used_ips.append(subnet[\u0027gateway_ip\u0027])"},{"line_number":143,"context_line":"        available_ips \u003d []"},{"line_number":144,"context_line":"        for ip in random_ip_in_cidr(subnet[\u0027cidr\u0027]):"},{"line_number":145,"context_line":"            if ip not in itertools.chain(used_ips,  available_ips):"},{"line_number":146,"context_line":"                available_ips.append(ip)"},{"line_number":147,"context_line":"                if len(available_ips) \u003e\u003d num:"},{"line_number":148,"context_line":"                    return available_ips"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_09cf7fb0","line":145,"updated":"2019-09-24 15:22:38.000000000","message":"Does it make sense to make this more like _generate_ips() in the IPAM code using IPSets?  For example:\n\n\u003e\u003e\u003e ip_set \u003d netaddr.IPSet()\n\u003e\u003e\u003e ip_set.add(netaddr.IPRange(\u002710.0.0.1\u0027, \u002710.0.0.254\u0027))\n\u003e\u003e\u003e ip_allocations \u003d netaddr.IPSet([netaddr.IPAddress(\u002710.0.0.1\u0027)])\n\u003e\u003e\u003e av_set \u003d ip_set.difference(ip_allocations)\n\u003e\u003e\u003e av_ips \u003d list(itertools.islice(av_set, 0, 1000))\n\u003e\u003e\u003e allocated_ip_pool \u003d random.sample(av_ips, 5)\n\u003e\u003e\u003e allocated_ip_pool\n[IPAddress(\u002710.0.0.72\u0027), IPAddress(\u002710.0.0.156\u0027), IPAddress(\u002710.0.0.22\u0027), IPAddress(\u002710.0.0.25\u0027), IPAddress(\u002710.0.0.51\u0027)]\n\nDon\u0027t need a loop or generator to do the hard work :)","commit_id":"730ec3530e110a328d1b7996a3b9acbb22b9c19a"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4525af611f1ccc98ba2ea2ecdfe72a755a36e5e2","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        used_ips.append(subnet[\u0027gateway_ip\u0027])"},{"line_number":143,"context_line":"        available_ips \u003d []"},{"line_number":144,"context_line":"        for ip in random_ip_in_cidr(subnet[\u0027cidr\u0027]):"},{"line_number":145,"context_line":"            if ip not in itertools.chain(used_ips,  available_ips):"},{"line_number":146,"context_line":"                available_ips.append(ip)"},{"line_number":147,"context_line":"                if len(available_ips) \u003e\u003d num:"},{"line_number":148,"context_line":"                    return available_ips"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9afbab77","line":145,"in_reply_to":"3fa7e38b_09cf7fb0","updated":"2019-09-24 17:56:41.000000000","message":"Yes, this method is better but I still need to build this long list:\nlist(itertools.islice(....))\n\nMaybe PS2 method is even faster (does not build this big list)","commit_id":"730ec3530e110a328d1b7996a3b9acbb22b9c19a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5c4f28ea4530bf0fbe7f1239ea51b2e928bfc4c1","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        def random_ips_in_cidr(cidr, num_ips):"},{"line_number":132,"context_line":"            network \u003d netaddr.IPNetwork(cidr)"},{"line_number":133,"context_line":"            ip_address \u003d random.randrange("},{"line_number":134,"context_line":"                network.network.value + 1, network.broadcast.value - num_ips)"},{"line_number":135,"context_line":"            return set([str(netaddr.IPAddress(ipa)) for ipa in"},{"line_number":136,"context_line":"                        range(ip_address, ip_address + num_ips)])"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_4006a41f","line":134,"range":{"start_line":134,"start_character":16,"end_line":134,"end_character":37},"updated":"2019-09-24 19:15:55.000000000","message":"s/network.first","commit_id":"ecd20dabfd1aced7a2f452b323d737f541af2744"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5c4f28ea4530bf0fbe7f1239ea51b2e928bfc4c1","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        def random_ips_in_cidr(cidr, num_ips):"},{"line_number":132,"context_line":"            network \u003d netaddr.IPNetwork(cidr)"},{"line_number":133,"context_line":"            ip_address \u003d random.randrange("},{"line_number":134,"context_line":"                network.network.value + 1, network.broadcast.value - num_ips)"},{"line_number":135,"context_line":"            return set([str(netaddr.IPAddress(ipa)) for ipa in"},{"line_number":136,"context_line":"                        range(ip_address, ip_address + num_ips)])"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_000c2c39","line":134,"range":{"start_line":134,"start_character":43,"end_line":134,"end_character":66},"updated":"2019-09-24 19:15:55.000000000","message":"s/network.last","commit_id":"ecd20dabfd1aced7a2f452b323d737f541af2744"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5c4f28ea4530bf0fbe7f1239ea51b2e928bfc4c1","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        used_ips \u003d set([ip[\u0027ip_address\u0027]"},{"line_number":140,"context_line":"                        for port in ports for ip in port[\u0027fixed_ips\u0027]])"},{"line_number":141,"context_line":"        used_ips.add(subnet[\u0027gateway_ip\u0027])"},{"line_number":142,"context_line":"        for _ in range(10):"},{"line_number":143,"context_line":"            available_ips \u003d random_ips_in_cidr(subnet[\u0027cidr\u0027], num)"},{"line_number":144,"context_line":"            if not available_ips.intersection(used_ips):"},{"line_number":145,"context_line":"                return available_ips"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_e0a230fc","line":142,"updated":"2019-09-24 19:15:55.000000000","message":"Will trying again help?  Or is it because we could randomly pick things that are already used?  Using the ipset.difference() call would remove the used from the list before returning.","commit_id":"ecd20dabfd1aced7a2f452b323d737f541af2744"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9f5ba95b8de508b9472260e2a35c22f5631935fd","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        used_ips \u003d set([ip[\u0027ip_address\u0027]"},{"line_number":140,"context_line":"                        for port in ports for ip in port[\u0027fixed_ips\u0027]])"},{"line_number":141,"context_line":"        used_ips.add(subnet[\u0027gateway_ip\u0027])"},{"line_number":142,"context_line":"        for _ in range(10):"},{"line_number":143,"context_line":"            available_ips \u003d random_ips_in_cidr(subnet[\u0027cidr\u0027], num)"},{"line_number":144,"context_line":"            if not available_ips.intersection(used_ips):"},{"line_number":145,"context_line":"                return available_ips"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_def7c958","line":142,"in_reply_to":"3fa7e38b_e0a230fc","updated":"2019-09-25 10:57:41.000000000","message":"You are right, let me get back to your idea in PS1.","commit_id":"ecd20dabfd1aced7a2f452b323d737f541af2744"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"3980145a11212c4df4ed225d7302ba92350c323c","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        valid_ips \u003d valid_ips.difference(used_ips)"},{"line_number":138,"context_line":"        if valid_ips.size \u003c num:"},{"line_number":139,"context_line":"            self.fail(\"Cannot find enough free IP addresses.\")"},{"line_number":140,"context_line":"        initial \u003d random.randint(0, min(valid_ips.size - num, 1000))"},{"line_number":141,"context_line":"        available_ips \u003d itertools.islice(valid_ips, initial, initial + num)"},{"line_number":142,"context_line":"        return [str(available_ip) for available_ip in available_ips]"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_14a52b47","line":140,"range":{"start_line":140,"start_character":18,"end_line":140,"end_character":24},"updated":"2019-10-12 12:00:05.000000000","message":"Random without retry may intermittently fail too, but with lower-level probability. So, looks good to me.","commit_id":"94f69ab407d081ce49fa5a93946c4cd41bf6ee89"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d9f911e5c29aa465579f7e0118a21c9155e82439","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            self.fail(\"Cannot find enough free IP addresses.\")"},{"line_number":140,"context_line":"        initial \u003d random.randint(0, min(valid_ips.size - num, 1000))"},{"line_number":141,"context_line":"        available_ips \u003d itertools.islice(valid_ips, initial, initial + num)"},{"line_number":142,"context_line":"        return [str(available_ip) for available_ip in available_ips]"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _create_external_vm(self, network, subnet):"},{"line_number":145,"context_line":"        vm \u003d self.useFixture("}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_04c42790","line":142,"updated":"2019-09-25 19:23:36.000000000","message":"Maybe I\u0027m just stuck on using the ipam code, but does replacing these last three lines with this work just the same:\n\n+        available_ips \u003d list(itertools.islice(valid_ips, 0,\n+                             min(valid_ips.size, 1000)))\n+        allocated_ips \u003d random.sample(available_ips, num)\n+        return [str(allocated_ip) for allocated_ip in allocated_ips]\n\nThat way they\u0027re both pretty identical.  Just wondering.","commit_id":"94f69ab407d081ce49fa5a93946c4cd41bf6ee89"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"85bb3892acdf506a5e5f69c83bd62f262db55b3f","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            self.fail(\"Cannot find enough free IP addresses.\")"},{"line_number":140,"context_line":"        initial \u003d random.randint(0, min(valid_ips.size - num, 1000))"},{"line_number":141,"context_line":"        available_ips \u003d itertools.islice(valid_ips, initial, initial + num)"},{"line_number":142,"context_line":"        return [str(available_ip) for available_ip in available_ips]"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _create_external_vm(self, network, subnet):"},{"line_number":145,"context_line":"        vm \u003d self.useFixture("}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_d166c5c1","line":142,"in_reply_to":"3fa7e38b_04c42790","updated":"2019-09-26 08:14:41.000000000","message":"yes, 2 different ways to achieve the same.\nMaybe one of them is a bit faster (I don\u0027t know tbh) but IMO both are fine.","commit_id":"94f69ab407d081ce49fa5a93946c4cd41bf6ee89"}]}
