)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2728b8d54a886d2e6760b7e6bd4990e034dc780a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"as done previously."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I33bd17c723b3e8d409415bda008440f8ed9cfa68"},{"line_number":17,"context_line":"Partial-Bug: 1830240"},{"line_number":18,"context_line":"Implements: subnets-different-pools-same-net"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7faddb67_825ab227","line":17,"updated":"2019-07-09 02:24:12.000000000","message":"Partial or Closes ?","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":14,"context_line":"as done previously."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I33bd17c723b3e8d409415bda008440f8ed9cfa68"},{"line_number":17,"context_line":"Partial-Bug: 1830240"},{"line_number":18,"context_line":"Implements: subnets-different-pools-same-net"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7faddb67_ee210cfd","line":17,"in_reply_to":"7faddb67_825ab227","updated":"2019-07-09 13:14:00.000000000","message":"There are some API tests I want to add, but we already have enough API test coverage to ensure this doesn\u0027t introduce any regressions. This could be \"Closes\" and I can come back to the API tests.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"}],"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e6df939cb6cb4eac490262ef15aaa93d002c1d02","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"        # Use set difference to identify the subnets that would be"},{"line_number":1181,"context_line":"        # violating address scope affinity constraints if the subnet"},{"line_number":1182,"context_line":"        # pool\u0027s address scope was changed."},{"line_number":1183,"context_line":"        violations \u003d all_affected_subnet_ids.difference(rescoped_subnet_ids)"},{"line_number":1184,"context_line":"        if len(violations) \u003e 0:"},{"line_number":1185,"context_line":"            # TODO(tidwellr) raise NetworkAddressScopeAffinityError"},{"line_number":1186,"context_line":"            # wait for neutron-lib release"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_ae63ac19","line":1183,"range":{"start_line":1183,"start_character":8,"end_line":1183,"end_character":76},"updated":"2019-06-27 09:39:02.000000000","message":"I know this is a WIP patch, but I don\u0027t understand this logic. \"rescoped_subnet_ids\" will be always a subset of \"all_affected_subnet_ids\". Am I wrong?","commit_id":"7a1a9444ad8c8aad5341312f5713fe9ba6a07485"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"8e5616274ea5836fbaf53260572cb22502955f2d","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"        # Use set difference to identify the subnets that would be"},{"line_number":1181,"context_line":"        # violating address scope affinity constraints if the subnet"},{"line_number":1182,"context_line":"        # pool\u0027s address scope was changed."},{"line_number":1183,"context_line":"        violations \u003d all_affected_subnet_ids.difference(rescoped_subnet_ids)"},{"line_number":1184,"context_line":"        if len(violations) \u003e 0:"},{"line_number":1185,"context_line":"            # TODO(tidwellr) raise NetworkAddressScopeAffinityError"},{"line_number":1186,"context_line":"            # wait for neutron-lib release"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_e511ba5e","line":1183,"range":{"start_line":1183,"start_character":8,"end_line":1183,"end_character":76},"in_reply_to":"9fb8cfa7_3fc11f55","updated":"2019-06-27 16:25:14.000000000","message":"Actually, this logic is correct. We don\u0027t need to go network-by-network. Pulling all the subnets from each affected network and subtracting the subnets from the pool will tell us whether to block the operation or not. I\u0027m building up some test cases.","commit_id":"7a1a9444ad8c8aad5341312f5713fe9ba6a07485"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"7d6bb441c107fe108f70b6aca148ac01764dca38","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"        # Use set difference to identify the subnets that would be"},{"line_number":1181,"context_line":"        # violating address scope affinity constraints if the subnet"},{"line_number":1182,"context_line":"        # pool\u0027s address scope was changed."},{"line_number":1183,"context_line":"        violations \u003d all_affected_subnet_ids.difference(rescoped_subnet_ids)"},{"line_number":1184,"context_line":"        if len(violations) \u003e 0:"},{"line_number":1185,"context_line":"            # TODO(tidwellr) raise NetworkAddressScopeAffinityError"},{"line_number":1186,"context_line":"            # wait for neutron-lib release"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fb8cfa7_3fc11f55","line":1183,"range":{"start_line":1183,"start_character":8,"end_line":1183,"end_character":76},"in_reply_to":"9fb8cfa7_ae63ac19","updated":"2019-06-27 14:45:42.000000000","message":"The idea here is to subtract the rescoped subnets from all possible subnets in the address scope. If there are any subnets left over, we can\u0027t do the operation because it would leave subnets stranded in a different address scope on the same network. Because we are allowing subnets from different pools to exist on the same network, this is looking for any subnets that would not stranded. all_affected_subnet_ids could be renamed so it\u0027s clearer what this means, it is just all the subnets in the address scope we are moving the subnet pool out of.\n\nIf rescoped_subnet_ids is only a proper subset, it means we can\u0027t perform the operation. If the 2 sets are equivalent, then we can proceed.\n\nThis could use a little work because we may have to go network-by-network with this check.","commit_id":"7a1a9444ad8c8aad5341312f5713fe9ba6a07485"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1a616fa159d62235d539fdd4c7fae0e93daef59f","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"        # Use set difference to identify the subnets that would be"},{"line_number":1181,"context_line":"        # violating address scope affinity constraints if the subnet"},{"line_number":1182,"context_line":"        # pool\u0027s address scope was changed."},{"line_number":1183,"context_line":"        violations \u003d all_affected_subnet_ids.difference(rescoped_subnet_ids)"},{"line_number":1184,"context_line":"        if len(violations) \u003e 0:"},{"line_number":1185,"context_line":"            # TODO(tidwellr) raise NetworkAddressScopeAffinityError"},{"line_number":1186,"context_line":"            # wait for neutron-lib release"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_4802180c","line":1183,"range":{"start_line":1183,"start_character":8,"end_line":1183,"end_character":76},"in_reply_to":"9fb8cfa7_e511ba5e","updated":"2019-07-17 12:28:01.000000000","message":"Ok, now I see. \"all_affected_subnet_ids\" must be the same as \"rescoped_subnet_ids\"","commit_id":"7a1a9444ad8c8aad5341312f5713fe9ba6a07485"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db9053631975190c284714283f1c8b88d18ba05a","unresolved":false,"context_lines":[{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"    def _check_subnetpool_address_scope_network_affinity(self, context,"},{"line_number":1150,"context_line":"                                                        subnetpool_id,"},{"line_number":1151,"context_line":"                                                        ip_version):"},{"line_number":1152,"context_line":"        \"\"\"Check whether updating a subnet pool\u0027s address scope is allowed."},{"line_number":1153,"context_line":""},{"line_number":1154,"context_line":"        - Identify the subnets that would be re-scoped"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_c8e0cbcf","line":1151,"updated":"2019-07-09 07:49:01.000000000","message":"nitty nit: a bit wrong indentation","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"    def _check_subnetpool_address_scope_network_affinity(self, context,"},{"line_number":1150,"context_line":"                                                        subnetpool_id,"},{"line_number":1151,"context_line":"                                                        ip_version):"},{"line_number":1152,"context_line":"        \"\"\"Check whether updating a subnet pool\u0027s address scope is allowed."},{"line_number":1153,"context_line":""},{"line_number":1154,"context_line":"        - Identify the subnets that would be re-scoped"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_6e83dccd","line":1151,"in_reply_to":"7faddb67_c8e0cbcf","updated":"2019-07-09 13:14:00.000000000","message":"oops","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2728b8d54a886d2e6760b7e6bd4990e034dc780a","unresolved":false,"context_lines":[{"line_number":1177,"context_line":"        all_affected_subnet_ids \u003d set()"},{"line_number":1178,"context_line":""},{"line_number":1179,"context_line":"        for subnet in all_network_subnets:"},{"line_number":1180,"context_line":"            all_affected_subnet_ids.add(subnet.id)"},{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"        # Use set difference to identify the subnets that would be"},{"line_number":1183,"context_line":"        # violating address scope affinity constraints if the subnet"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_d792aef6","line":1180,"updated":"2019-07-09 02:24:12.000000000","message":"nit: could use list comprehension,\n\nall_affected_subnet_ids \u003d set([subnet.id for subnet in all_network_subnets])","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":1177,"context_line":"        all_affected_subnet_ids \u003d set()"},{"line_number":1178,"context_line":""},{"line_number":1179,"context_line":"        for subnet in all_network_subnets:"},{"line_number":1180,"context_line":"            all_affected_subnet_ids.add(subnet.id)"},{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"        # Use set difference to identify the subnets that would be"},{"line_number":1183,"context_line":"        # violating address scope affinity constraints if the subnet"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_ee76ec06","line":1180,"in_reply_to":"7faddb67_28fabf74","updated":"2019-07-09 13:14:00.000000000","message":"Yep","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db9053631975190c284714283f1c8b88d18ba05a","unresolved":false,"context_lines":[{"line_number":1177,"context_line":"        all_affected_subnet_ids \u003d set()"},{"line_number":1178,"context_line":""},{"line_number":1179,"context_line":"        for subnet in all_network_subnets:"},{"line_number":1180,"context_line":"            all_affected_subnet_ids.add(subnet.id)"},{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"        # Use set difference to identify the subnets that would be"},{"line_number":1183,"context_line":"        # violating address scope affinity constraints if the subnet"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_28fabf74","line":1180,"in_reply_to":"7faddb67_d792aef6","updated":"2019-07-09 07:49:01.000000000","message":"+1","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2728b8d54a886d2e6760b7e6bd4990e034dc780a","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"        # violating address scope affinity constraints if the subnet"},{"line_number":1184,"context_line":"        # pool\u0027s address scope was changed."},{"line_number":1185,"context_line":"        violations \u003d all_affected_subnet_ids.difference(rescoped_subnet_ids)"},{"line_number":1186,"context_line":"        if len(violations) \u003e 0:"},{"line_number":1187,"context_line":"            raise addr_scope_exc.NetworkAddressScopeAffinityError()"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"    def _check_subnetpool_update_allowed(self, context, subnetpool_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_b7c132e7","line":1186,"updated":"2019-07-09 02:24:12.000000000","message":"shouldn\u0027t \u0027if violations\u0027 be enough?","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"        # violating address scope affinity constraints if the subnet"},{"line_number":1184,"context_line":"        # pool\u0027s address scope was changed."},{"line_number":1185,"context_line":"        violations \u003d all_affected_subnet_ids.difference(rescoped_subnet_ids)"},{"line_number":1186,"context_line":"        if len(violations) \u003e 0:"},{"line_number":1187,"context_line":"            raise addr_scope_exc.NetworkAddressScopeAffinityError()"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"    def _check_subnetpool_update_allowed(self, context, subnetpool_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_0ef9084c","line":1186,"in_reply_to":"7faddb67_b7c132e7","updated":"2019-07-09 13:14:00.000000000","message":"Thanks, I learned a little something about sets today! That indeed does work the same ways as it does with lists.\n\n\u003e\u003e\u003e violations \u003d set()\n\u003e\u003e\u003e if violations:\n...     print(True)\n... else:\n...     print(False)\n... \nFalse","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"}],"neutron/db/ipam_backend_mixin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5567aff445cfde0b4728d7082dcff21101a2617d","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            new_subnetpool \u003d subnetpool_obj.SubnetPool.get_object("},{"line_number":267,"context_line":"                context, id\u003dnew_subnetpool_id)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        if new_subnetpool and network_scope and \\"},{"line_number":270,"context_line":"            new_subnetpool.address_scope_id !\u003d network_scope.id:"},{"line_number":271,"context_line":"            # TODO(tidwellr) Raise proper exception here from neutron-lib"},{"line_number":272,"context_line":"            raise Exception()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_3c84e4d2","line":269,"range":{"start_line":269,"start_character":48,"end_line":269,"end_character":49},"updated":"2019-06-26 15:02:14.000000000","message":"nit: () around the statements is better than a backslash :)  And below.","commit_id":"4dfa828ec3677ecdd8ce5996a5c5aa3c226bf161"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5567aff445cfde0b4728d7082dcff21101a2617d","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        for subnet in network.subnets:"},{"line_number":275,"context_line":"            if subnet.ip_version \u003d\u003d ip_version:"},{"line_number":276,"context_line":"                if not network_scope and \\"},{"line_number":277,"context_line":"                    new_subnetpool_id !\u003d subnet.subnetpool_id:"},{"line_number":278,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def validate_allocation_pools(self, ip_pools, subnet_cidr):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_1ccd602f","line":277,"updated":"2019-06-26 15:02:14.000000000","message":"I would get rid of the nested if()\u0027s and just put them all together","commit_id":"4dfa828ec3677ecdd8ce5996a5c5aa3c226bf161"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2728b8d54a886d2e6760b7e6bd4990e034dc780a","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if network_scope and ipv6_pd_subnetpool:"},{"line_number":269,"context_line":"            raise addr_scope_exc.NetworkAddressScopeAffinityError()"},{"line_number":270,"context_line":"        if (not ipv6_pd_subnetpool and new_subnetpool and network_scope and"},{"line_number":271,"context_line":"           new_subnetpool.address_scope_id !\u003d network_scope.id):"},{"line_number":272,"context_line":"            raise addr_scope_exc.NetworkAddressScopeAffinityError()"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        # Checks for situations where address scopes aren\u0027t involved"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_b7661229","line":271,"updated":"2019-07-09 02:24:12.000000000","message":"nit: should probably be indented 8 spaces to match other code here, 3 is a little odd.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"aa7abb62acbf96c124b333807d694a347a2122b3","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if network_scope and ipv6_pd_subnetpool:"},{"line_number":269,"context_line":"            raise addr_scope_exc.NetworkAddressScopeAffinityError()"},{"line_number":270,"context_line":"        if (not ipv6_pd_subnetpool and new_subnetpool and network_scope and"},{"line_number":271,"context_line":"           new_subnetpool.address_scope_id !\u003d network_scope.id):"},{"line_number":272,"context_line":"            raise addr_scope_exc.NetworkAddressScopeAffinityError()"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        # Checks for situations where address scopes aren\u0027t involved"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_ba84ae5f","line":271,"in_reply_to":"7faddb67_8ea2d84a","updated":"2019-07-09 15:52:32.000000000","message":"Actually, pep8 doesn\u0027t like that. pep8 seems to insist on this, which admittedly is really awkward to look at.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if network_scope and ipv6_pd_subnetpool:"},{"line_number":269,"context_line":"            raise addr_scope_exc.NetworkAddressScopeAffinityError()"},{"line_number":270,"context_line":"        if (not ipv6_pd_subnetpool and new_subnetpool and network_scope and"},{"line_number":271,"context_line":"           new_subnetpool.address_scope_id !\u003d network_scope.id):"},{"line_number":272,"context_line":"            raise addr_scope_exc.NetworkAddressScopeAffinityError()"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        # Checks for situations where address scopes aren\u0027t involved"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_8ea2d84a","line":271,"in_reply_to":"7faddb67_b7661229","updated":"2019-07-09 13:14:00.000000000","message":"That\u0027s an oopsie, will change","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9593f56ecd666de2a072dce1b061365efcc3caf5","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if network_scope and ipv6_pd_subnetpool:"},{"line_number":269,"context_line":"            raise addr_scope_exc.NetworkAddressScopeAffinityError()"},{"line_number":270,"context_line":"        if (not ipv6_pd_subnetpool and new_subnetpool and network_scope and"},{"line_number":271,"context_line":"           new_subnetpool.address_scope_id !\u003d network_scope.id):"},{"line_number":272,"context_line":"            raise addr_scope_exc.NetworkAddressScopeAffinityError()"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        # Checks for situations where address scopes aren\u0027t involved"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_1fddb141","line":271,"in_reply_to":"7faddb67_ba84ae5f","updated":"2019-07-09 16:53:24.000000000","message":"Hmm, when I fixed this up tree-wide it wanted:\n\nif (foo and\n        bar):\n    baz","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2728b8d54a886d2e6760b7e6bd4990e034dc780a","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            # Check the prefix delegation case"},{"line_number":277,"context_line":"            if ipv6_pd_subnetpool:"},{"line_number":278,"context_line":"                if (subnet.ip_version \u003d\u003d const.IP_VERSION_6 and"},{"line_number":279,"context_line":"                   subnet.subnetpool_id !\u003d new_subnetpool):"},{"line_number":280,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":281,"context_line":"            else:"},{"line_number":282,"context_line":"                if (new_subnetpool and not network_scope and"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_57147e4e","line":279,"range":{"start_line":279,"start_character":43,"end_line":279,"end_character":57},"updated":"2019-07-09 02:24:12.000000000","message":"s/new_subnetpool.id right?  although we don\u0027t know if new_subnetpool is not None.\n\nAnd seeing we do basically the same thing on L282-284 maybe it can just be done once above:\n\nsubnetpool_id_diff \u003d new_subnetpool and new_subnetpool.id !\u003d subnet.subnetpool_id\n\nmaybe that helps?","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2728b8d54a886d2e6760b7e6bd4990e034dc780a","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            # Check the prefix delegation case"},{"line_number":277,"context_line":"            if ipv6_pd_subnetpool:"},{"line_number":278,"context_line":"                if (subnet.ip_version \u003d\u003d const.IP_VERSION_6 and"},{"line_number":279,"context_line":"                   subnet.subnetpool_id !\u003d new_subnetpool):"},{"line_number":280,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":281,"context_line":"            else:"},{"line_number":282,"context_line":"                if (new_subnetpool and not network_scope and"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_77709add","line":279,"updated":"2019-07-09 02:24:12.000000000","message":"same","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"aa7abb62acbf96c124b333807d694a347a2122b3","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            # Check the prefix delegation case"},{"line_number":277,"context_line":"            if ipv6_pd_subnetpool:"},{"line_number":278,"context_line":"                if (subnet.ip_version \u003d\u003d const.IP_VERSION_6 and"},{"line_number":279,"context_line":"                   subnet.subnetpool_id !\u003d new_subnetpool):"},{"line_number":280,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":281,"context_line":"            else:"},{"line_number":282,"context_line":"                if (new_subnetpool and not network_scope and"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_5ac1fa7f","line":279,"in_reply_to":"7faddb67_29171ef0","updated":"2019-07-09 15:52:32.000000000","message":"We have to check whether the new subnet is a prefix delegation subnet, then compare that against any other IPv6 subnets. I\u0027m not sure comparing each individual subnet against the constant is sufficient. I\u0027m re-working the if..elif structure in this loop, I\u0027m hoping it will be a little more readable.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"db3f29dd3efd147619398dabfc0cbb7db177f583","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            # Check the prefix delegation case"},{"line_number":277,"context_line":"            if ipv6_pd_subnetpool:"},{"line_number":278,"context_line":"                if (subnet.ip_version \u003d\u003d const.IP_VERSION_6 and"},{"line_number":279,"context_line":"                   subnet.subnetpool_id !\u003d new_subnetpool):"},{"line_number":280,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":281,"context_line":"            else:"},{"line_number":282,"context_line":"                if (new_subnetpool and not network_scope and"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_29171ef0","line":279,"in_reply_to":"7faddb67_4e72a0e5","updated":"2019-07-09 13:36:30.000000000","message":"Oh, yuck.  Can you just check it against the constant?\n\n    subnet.subnetpool_id !\u003d const.IPV6_PD_POOL_ID\n\nSo you can probably ignore my comment about checking this above.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9593f56ecd666de2a072dce1b061365efcc3caf5","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            # Check the prefix delegation case"},{"line_number":277,"context_line":"            if ipv6_pd_subnetpool:"},{"line_number":278,"context_line":"                if (subnet.ip_version \u003d\u003d const.IP_VERSION_6 and"},{"line_number":279,"context_line":"                   subnet.subnetpool_id !\u003d new_subnetpool):"},{"line_number":280,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":281,"context_line":"            else:"},{"line_number":282,"context_line":"                if (new_subnetpool and not network_scope and"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_9ff0c1cb","line":279,"in_reply_to":"7faddb67_5ac1fa7f","updated":"2019-07-09 16:53:24.000000000","message":"Right, but if we\u0027re here we know (new_subnetpool \u003d\u003d const.IPV6_PD_POOL_ID) since ipv6_pd_subnetpool is True, so it should be the same test.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            # Check the prefix delegation case"},{"line_number":277,"context_line":"            if ipv6_pd_subnetpool:"},{"line_number":278,"context_line":"                if (subnet.ip_version \u003d\u003d const.IP_VERSION_6 and"},{"line_number":279,"context_line":"                   subnet.subnetpool_id !\u003d new_subnetpool):"},{"line_number":280,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":281,"context_line":"            else:"},{"line_number":282,"context_line":"                if (new_subnetpool and not network_scope and"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_4e72a0e5","line":279,"in_reply_to":"7faddb67_77709add","updated":"2019-07-09 13:14:00.000000000","message":"OK, I hear you on this. For the prefix delegation case, things get a little weird. There actually isn\u0027t a subnetpool record (and hence no OVO), there\u0027s just a constant we pass around to denote the prefix delegation pool. See L265, this code only is executed as a special case for prefix delegation. If this is a prefix delegation subnet we won\u0027t get passed an OVO, we\u0027ll get passed a string.\n\nI racked my brain with how to handle prefix delegation cases more elegantly, this is the best I could come up with. Any ideas?","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2728b8d54a886d2e6760b7e6bd4990e034dc780a","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            else:"},{"line_number":282,"context_line":"                if (new_subnetpool and not network_scope and"},{"line_number":283,"context_line":"                   new_subnetpool.id !\u003d subnet.subnetpool_id and"},{"line_number":284,"context_line":"                   subnet.ip_version \u003d\u003d new_subnetpool.ip_version):"},{"line_number":285,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":286,"context_line":"                elif (subnet.ip_version \u003d\u003d subnet_ip_version and"},{"line_number":287,"context_line":"                     subnet.subnetpool_id and not new_subnetpool):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_1777e6d6","line":284,"updated":"2019-07-09 02:24:12.000000000","message":"same","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            else:"},{"line_number":282,"context_line":"                if (new_subnetpool and not network_scope and"},{"line_number":283,"context_line":"                   new_subnetpool.id !\u003d subnet.subnetpool_id and"},{"line_number":284,"context_line":"                   subnet.ip_version \u003d\u003d new_subnetpool.ip_version):"},{"line_number":285,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":286,"context_line":"                elif (subnet.ip_version \u003d\u003d subnet_ip_version and"},{"line_number":287,"context_line":"                     subnet.subnetpool_id and not new_subnetpool):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_8e3e58d8","line":284,"in_reply_to":"7faddb67_1777e6d6","updated":"2019-07-09 13:14:00.000000000","message":"Because this isn\u0027t a prefix delegation, we get an OVO. The \"None\" check is at the front of the \"if\" case for short-circuit evaluation.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"db3f29dd3efd147619398dabfc0cbb7db177f583","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            else:"},{"line_number":282,"context_line":"                if (new_subnetpool and not network_scope and"},{"line_number":283,"context_line":"                   new_subnetpool.id !\u003d subnet.subnetpool_id and"},{"line_number":284,"context_line":"                   subnet.ip_version \u003d\u003d new_subnetpool.ip_version):"},{"line_number":285,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":286,"context_line":"                elif (subnet.ip_version \u003d\u003d subnet_ip_version and"},{"line_number":287,"context_line":"                     subnet.subnetpool_id and not new_subnetpool):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_49d05a20","line":284,"in_reply_to":"7faddb67_8e3e58d8","updated":"2019-07-09 13:36:30.000000000","message":"ack, just the indentation then\n\nAnd since I\u0027m here, maybe it\u0027s best to try and keep the order of the checks consistent in this code?  i.e. scope, ip_version, pool_id?  When reviewing I was trying to see if there was some commonality in the checks and had to rewrite it in my head like that.  Just a nit...","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2728b8d54a886d2e6760b7e6bd4990e034dc780a","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                   subnet.ip_version \u003d\u003d new_subnetpool.ip_version):"},{"line_number":285,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":286,"context_line":"                elif (subnet.ip_version \u003d\u003d subnet_ip_version and"},{"line_number":287,"context_line":"                     subnet.subnetpool_id and not new_subnetpool):"},{"line_number":288,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def validate_allocation_pools(self, ip_pools, subnet_cidr):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_377222e5","line":287,"updated":"2019-07-09 02:24:12.000000000","message":"same, surprised pep8 didn\u0027t complain about these :(","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                   subnet.ip_version \u003d\u003d new_subnetpool.ip_version):"},{"line_number":285,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":286,"context_line":"                elif (subnet.ip_version \u003d\u003d subnet_ip_version and"},{"line_number":287,"context_line":"                     subnet.subnetpool_id and not new_subnetpool):"},{"line_number":288,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def validate_allocation_pools(self, ip_pools, subnet_cidr):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_ee2eeca3","line":287,"in_reply_to":"7faddb67_377222e5","updated":"2019-07-09 13:14:00.000000000","message":"oops......","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"aa7abb62acbf96c124b333807d694a347a2122b3","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                   subnet.ip_version \u003d\u003d new_subnetpool.ip_version):"},{"line_number":285,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":286,"context_line":"                elif (subnet.ip_version \u003d\u003d subnet_ip_version and"},{"line_number":287,"context_line":"                     subnet.subnetpool_id and not new_subnetpool):"},{"line_number":288,"context_line":"                    raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def validate_allocation_pools(self, ip_pools, subnet_cidr):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_fabf86f8","line":287,"in_reply_to":"7faddb67_ee2eeca3","updated":"2019-07-09 15:52:32.000000000","message":"Actually, not an oops. pep8 is insisting on that indentation....","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0b2c4253dcb40147a9b672d47efee260b699bc48","unresolved":false,"context_lines":[{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def _validate_network_subnetpools(self, network, subnet_ip_version,"},{"line_number":258,"context_line":"                                      new_subnetpool\u003dNone,"},{"line_number":259,"context_line":"                                      network_scope\u003dNone):"},{"line_number":260,"context_line":"        \"\"\"Validate all subnets on the given network have been allocated from"},{"line_number":261,"context_line":"           the same subnet pool as new_subnetpool_id if no address scope is"},{"line_number":262,"context_line":"           used. If address scopes are used, validate that all subnets on the"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_c13f2823","line":259,"updated":"2019-07-10 16:13:28.000000000","message":"These are always passed, so we shouldn\u0027t need defaults, just need to update the tests.","commit_id":"cc98d1f8c4b31528803a732670b5e6a2bc16cae3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"710e90d71f3b463df2d7e044950ddc310e0af650","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            # Check the prefix delegation case"},{"line_number":277,"context_line":"            if (ipv6_pd_subnetpool and"},{"line_number":278,"context_line":"               subnet.ip_version \u003d\u003d const.IP_VERSION_6 and"},{"line_number":279,"context_line":"               subnet.subnetpool_id !\u003d new_subnetpool):"},{"line_number":280,"context_line":"                raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":281,"context_line":"            elif (not ipv6_pd_subnetpool and new_subnetpool and"},{"line_number":282,"context_line":"                 not network_scope and"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_3709a92b","line":279,"updated":"2019-07-10 07:44:39.000000000","message":"Those comments in previous PS from You and Brian are quite long, and it may take a while to understand differences between this line and L283 so maybe You can add some comment with explanation why here subnet.subnetpool_id is compared to new_subnetpool and below to new_subnetpool.id - in the future readers of this code will not have easy access to history of comments in Gerrit :)","commit_id":"cc98d1f8c4b31528803a732670b5e6a2bc16cae3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0b2c4253dcb40147a9b672d47efee260b699bc48","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            # Check the prefix delegation case"},{"line_number":277,"context_line":"            if (ipv6_pd_subnetpool and"},{"line_number":278,"context_line":"               subnet.ip_version \u003d\u003d const.IP_VERSION_6 and"},{"line_number":279,"context_line":"               subnet.subnetpool_id !\u003d new_subnetpool):"},{"line_number":280,"context_line":"                raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":281,"context_line":"            elif (not ipv6_pd_subnetpool and new_subnetpool and"},{"line_number":282,"context_line":"                 not network_scope and"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_e13a6432","line":279,"in_reply_to":"7faddb67_3709a92b","updated":"2019-07-10 16:13:28.000000000","message":"I can do that, along with changing the indentation :)","commit_id":"cc98d1f8c4b31528803a732670b5e6a2bc16cae3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0b2c4253dcb40147a9b672d47efee260b699bc48","unresolved":false,"context_lines":[{"line_number":550,"context_line":"            subnetpool \u003d subnet_args[\u0027subnetpool_id\u0027]"},{"line_number":551,"context_line":"        elif subnet_args.get(\u0027subnetpool_id\u0027):"},{"line_number":552,"context_line":"            subnetpool \u003d self._get_subnetpool(context,"},{"line_number":553,"context_line":"                                              subnet_args[\u0027subnetpool_id\u0027])"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"        self._validate_subnet_cidr(context, network, subnet_args[\u0027cidr\u0027])"},{"line_number":556,"context_line":"        self._validate_network_subnetpools(network,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7faddb67_a1446cb8","line":553,"updated":"2019-07-10 16:13:28.000000000","message":"These checks can be tweaked a little by just pulling the subnetpool_id out once beforehand.","commit_id":"cc98d1f8c4b31528803a732670b5e6a2bc16cae3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"94965e353af43b0367cc136055d83bd16a6182ac","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                else:"},{"line_number":291,"context_line":"                    if (subnet.subnetpool_id and"},{"line_number":292,"context_line":"                            subnet.ip_version \u003d\u003d subnet_ip_version):"},{"line_number":293,"context_line":"                        raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def validate_allocation_pools(self, ip_pools, subnet_cidr):"},{"line_number":296,"context_line":"        \"\"\"Validate IP allocation pools."}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_75d06020","line":293,"updated":"2019-07-11 13:24:27.000000000","message":"Ryan - make sure I didn\u0027t mess things up with my change, I think it\u0027s all the same just with more nested if()\u0027s.\n\nAlso, looking at this, there isn\u0027t much info returned to the caller on \u0027why\u0027 - i.e. the exception doesn\u0027t say the version or scope or etc is wrong, just noticed it\u0027s the same exception in all these cases.  Or maybe that\u0027s enough since they would have passed a pool ID?","commit_id":"0740c33f50361c25b54579a5a118b0be0c3a7e12"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a7d364e24a26844834e2c6a07400a9f3df6a58db","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                else:"},{"line_number":291,"context_line":"                    if (subnet.subnetpool_id and"},{"line_number":292,"context_line":"                            subnet.ip_version \u003d\u003d subnet_ip_version):"},{"line_number":293,"context_line":"                        raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def validate_allocation_pools(self, ip_pools, subnet_cidr):"},{"line_number":296,"context_line":"        \"\"\"Validate IP allocation pools."}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_7d0b297c","line":293,"in_reply_to":"7faddb67_75d06020","updated":"2019-07-16 13:04:36.000000000","message":"These updates look good. The user will only ever encounter these exceptions when creating a subnet. Subnet onboard is unaffected by this, and because subnet updates are not how you move subnets between subnet pools, creation is the only time you would ever see this. Because of this, my thinking is that it will be clear to the user that they can\u0027t build a subnet on the the given network unless they use a different subnet pool.","commit_id":"0740c33f50361c25b54579a5a118b0be0c3a7e12"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1a616fa159d62235d539fdd4c7fae0e93daef59f","unresolved":false,"context_lines":[{"line_number":262,"context_line":"           given network participate in the same address scope."},{"line_number":263,"context_line":"        \"\"\""},{"line_number":264,"context_line":"        # \u0027new_subnetpool\u0027 might just be the Prefix Delegation ID"},{"line_number":265,"context_line":"        ipv6_pd_subnetpool \u003d new_subnetpool \u003d\u003d const.IPV6_PD_POOL_ID"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # Check address scope affinities"},{"line_number":268,"context_line":"        if network_scope:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_48e0d8cd","line":265,"updated":"2019-07-17 12:28:01.000000000","message":"small nit: this is a bit confusing, because new_subnetpool can be just an ID (prefix_delegation) or an object.","commit_id":"2a750b349f9f76e7c7153652b98cdb79c960762b"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a9f942d914e5d03ad62ed358896d9a66f21a6d7b","unresolved":false,"context_lines":[{"line_number":262,"context_line":"           given network participate in the same address scope."},{"line_number":263,"context_line":"        \"\"\""},{"line_number":264,"context_line":"        # \u0027new_subnetpool\u0027 might just be the Prefix Delegation ID"},{"line_number":265,"context_line":"        ipv6_pd_subnetpool \u003d new_subnetpool \u003d\u003d const.IPV6_PD_POOL_ID"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # Check address scope affinities"},{"line_number":268,"context_line":"        if network_scope:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_a8286c96","line":265,"in_reply_to":"7faddb67_48e0d8cd","updated":"2019-07-17 12:59:51.000000000","message":"Yes, it is very confusing and there was a lot of head-scratching over this. I\u0027m not seeing an alternative though. This is a function of the way the prefix delegation pool works. We don\u0027t keep a record for it and we never instantiate an OVO for it, we simply pass around this constant. All other solutions I explored were a whole lot more invasive and even more messy than this is.\n\nSee L552 below for more context.","commit_id":"2a750b349f9f76e7c7153652b98cdb79c960762b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"241e7ae1b17df016dfa99ca7632dfdd48f573aec","unresolved":false,"context_lines":[{"line_number":262,"context_line":"           given network participate in the same address scope."},{"line_number":263,"context_line":"        \"\"\""},{"line_number":264,"context_line":"        # \u0027new_subnetpool\u0027 might just be the Prefix Delegation ID"},{"line_number":265,"context_line":"        ipv6_pd_subnetpool \u003d new_subnetpool \u003d\u003d const.IPV6_PD_POOL_ID"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # Check address scope affinities"},{"line_number":268,"context_line":"        if network_scope:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_9e67eab7","line":265,"in_reply_to":"7faddb67_a8286c96","updated":"2019-07-17 13:57:25.000000000","message":"I\u0027m OK with this anyway.\n\nhehehe L552 should be here (only a nitty nit)","commit_id":"2a750b349f9f76e7c7153652b98cdb79c960762b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1a616fa159d62235d539fdd4c7fae0e93daef59f","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                    # we can check the ID and IP version."},{"line_number":286,"context_line":"                    if (subnet.subnetpool_id !\u003d new_subnetpool.id and"},{"line_number":287,"context_line":"                            subnet.ip_version \u003d\u003d new_subnetpool.ip_version and"},{"line_number":288,"context_line":"                            not network_scope):"},{"line_number":289,"context_line":"                        raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":290,"context_line":"                else:"},{"line_number":291,"context_line":"                    if (subnet.subnetpool_id and"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_c8fcc871","line":288,"updated":"2019-07-17 12:28:01.000000000","message":"Sorry, but I\u0027m trying to understand the logic here. Why network_scope (address scope) should be None?","commit_id":"2a750b349f9f76e7c7153652b98cdb79c960762b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"241e7ae1b17df016dfa99ca7632dfdd48f573aec","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                    # we can check the ID and IP version."},{"line_number":286,"context_line":"                    if (subnet.subnetpool_id !\u003d new_subnetpool.id and"},{"line_number":287,"context_line":"                            subnet.ip_version \u003d\u003d new_subnetpool.ip_version and"},{"line_number":288,"context_line":"                            not network_scope):"},{"line_number":289,"context_line":"                        raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":290,"context_line":"                else:"},{"line_number":291,"context_line":"                    if (subnet.subnetpool_id and"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_fe0cde94","line":288,"in_reply_to":"7faddb67_286f9cfc","updated":"2019-07-17 13:57:25.000000000","message":"Ufff thanks for the explanation. At least for me, this wasn\u0027t evident.\n\nif network_scope null --\u003e no address scopes on the subnets or the network. That means you can\u0027t add a new subnetpool to this net.","commit_id":"2a750b349f9f76e7c7153652b98cdb79c960762b"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a9f942d914e5d03ad62ed358896d9a66f21a6d7b","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                    # we can check the ID and IP version."},{"line_number":286,"context_line":"                    if (subnet.subnetpool_id !\u003d new_subnetpool.id and"},{"line_number":287,"context_line":"                            subnet.ip_version \u003d\u003d new_subnetpool.ip_version and"},{"line_number":288,"context_line":"                            not network_scope):"},{"line_number":289,"context_line":"                        raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":290,"context_line":"                else:"},{"line_number":291,"context_line":"                    if (subnet.subnetpool_id and"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_286f9cfc","line":288,"in_reply_to":"7faddb67_c8fcc871","updated":"2019-07-17 12:59:51.000000000","message":"All subnets of the same address family must be allocated from subnet pools that participate in the same address scope. However, if you don\u0027t use address scopes the address scope of the subnets on the network will be the \"null\" scope. In that case, network_scope will be None. network_scope will be None in cases where you haven\u0027t used address scopes.\n\nThis block is checking to see whether the subnet you are attempting to create is coming from a different subnet pool than other existing subnets when you aren\u0027t using address scopes.","commit_id":"2a750b349f9f76e7c7153652b98cdb79c960762b"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"c2216c2267e72ea887f9da073d01e8b07ce26fa1","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                    # we can check the ID and IP version."},{"line_number":286,"context_line":"                    if (subnet.subnetpool_id !\u003d new_subnetpool.id and"},{"line_number":287,"context_line":"                            subnet.ip_version \u003d\u003d new_subnetpool.ip_version and"},{"line_number":288,"context_line":"                            not network_scope):"},{"line_number":289,"context_line":"                        raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":290,"context_line":"                else:"},{"line_number":291,"context_line":"                    if (subnet.subnetpool_id and"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_2249e2b5","line":288,"in_reply_to":"7faddb67_f948782d","updated":"2019-07-18 14:25:19.000000000","message":"I also forgot to mention that unless you use address scopes, the current restriction of 1 subnet pool per network continues to be enforced. So if network_scope is None, then it is true and expected that you can\u0027t create a subnet from a different subnet pool on the  network.","commit_id":"2a750b349f9f76e7c7153652b98cdb79c960762b"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"4caac052e1337ed0010d7fdd4f05f55126e793c9","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                    # we can check the ID and IP version."},{"line_number":286,"context_line":"                    if (subnet.subnetpool_id !\u003d new_subnetpool.id and"},{"line_number":287,"context_line":"                            subnet.ip_version \u003d\u003d new_subnetpool.ip_version and"},{"line_number":288,"context_line":"                            not network_scope):"},{"line_number":289,"context_line":"                        raise exc.NetworkSubnetPoolAffinityError()"},{"line_number":290,"context_line":"                else:"},{"line_number":291,"context_line":"                    if (subnet.subnetpool_id and"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_f948782d","line":288,"in_reply_to":"7faddb67_fe0cde94","updated":"2019-07-17 14:29:12.000000000","message":"Subnet onboard exists to enable adopting subnets into pools and shifting things around into an address scope. It actually is possible, just use subnet onboard.","commit_id":"2a750b349f9f76e7c7153652b98cdb79c960762b"}],"neutron/objects/address_scope.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db9053631975190c284714283f1c8b88d18ba05a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        if scope_model_obj:"},{"line_number":51,"context_line":"            return cls._load_object(context, scope_model_obj)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_286ddf31","line":53,"updated":"2019-07-09 07:49:01.000000000","message":"nit: I don\u0027t think this is necessary","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        if scope_model_obj:"},{"line_number":51,"context_line":"            return cls._load_object(context, scope_model_obj)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_ee07cc1b","line":53,"in_reply_to":"7faddb67_286ddf31","updated":"2019-07-09 13:14:00.000000000","message":"Not necessary, just being explicit.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1a616fa159d62235d539fdd4c7fae0e93daef59f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        if scope_model_obj:"},{"line_number":51,"context_line":"            return cls._load_object(context, scope_model_obj)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_48877863","line":53,"updated":"2019-07-17 12:28:01.000000000","message":"small nit: not needed, a method will return always None.","commit_id":"2a750b349f9f76e7c7153652b98cdb79c960762b"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a9f942d914e5d03ad62ed358896d9a66f21a6d7b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        if scope_model_obj:"},{"line_number":51,"context_line":"            return cls._load_object(context, scope_model_obj)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_bb6c38ce","line":53,"in_reply_to":"7faddb67_48877863","updated":"2019-07-17 12:59:51.000000000","message":"Yes, I just chose to be explicit here.","commit_id":"2a750b349f9f76e7c7153652b98cdb79c960762b"}],"neutron/tests/unit/db/test_db_base_plugin_v2.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"3d96a3075c97b2b58fd39256c9b73c3f32c8b2f7","unresolved":false,"context_lines":[{"line_number":535,"context_line":"        # Things can go wrong - raise HTTP exc with res code only"},{"line_number":536,"context_line":"        # so it can be caught by unit tests"},{"line_number":537,"context_line":"        if res.status_int \u003e\u003d webob.exc.HTTPClientError.code:"},{"line_number":538,"context_line":"            print(res)"},{"line_number":539,"context_line":"            raise webob.exc.HTTPClientError(code\u003dres.status_int)"},{"line_number":540,"context_line":"        return self.deserialize(fmt, res)"},{"line_number":541,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_6716f2aa","line":538,"range":{"start_line":538,"start_character":10,"end_line":538,"end_character":22},"updated":"2019-07-02 14:33:44.000000000","message":"oops, that\u0027s no good :)","commit_id":"bab7df8b5a725422836d7de362cfbd2aeeb3072e"}],"neutron/tests/unit/extensions/test_address_scope.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db9053631975190c284714283f1c8b88d18ba05a","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                with self.network("},{"line_number":541,"context_line":"                    tenant_id\u003daddr_scope[\u0027tenant_id\u0027]) as network:"},{"line_number":542,"context_line":"                    subnet_a \u003d self._make_subnet("},{"line_number":543,"context_line":"                        self.fmt,"},{"line_number":544,"context_line":"                        network,"},{"line_number":545,"context_line":"                        constants.ATTR_NOT_SPECIFIED,"},{"line_number":546,"context_line":"                        None,"},{"line_number":547,"context_line":"                        subnetpool_a[\u0027id\u0027],"},{"line_number":548,"context_line":"                        None,"},{"line_number":549,"context_line":"                        constants.IP_VERSION_4,"},{"line_number":550,"context_line":"                        True,"},{"line_number":551,"context_line":"                        None,"},{"line_number":552,"context_line":"                        None,"},{"line_number":553,"context_line":"                        tenant_id\u003daddr_scope[\u0027tenant_id\u0027])"},{"line_number":554,"context_line":"                    subnet_b \u003d self._make_subnet("},{"line_number":555,"context_line":"                        self.fmt,"},{"line_number":556,"context_line":"                        network,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_08f9034c","line":553,"range":{"start_line":543,"start_character":24,"end_line":553,"end_character":57},"updated":"2019-07-09 07:49:01.000000000","message":"nit: maybe it would be more readable if You would use named arguments here? There is a lot of \"None\" here now and it is really hard to find out which None means what :)","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                with self.network("},{"line_number":541,"context_line":"                    tenant_id\u003daddr_scope[\u0027tenant_id\u0027]) as network:"},{"line_number":542,"context_line":"                    subnet_a \u003d self._make_subnet("},{"line_number":543,"context_line":"                        self.fmt,"},{"line_number":544,"context_line":"                        network,"},{"line_number":545,"context_line":"                        constants.ATTR_NOT_SPECIFIED,"},{"line_number":546,"context_line":"                        None,"},{"line_number":547,"context_line":"                        subnetpool_a[\u0027id\u0027],"},{"line_number":548,"context_line":"                        None,"},{"line_number":549,"context_line":"                        constants.IP_VERSION_4,"},{"line_number":550,"context_line":"                        True,"},{"line_number":551,"context_line":"                        None,"},{"line_number":552,"context_line":"                        None,"},{"line_number":553,"context_line":"                        tenant_id\u003daddr_scope[\u0027tenant_id\u0027])"},{"line_number":554,"context_line":"                    subnet_b \u003d self._make_subnet("},{"line_number":555,"context_line":"                        self.fmt,"},{"line_number":556,"context_line":"                        network,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_eef34c9d","line":553,"range":{"start_line":543,"start_character":24,"end_line":553,"end_character":57},"in_reply_to":"7faddb67_08f9034c","updated":"2019-07-09 13:14:00.000000000","message":"Good point, it\u0027s kind of the nature of these test methods and it is a little out of control :)","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db9053631975190c284714283f1c8b88d18ba05a","unresolved":false,"context_lines":[{"line_number":588,"context_line":"    def test_block_update_subnetpool_network_affinity(self):"},{"line_number":589,"context_line":"        with self.address_scope("},{"line_number":590,"context_line":"            constants.IP_VERSION_4,"},{"line_number":591,"context_line":"            name\u003d\u0027foo-address-scope\u0027) as addr_scope_a,\\"},{"line_number":592,"context_line":"            self.address_scope(constants.IP_VERSION_4,"},{"line_number":593,"context_line":"                               name\u003d\u0027foo-address-scope\u0027) as addr_scope_b:"},{"line_number":594,"context_line":"            addr_scope_a \u003d addr_scope_a[\u0027address_scope\u0027]"},{"line_number":595,"context_line":"            addr_scope_b \u003d addr_scope_b[\u0027address_scope\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_088ee3cf","line":592,"range":{"start_line":591,"start_character":12,"end_line":592,"end_character":54},"updated":"2019-07-09 07:49:01.000000000","message":"this indentation is a bit odd IMO","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":588,"context_line":"    def test_block_update_subnetpool_network_affinity(self):"},{"line_number":589,"context_line":"        with self.address_scope("},{"line_number":590,"context_line":"            constants.IP_VERSION_4,"},{"line_number":591,"context_line":"            name\u003d\u0027foo-address-scope\u0027) as addr_scope_a,\\"},{"line_number":592,"context_line":"            self.address_scope(constants.IP_VERSION_4,"},{"line_number":593,"context_line":"                               name\u003d\u0027foo-address-scope\u0027) as addr_scope_b:"},{"line_number":594,"context_line":"            addr_scope_a \u003d addr_scope_a[\u0027address_scope\u0027]"},{"line_number":595,"context_line":"            addr_scope_b \u003d addr_scope_b[\u0027address_scope\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_eeda6c15","line":592,"range":{"start_line":591,"start_character":12,"end_line":592,"end_character":54},"in_reply_to":"7faddb67_088ee3cf","updated":"2019-07-09 13:14:00.000000000","message":"Have to account for line-wrapping, it all looks odd no matter what you do ;) Seriously though, I will re-work this.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"}],"releasenotes/notes/relax-subnetpool-network-affinity-837c1fc28f835de5.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2728b8d54a886d2e6760b7e6bd4990e034dc780a","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    the same network have been relaxed. As long as subnet pools participate"},{"line_number":7,"context_line":"    in the same address scope, subnets can now be created from different"},{"line_number":8,"context_line":"    subnet pools when multiple subnets are created on a network. When"},{"line_number":9,"context_line":"    address scopes are not used, subnets with the same ip_version on the"},{"line_number":10,"context_line":"    same network must still be allocated from the same subnet pool."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7faddb67_c250aa0d","line":9,"range":{"start_line":9,"start_character":55,"end_line":9,"end_character":65},"updated":"2019-07-09 02:24:12.000000000","message":"This should probably be ``ip_version`` to make it bold or \"IP version\" to match the other sentences.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    the same network have been relaxed. As long as subnet pools participate"},{"line_number":7,"context_line":"    in the same address scope, subnets can now be created from different"},{"line_number":8,"context_line":"    subnet pools when multiple subnets are created on a network. When"},{"line_number":9,"context_line":"    address scopes are not used, subnets with the same ip_version on the"},{"line_number":10,"context_line":"    same network must still be allocated from the same subnet pool."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7faddb67_6e351c46","line":9,"range":{"start_line":9,"start_character":55,"end_line":9,"end_character":65},"in_reply_to":"7faddb67_c250aa0d","updated":"2019-07-09 13:14:00.000000000","message":"``ip_version`` is what I was after. I\u0027ll make that change.","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2728b8d54a886d2e6760b7e6bd4990e034dc780a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    in the same address scope, subnets can now be created from different"},{"line_number":8,"context_line":"    subnet pools when multiple subnets are created on a network. When"},{"line_number":9,"context_line":"    address scopes are not used, subnets with the same ip_version on the"},{"line_number":10,"context_line":"    same network must still be allocated from the same subnet pool."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7faddb67_62577604","line":10,"updated":"2019-07-09 02:24:12.000000000","message":"If we could put a link to the bug in here it would be a +1","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"ee194618a49ea82fffff59213dbd28b325635982","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    in the same address scope, subnets can now be created from different"},{"line_number":8,"context_line":"    subnet pools when multiple subnets are created on a network. When"},{"line_number":9,"context_line":"    address scopes are not used, subnets with the same ip_version on the"},{"line_number":10,"context_line":"    same network must still be allocated from the same subnet pool."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7faddb67_0eefc8b0","line":10,"in_reply_to":"7faddb67_62577604","updated":"2019-07-09 13:14:00.000000000","message":"Will do","commit_id":"81cdf2a4a121ed3407101458b56481747b6bd2b6"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0b2c4253dcb40147a9b672d47efee260b699bc48","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    subnet pools when multiple subnets are created on a network. When"},{"line_number":9,"context_line":"    address scopes are not used, subnets with the same ``ip_version`` on the"},{"line_number":10,"context_line":"    same network must still be allocated from the same subnet pool."},{"line_number":11,"context_line":"    https://bugs.launchpad.net/neutron/+bug/1830240"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7faddb67_3feaedab","line":11,"updated":"2019-07-10 16:13:28.000000000","message":"nit, this odd-looking syntax renders well in the note:\n\nFor more information, see bug `1830240 \u003curl\u003e`_.","commit_id":"cc98d1f8c4b31528803a732670b5e6a2bc16cae3"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"342e987c50b37b362286b8fd4d1a54a2c783ecc6","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    subnet pools when multiple subnets are created on a network. When"},{"line_number":9,"context_line":"    address scopes are not used, subnets with the same ``ip_version`` on the"},{"line_number":10,"context_line":"    same network must still be allocated from the same subnet pool."},{"line_number":11,"context_line":"    https://bugs.launchpad.net/neutron/+bug/1830240"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7faddb67_5d6bcd1c","line":11,"in_reply_to":"7faddb67_3feaedab","updated":"2019-07-16 13:05:50.000000000","message":"Done","commit_id":"cc98d1f8c4b31528803a732670b5e6a2bc16cae3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"54a37203f77cbc45cd49569117155b7ad4575e7d","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    subnet pools when multiple subnets are created on a network. When"},{"line_number":9,"context_line":"    address scopes are not used, subnets with the same ``ip_version`` on the"},{"line_number":10,"context_line":"    same network must still be allocated from the same subnet pool."},{"line_number":11,"context_line":"    For more information, see bug `1830240 \u003curl\u003e`_."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7faddb67_ef043c1a","line":11,"updated":"2019-07-16 14:11:44.000000000","message":"Oh, you un-did the change I did, think you\u0027ll need to put the real url back. sorry, my \u003curl\u003e comment was just an example.","commit_id":"ac8de36e93a67a64cd0e94c44b568de73736878d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8b6157b5ebc0e747183e0a38aa4b40c6f11af47e","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    subnet pools when multiple subnets are created on a network. When"},{"line_number":9,"context_line":"    address scopes are not used, subnets with the same ``ip_version`` on the"},{"line_number":10,"context_line":"    same network must still be allocated from the same subnet pool."},{"line_number":11,"context_line":"    For more information, see bug `1830240 \u003curl\u003e`_."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7faddb67_f247434b","line":11,"in_reply_to":"7faddb67_ef043c1a","updated":"2019-07-16 14:14:12.000000000","message":"I was just curious how it will work so I wanted to wait for the result :D","commit_id":"ac8de36e93a67a64cd0e94c44b568de73736878d"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"65b90d34c02ee03fa11b0623fefaf9cdb7e95bf1","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    subnet pools when multiple subnets are created on a network. When"},{"line_number":9,"context_line":"    address scopes are not used, subnets with the same ``ip_version`` on the"},{"line_number":10,"context_line":"    same network must still be allocated from the same subnet pool."},{"line_number":11,"context_line":"    For more information, see bug `1830240 \u003curl\u003e`_."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7faddb67_855c87ed","line":11,"in_reply_to":"7faddb67_f247434b","updated":"2019-07-16 15:06:15.000000000","message":"Doh, I misunderstood. I rendered it locally and cosmetically it looked good. But then you click on the link and well..... :)","commit_id":"ac8de36e93a67a64cd0e94c44b568de73736878d"}]}
