)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0c0092a31f6895a9bb74a9049aab93e288b5cb86","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow first address in an IPv6 subnet as valid unicast"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When looking at the RFC [1], there\u0027s no mention that this can\u0027t be the"},{"line_number":10,"context_line":"gateway address.  Permit it."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://tools.ietf.org/html/rfc4291#section-2.6.1"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_ef7beb88","line":10,"updated":"2019-03-26 09:43:49.000000000","message":"One could also consider allowing /31 networks for IPv4, but that\u0027s probably an issue for another patch.","commit_id":"3fd6582c109ae1956a61ced414f567229013c430"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"8f1480848063ff59aa62dc96733ef51ca746cb0d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow first address in an IPv6 subnet as valid unicast"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When looking at the RFC [1], there\u0027s no mention that this can\u0027t be the"},{"line_number":10,"context_line":"gateway address.  Permit it."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://tools.ietf.org/html/rfc4291#section-2.6.1"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_27c6ef9b","line":10,"in_reply_to":"5fc1f717_9184c5d4","updated":"2019-03-26 19:00:25.000000000","message":"I have batted around the utility of supporting point-to-point links for BGP uplink use cases. I haven\u0027t really found a compelling use case yet.","commit_id":"3fd6582c109ae1956a61ced414f567229013c430"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"71d1a925cf83bccc7c52000f7e070664baf3d551","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Allow first address in an IPv6 subnet as valid unicast"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When looking at the RFC [1], there\u0027s no mention that this can\u0027t be the"},{"line_number":10,"context_line":"gateway address.  Permit it."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://tools.ietf.org/html/rfc4291#section-2.6.1"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5fc1f717_9184c5d4","line":10,"in_reply_to":"5fc1f717_ef7beb88","updated":"2019-03-26 18:27:50.000000000","message":"I think that in IPv4 wouldn\u0027t a /31 only be valid for a point-to-point link?  I\u0027m not sure in what situations that would be deployable by an openstack user.","commit_id":"3fd6582c109ae1956a61ced414f567229013c430"}],"neutron/db/ipam_backend_mixin.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"2c01ccb3fde81f6e59951d9a37c3fae70e250a37","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    @staticmethod"},{"line_number":55,"context_line":"    def _gateway_ip_str(subnet, cidr_net):"},{"line_number":56,"context_line":"        if subnet.get(\u0027gateway_ip\u0027) is const.ATTR_NOT_SPECIFIED:"},{"line_number":57,"context_line":"            if subnet.get(\u0027version\u0027) \u003d\u003d const.IP_VERSION_6:"},{"line_number":58,"context_line":"                return str(netaddr.IPNetwork(cidr_net).network)"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                return str(netaddr.IPNetwork(cidr_net).network + 1)"},{"line_number":61,"context_line":"        return subnet.get(\u0027gateway_ip\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_0a6f32c5","line":58,"range":{"start_line":57,"start_character":12,"end_line":58,"end_character":63},"updated":"2019-05-15 13:54:02.000000000","message":"This will change the current behavior of IPAM. Operators do notice these things believe it or not, a release note is probably in order.","commit_id":"5cad4e417236271e081edc1a4da42caf85e8052d"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"a2d4f744cbb904ba191ba9adbbc9ed11daafa68e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    @staticmethod"},{"line_number":55,"context_line":"    def _gateway_ip_str(subnet, cidr_net):"},{"line_number":56,"context_line":"        if subnet.get(\u0027gateway_ip\u0027) is const.ATTR_NOT_SPECIFIED:"},{"line_number":57,"context_line":"            if subnet.get(\u0027version\u0027) \u003d\u003d const.IP_VERSION_6:"},{"line_number":58,"context_line":"                return str(netaddr.IPNetwork(cidr_net).network)"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                return str(netaddr.IPNetwork(cidr_net).network + 1)"},{"line_number":61,"context_line":"        return subnet.get(\u0027gateway_ip\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_43914e52","line":58,"range":{"start_line":57,"start_character":12,"end_line":58,"end_character":63},"in_reply_to":"dfbec78f_0a6f32c5","updated":"2019-05-17 21:27:12.000000000","message":"Makes sense, I will add one.","commit_id":"5cad4e417236271e081edc1a4da42caf85e8052d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"01789c5e98c68e6c46b0cc38a00accc4531d4263","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            if subnet.get(\u0027version\u0027) \u003d\u003d const.IP_VERSION_6:"},{"line_number":58,"context_line":"                return str(netaddr.IPNetwork(cidr_net).network)"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                return str(netaddr.IPNetwork(cidr_net).network + 1)"},{"line_number":61,"context_line":"        return subnet.get(\u0027gateway_ip\u0027)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":10,"id":"bfb3d3c7_06e56ba8","line":60,"range":{"start_line":60,"start_character":65,"end_line":60,"end_character":66},"updated":"2019-05-22 01:29:16.000000000","message":"Don\u0027t change it, but this 1 could have been\n\n  int(subnet.get(\u0027version\u0027) !\u003d const.IP_VERSION_6\n\nThink I\u0027ve seen that somewhere else...","commit_id":"1916bc5c0627ca24e312ca55ea62c8df7eb8f158"}],"neutron/ipam/utils.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"2c01ccb3fde81f6e59951d9a37c3fae70e250a37","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        #NOTE(njohnston): In some cases the code cannot know the owner of the"},{"line_number":30,"context_line":"        # port.  In these cases port_owner should be None, and we pass it"},{"line_number":31,"context_line":"        # through here."},{"line_number":32,"context_line":"        return ((port_owner in n_const.ROUTER_PORT_OWNERS or"},{"line_number":33,"context_line":"                 port_owner is None or"},{"line_number":34,"context_line":"                 ip !\u003d net.network) and"},{"line_number":35,"context_line":"                net.netmask \u0026 ip \u003d\u003d net.network)"},{"line_number":36,"context_line":"    else:"},{"line_number":37,"context_line":"        return (ip !\u003d net.network and"}],"source_content_type":"text/x-python","patch_set":7,"id":"dfbec78f_aab94615","line":34,"range":{"start_line":32,"start_character":16,"end_line":34,"end_character":35},"updated":"2019-05-15 13:54:02.000000000","message":"Is the goal to just exclude compute ports? If so, I think this could be simplified and made more explicit. I think even a comment explaining this in more depth would help.","commit_id":"5cad4e417236271e081edc1a4da42caf85e8052d"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"1a8d11502f03e7807fe1ac391e43d8e3c29b128a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        #NOTE(njohnston): In some cases the code cannot know the owner of the"},{"line_number":30,"context_line":"        # port.  In these cases port_owner should be None, and we pass it"},{"line_number":31,"context_line":"        # through here."},{"line_number":32,"context_line":"        return ((port_owner in n_const.ROUTER_PORT_OWNERS or"},{"line_number":33,"context_line":"                 port_owner is None or"},{"line_number":34,"context_line":"                 ip !\u003d net.network) and"},{"line_number":35,"context_line":"                net.netmask \u0026 ip \u003d\u003d net.network)"},{"line_number":36,"context_line":"    else:"},{"line_number":37,"context_line":"        return (ip !\u003d net.network and"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_212bdd94","line":34,"range":{"start_line":32,"start_character":16,"end_line":34,"end_character":35},"in_reply_to":"bfb3d3c7_03d7d6ef","updated":"2019-05-20 14:45:28.000000000","message":"Now that I\u0027ve stepped away from this and had a chance to stew on it this makes sense the way you\u0027ve written it. I would just add a comment as breadcrumb. Other than that this looks good to me.","commit_id":"5cad4e417236271e081edc1a4da42caf85e8052d"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"a2d4f744cbb904ba191ba9adbbc9ed11daafa68e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        #NOTE(njohnston): In some cases the code cannot know the owner of the"},{"line_number":30,"context_line":"        # port.  In these cases port_owner should be None, and we pass it"},{"line_number":31,"context_line":"        # through here."},{"line_number":32,"context_line":"        return ((port_owner in n_const.ROUTER_PORT_OWNERS or"},{"line_number":33,"context_line":"                 port_owner is None or"},{"line_number":34,"context_line":"                 ip !\u003d net.network) and"},{"line_number":35,"context_line":"                net.netmask \u0026 ip \u003d\u003d net.network)"},{"line_number":36,"context_line":"    else:"},{"line_number":37,"context_line":"        return (ip !\u003d net.network and"}],"source_content_type":"text/x-python","patch_set":7,"id":"bfb3d3c7_03d7d6ef","line":34,"range":{"start_line":32,"start_character":16,"end_line":34,"end_character":35},"in_reply_to":"dfbec78f_aab94615","updated":"2019-05-17 21:27:12.000000000","message":"I am not sure what the total potential universe of port owners is for all ML2 drivers, which is why I had tended to stick to the list of known good values.  If you feel truly confident that \"port_owner !\u003d COMPUTE\" is all that is ever needed then I am fine to proceed.  \n\nI can beef up the comment to indicate why we\u0027re doing this.","commit_id":"5cad4e417236271e081edc1a4da42caf85e8052d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"01789c5e98c68e6c46b0cc38a00accc4531d4263","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    # check since we don\u0027t have gateway\u0027s subnet cidr."},{"line_number":49,"context_line":"    return (ip in net and"},{"line_number":50,"context_line":"            (net.version \u003d\u003d constants.IP_VERSION_4 and"},{"line_number":51,"context_line":"            ip in (net.network, net[-1])))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def generate_pools(cidr, gateway_ip):"}],"source_content_type":"text/x-python","patch_set":10,"id":"bfb3d3c7_a6ed7f8c","line":51,"updated":"2019-05-22 01:29:16.000000000","message":"nit: extra set of parens here since these are all \u0027and\u0027 now, noticed because the indentaion changed.  pep8 didn\u0027t seem to care","commit_id":"1916bc5c0627ca24e312ca55ea62c8df7eb8f158"}],"neutron/tests/unit/db/test_db_base_plugin_v2.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0c0092a31f6895a9bb74a9049aab93e288b5cb86","unresolved":false,"context_lines":[{"line_number":4319,"context_line":"        self.assertEqual(cidr,"},{"line_number":4320,"context_line":"                         subnet[\u0027subnet\u0027][\u0027cidr\u0027])"},{"line_number":4321,"context_line":""},{"line_number":4322,"context_line":"    def test_create_subnet_ipv6_gw_is_nw_addr_returns_200(self):"},{"line_number":4323,"context_line":"        returned_gateway_ip \u003d \u00272001::\u0027"},{"line_number":4324,"context_line":"        gateway_ip \u003d returned_gateway_ip + \u00270\u0027"},{"line_number":4325,"context_line":"        cidr \u003d \u00272001::/64\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_4f131f5d","line":4322,"updated":"2019-03-26 09:43:49.000000000","message":"I think the name is misleading if you don\u0027t explicitly check the return code. The test below claims to check for 201, since both tests behave the same now, only one of them is probably correct?","commit_id":"3fd6582c109ae1956a61ced414f567229013c430"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"71d1a925cf83bccc7c52000f7e070664baf3d551","unresolved":false,"context_lines":[{"line_number":4319,"context_line":"        self.assertEqual(cidr,"},{"line_number":4320,"context_line":"                         subnet[\u0027subnet\u0027][\u0027cidr\u0027])"},{"line_number":4321,"context_line":""},{"line_number":4322,"context_line":"    def test_create_subnet_ipv6_gw_is_nw_addr_returns_200(self):"},{"line_number":4323,"context_line":"        returned_gateway_ip \u003d \u00272001::\u0027"},{"line_number":4324,"context_line":"        gateway_ip \u003d returned_gateway_ip + \u00270\u0027"},{"line_number":4325,"context_line":"        cidr \u003d \u00272001::/64\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_b19541e6","line":4322,"in_reply_to":"5fc1f717_4f131f5d","updated":"2019-03-26 18:27:50.000000000","message":"Well neither test actually tests for the precise return code that it advertises, so it\u0027s probably better to omit mention of it entirely.  \n\nThe tests do not behave the same however in that they are testing for the first and last addresses in the cidr block, respectively.  So I think they are both correct test scenarios, just misadvertised by their titles.","commit_id":"3fd6582c109ae1956a61ced414f567229013c430"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0c0092a31f6895a9bb74a9049aab93e288b5cb86","unresolved":false,"context_lines":[{"line_number":4321,"context_line":""},{"line_number":4322,"context_line":"    def test_create_subnet_ipv6_gw_is_nw_addr_returns_200(self):"},{"line_number":4323,"context_line":"        returned_gateway_ip \u003d \u00272001::\u0027"},{"line_number":4324,"context_line":"        gateway_ip \u003d returned_gateway_ip + \u00270\u0027"},{"line_number":4325,"context_line":"        cidr \u003d \u00272001::/64\u0027"},{"line_number":4326,"context_line":""},{"line_number":4327,"context_line":"        subnet \u003d self._test_create_subnet("}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_4f41df38","line":4324,"updated":"2019-03-26 09:43:49.000000000","message":"Why don\u0027t you test with \"2001::\" directly? Here you are implicitly adding a test whether canonizing the \"2001::0\" form works. If you omit that, you could also deduplicate the test below and merge most of the code into a single helper function.","commit_id":"3fd6582c109ae1956a61ced414f567229013c430"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"71d1a925cf83bccc7c52000f7e070664baf3d551","unresolved":false,"context_lines":[{"line_number":4321,"context_line":""},{"line_number":4322,"context_line":"    def test_create_subnet_ipv6_gw_is_nw_addr_returns_200(self):"},{"line_number":4323,"context_line":"        returned_gateway_ip \u003d \u00272001::\u0027"},{"line_number":4324,"context_line":"        gateway_ip \u003d returned_gateway_ip + \u00270\u0027"},{"line_number":4325,"context_line":"        cidr \u003d \u00272001::/64\u0027"},{"line_number":4326,"context_line":""},{"line_number":4327,"context_line":"        subnet \u003d self._test_create_subnet("}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_ccf5d058","line":4324,"in_reply_to":"5fc1f717_4f41df38","updated":"2019-03-26 18:27:50.000000000","message":"I love the helper function idea, and why don\u0027t I use it for three scenarios: gateway as start address, gateway as end address, and gateway as canonicalized networkj address?","commit_id":"3fd6582c109ae1956a61ced414f567229013c430"}]}
