)]}'
{"neutron/db/ipam_backend_mixin.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"efeb87d69034817f7fae3414029ca2e0a2fe45e7","unresolved":false,"context_lines":[{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        self.save_allocation_pools(context, subnet,"},{"line_number":608,"context_line":"                                   subnet_request.allocation_pools)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        return subnet_obj.Subnet.get_object(context, id\u003dsubnet.id)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def _classify_subnets(self, context, subnets):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_02febbae","line":609,"updated":"2019-12-19 12:15:06.000000000","message":"unrelated","commit_id":"490360f5ab4c0df7a7364bc475361e80cac63003"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"efeb87d69034817f7fae3414029ca2e0a2fe45e7","unresolved":false,"context_lines":[{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        self.save_allocation_pools(context, subnet,"},{"line_number":608,"context_line":"                                   subnet_request.allocation_pools)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        return subnet_obj.Subnet.get_object(context, id\u003dsubnet.id)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def _classify_subnets(self, context, subnets):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_c229833a","side":"PARENT","line":609,"updated":"2019-12-19 12:15:06.000000000","message":"unrelated change.","commit_id":"33919fbd50ff7676082b4bfc8e65f270047f4248"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"efeb87d69034817f7fae3414029ca2e0a2fe45e7","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                gateway_ip \u003d netaddr.IPNetwork(cidr_net).network + 1"},{"line_number":63,"context_line":"            pd_net \u003d netaddr.IPNetwork(const.PROVISIONAL_IPV6_PD_PREFIX)"},{"line_number":64,"context_line":"            if gateway_ip \u003d\u003d pd_net.network:"},{"line_number":65,"context_line":"                return None"},{"line_number":66,"context_line":"            return str(gateway_ip)"},{"line_number":67,"context_line":"        return subnet.get(\u0027gateway_ip\u0027)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_a2db274c","line":65,"range":{"start_line":65,"start_character":23,"end_line":65,"end_character":27},"updated":"2019-12-19 12:15:06.000000000","message":"`return` is enough, None should be default value of python function.","commit_id":"2b1147c1b04fdd288720d39a8e160677231f0bbc"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"efeb87d69034817f7fae3414029ca2e0a2fe45e7","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                gateway_ip \u003d netaddr.IPNetwork(cidr_net).network"},{"line_number":61,"context_line":"            else:"},{"line_number":62,"context_line":"                gateway_ip \u003d netaddr.IPNetwork(cidr_net).network + 1"},{"line_number":63,"context_line":"            pd_net \u003d netaddr.IPNetwork(const.PROVISIONAL_IPV6_PD_PREFIX)"},{"line_number":64,"context_line":"            if gateway_ip \u003d\u003d pd_net.network:"},{"line_number":65,"context_line":"                return None"},{"line_number":66,"context_line":"            return str(gateway_ip)"},{"line_number":67,"context_line":"        return subnet.get(\u0027gateway_ip\u0027)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_2212d7fe","line":65,"range":{"start_line":63,"start_character":12,"end_line":65,"end_character":27},"updated":"2019-12-19 12:15:06.000000000","message":"should these lines go to the block under \"if IPv6\", line 60?","commit_id":"2b1147c1b04fdd288720d39a8e160677231f0bbc"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"478a9ca4195b3d0c5553b69355df2caaae95efbd","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                gateway_ip \u003d netaddr.IPNetwork(cidr_net).network"},{"line_number":61,"context_line":"            else:"},{"line_number":62,"context_line":"                gateway_ip \u003d netaddr.IPNetwork(cidr_net).network + 1"},{"line_number":63,"context_line":"            pd_net \u003d netaddr.IPNetwork(const.PROVISIONAL_IPV6_PD_PREFIX)"},{"line_number":64,"context_line":"            if gateway_ip \u003d\u003d pd_net.network:"},{"line_number":65,"context_line":"                return None"},{"line_number":66,"context_line":"            return str(gateway_ip)"},{"line_number":67,"context_line":"        return subnet.get(\u0027gateway_ip\u0027)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_5e000bb2","line":65,"range":{"start_line":63,"start_character":12,"end_line":65,"end_character":27},"in_reply_to":"3fa7e38b_2212d7fe","updated":"2019-12-19 15:19:39.000000000","message":"Hmmm you are right. This must be tested only if IPv6 (although this logic won\u0027t break IPv4 case).","commit_id":"2b1147c1b04fdd288720d39a8e160677231f0bbc"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"478a9ca4195b3d0c5553b69355df2caaae95efbd","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                gateway_ip \u003d netaddr.IPNetwork(cidr_net).network + 1"},{"line_number":63,"context_line":"            pd_net \u003d netaddr.IPNetwork(const.PROVISIONAL_IPV6_PD_PREFIX)"},{"line_number":64,"context_line":"            if gateway_ip \u003d\u003d pd_net.network:"},{"line_number":65,"context_line":"                return None"},{"line_number":66,"context_line":"            return str(gateway_ip)"},{"line_number":67,"context_line":"        return subnet.get(\u0027gateway_ip\u0027)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_de6e3b96","line":65,"range":{"start_line":65,"start_character":23,"end_line":65,"end_character":27},"in_reply_to":"3fa7e38b_a2db274c","updated":"2019-12-19 15:19:39.000000000","message":"Done","commit_id":"2b1147c1b04fdd288720d39a8e160677231f0bbc"}],"neutron/ipam/utils.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"efeb87d69034817f7fae3414029ca2e0a2fe45e7","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        # through here."},{"line_number":30,"context_line":"        return ((port_owner in constants.ROUTER_PORT_OWNERS or"},{"line_number":31,"context_line":"                 port_owner is None or"},{"line_number":32,"context_line":"                 ip !\u003d net.network) and"},{"line_number":33,"context_line":"                net.netmask \u0026 ip \u003d\u003d net.network)"},{"line_number":34,"context_line":"    else:"},{"line_number":35,"context_line":"        return (ip !\u003d net.network and"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_c29c2372","side":"PARENT","line":32,"range":{"start_line":32,"start_character":17,"end_line":32,"end_character":34},"updated":"2019-12-19 12:15:06.000000000","message":"Why remove this?\nShould \"ip not in net.network\" work? Something like this:\n\u003e\u003e\u003e import netaddr\n\u003e\u003e\u003e ip \u003d netaddr.IPAddress(\"2001:db8:4444::1\")\n\u003e\u003e\u003e net \u003d netaddr.IPNetwork(\"2001:db8:5555::/64\")\n\u003e\u003e\u003e ip in net\nFalse\n\u003e\u003e\u003e ip \u003d netaddr.IPAddress(\"2001:db8:5555::ffff\")\n\u003e\u003e\u003e ip in net\nTrue","commit_id":"33919fbd50ff7676082b4bfc8e65f270047f4248"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"478a9ca4195b3d0c5553b69355df2caaae95efbd","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        # through here."},{"line_number":30,"context_line":"        return ((port_owner in constants.ROUTER_PORT_OWNERS or"},{"line_number":31,"context_line":"                 port_owner is None or"},{"line_number":32,"context_line":"                 ip !\u003d net.network) and"},{"line_number":33,"context_line":"                net.netmask \u0026 ip \u003d\u003d net.network)"},{"line_number":34,"context_line":"    else:"},{"line_number":35,"context_line":"        return (ip !\u003d net.network and"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_7e9f0764","side":"PARENT","line":32,"range":{"start_line":32,"start_character":17,"end_line":32,"end_character":34},"in_reply_to":"3fa7e38b_c29c2372","updated":"2019-12-19 15:19:39.000000000","message":"Since [1], the IPv6 network IP is a valid unicast value.\n\nOf course, I can also add your check (good one) in the last condition:\n  ip in net \n\n[1] https://review.opendev.org/#/c/647484/","commit_id":"33919fbd50ff7676082b4bfc8e65f270047f4248"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"88629822770bf00363e63a9515bd222f1b5550fe","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # port.  In these cases port_owner should be None, and we pass it"},{"line_number":29,"context_line":"        # through here."},{"line_number":30,"context_line":"        return ((port_owner in constants.ROUTER_PORT_OWNERS or"},{"line_number":31,"context_line":"                 port_owner is None or port_owner is \u0027\u0027) and"},{"line_number":32,"context_line":"                net.netmask \u0026 ip \u003d\u003d net.network)"},{"line_number":33,"context_line":"    else:"},{"line_number":34,"context_line":"        return (ip !\u003d net.network and"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_98445a75","line":31,"range":{"start_line":31,"start_character":39,"end_line":31,"end_character":55},"updated":"2019-12-19 14:14:17.000000000","message":"Is there a difference between port_owner being None or being the empty string? If not then let\u0027s have only one value for the case when we don\u0027t know the owner like the comment says above.","commit_id":"2b1147c1b04fdd288720d39a8e160677231f0bbc"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"478a9ca4195b3d0c5553b69355df2caaae95efbd","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        # port.  In these cases port_owner should be None, and we pass it"},{"line_number":29,"context_line":"        # through here."},{"line_number":30,"context_line":"        return ((port_owner in constants.ROUTER_PORT_OWNERS or"},{"line_number":31,"context_line":"                 port_owner is None or port_owner is \u0027\u0027) and"},{"line_number":32,"context_line":"                net.netmask \u0026 ip \u003d\u003d net.network)"},{"line_number":33,"context_line":"    else:"},{"line_number":34,"context_line":"        return (ip !\u003d net.network and"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_7ebaa7e0","line":31,"range":{"start_line":31,"start_character":39,"end_line":31,"end_character":55},"in_reply_to":"3fa7e38b_98445a75","updated":"2019-12-19 15:19:39.000000000","message":"\"port_owner\" kwarg default value is \"None\". If not assigned, this will be the value to match.\n\nBut when the port dictionary is populated, the \"None\" value for this field is transformed as an empty string. Maybe I can change the default value of the kwarg.","commit_id":"2b1147c1b04fdd288720d39a8e160677231f0bbc"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5af4f831305a8fc448fe60f3869d9aea26888218","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        # NOTE(njohnston): In some cases the code cannot know the owner of the"},{"line_number":28,"context_line":"        # port. In these cases port_owner should an empty string, and we pass"},{"line_number":29,"context_line":"        # it through here."},{"line_number":30,"context_line":"        return (port_owner in (constants.ROUTER_PORT_OWNERS + (\u0027\u0027, )) and"},{"line_number":31,"context_line":"                ip in net)"},{"line_number":32,"context_line":"    else:"},{"line_number":33,"context_line":"        return (ip !\u003d net.network and"},{"line_number":34,"context_line":"                ip !\u003d net[-1] and"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_45b824e7","line":31,"range":{"start_line":30,"start_character":15,"end_line":31,"end_character":26},"updated":"2019-12-20 22:39:51.000000000","message":"This looks wrong. If port owner is known to be no router, you still need to return true iff ip !\u003d net.network. I\u0027m wondering why this doesn\u0027t trigger more test failures.","commit_id":"505be9e18f0b5f46662fb030754e6c15192186d8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"38ee697ae5ed45932b7543468521a58f5864dc0d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        # NOTE(njohnston): In some cases the code cannot know the owner of the"},{"line_number":28,"context_line":"        # port. In these cases port_owner should an empty string, and we pass"},{"line_number":29,"context_line":"        # it through here."},{"line_number":30,"context_line":"        return (port_owner in (constants.ROUTER_PORT_OWNERS + (\u0027\u0027, )) and"},{"line_number":31,"context_line":"                ip in net)"},{"line_number":32,"context_line":"    else:"},{"line_number":33,"context_line":"        return (ip !\u003d net.network and"},{"line_number":34,"context_line":"                ip !\u003d net[-1] and"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_022a182e","line":31,"range":{"start_line":30,"start_character":15,"end_line":31,"end_character":26},"in_reply_to":"3fa7e38b_45b824e7","updated":"2019-12-23 10:12:18.000000000","message":"This was the goal of [1], to allow first address in an IPv6 subnet as valid unicast. But because there was a small issue in [2], this was never tested.\n\nIf there are test failures, the logic of the test should be changed to contemplate this possibility.\n\n[1] https://review.opendev.org/#/c/647484/\n[2] https://review.opendev.org/#/c/647484/10/neutron/db/ipam_backend_mixin.py@55","commit_id":"505be9e18f0b5f46662fb030754e6c15192186d8"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5af4f831305a8fc448fe60f3869d9aea26888218","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    else:"},{"line_number":33,"context_line":"        return (ip !\u003d net.network and"},{"line_number":34,"context_line":"                ip !\u003d net[-1] and"},{"line_number":35,"context_line":"                net.netmask \u0026 ip \u003d\u003d net.network)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def check_gateway_invalid_in_subnet(cidr, gateway):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_345523c3","line":35,"range":{"start_line":35,"start_character":16,"end_line":35,"end_character":47},"updated":"2019-12-20 22:39:51.000000000","message":"Make this \"ip in net\" for consistency, too?","commit_id":"505be9e18f0b5f46662fb030754e6c15192186d8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"38ee697ae5ed45932b7543468521a58f5864dc0d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    else:"},{"line_number":33,"context_line":"        return (ip !\u003d net.network and"},{"line_number":34,"context_line":"                ip !\u003d net[-1] and"},{"line_number":35,"context_line":"                net.netmask \u0026 ip \u003d\u003d net.network)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def check_gateway_invalid_in_subnet(cidr, gateway):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_62642cb4","line":35,"range":{"start_line":35,"start_character":16,"end_line":35,"end_character":47},"in_reply_to":"3fa7e38b_345523c3","updated":"2019-12-23 10:12:18.000000000","message":"I didn\u0027t modify this section to reduce the number of changes. But makes sense to keep the consistency.","commit_id":"505be9e18f0b5f46662fb030754e6c15192186d8"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"f8097e4fe9a2d609513169012abe68b2a190bdbf","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    # network or the broadcast address"},{"line_number":26,"context_line":"    if net.version \u003d\u003d constants.IP_VERSION_6:"},{"line_number":27,"context_line":"        # NOTE(njohnston): In some cases the code cannot know the owner of the"},{"line_number":28,"context_line":"        # port. In these cases port_owner should an empty string, and we pass"},{"line_number":29,"context_line":"        # it through here."},{"line_number":30,"context_line":"        return (port_owner in (constants.ROUTER_PORT_OWNERS + (\u0027\u0027, )) and"},{"line_number":31,"context_line":"                ip in net)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_b6de970d","line":28,"range":{"start_line":28,"start_character":42,"end_line":28,"end_character":48},"updated":"2020-01-07 14:11:58.000000000","message":"nit: should be","commit_id":"0b3cff33c1904b82146701b521749cff01f44e9a"}],"neutron/tests/fullstack/test_subnet.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d69af60309d6d1a25d1705381fc75ce332bd1a0c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2019 Red Hat, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_01f32f0b","line":1,"updated":"2019-12-18 12:18:48.000000000","message":"Those tests will help us with the next patch https://review.opendev.org/#/c/699471/\n\nActually, this bug was opened because I found this error while solving LP:1856675","commit_id":"037db003d9cb1b1415cb824b948a1fc386f1d693"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4b32cdb2a764d4c72e5cd97091f3870e0e83e89c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.assertEqual(subnet[\u0027subnet\u0027][\u0027gateway_ip\u0027],"},{"line_number":63,"context_line":"                         str(netaddr.IPNetwork(cidr).network + 1))"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def test_create_subnet_ipv6_slaac(self):"},{"line_number":66,"context_line":"        cidr \u003d self.useFixture("},{"line_number":67,"context_line":"            ip_network.ExclusiveIPNetwork("},{"line_number":68,"context_line":"                \u00272001:db8::\u0027, \u00272001:db8::ffff\u0027, \u002764\u0027)).network"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_c1bd1704","line":65,"updated":"2019-12-18 12:21:08.000000000","message":"BTW, to reduce the time needed to setup the env, maybe I can join both test cases in a single one.","commit_id":"037db003d9cb1b1415cb824b948a1fc386f1d693"},{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"working for Ericsson, UTC+1 (+DST)"},"change_message_id":"88629822770bf00363e63a9515bd222f1b5550fe","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                                     subnetpool_id\u003d\u0027prefix_delegation\u0027)"},{"line_number":81,"context_line":"        subnet \u003d self._show_subnet(subnet[\u0027id\u0027])"},{"line_number":82,"context_line":"        self.assertIsNone(subnet[\u0027subnet\u0027][\u0027gateway_ip\u0027])"},{"line_number":83,"context_line":"        raise Exception(subnet[\u0027subnet\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_be125f54","line":83,"range":{"start_line":83,"start_character":8,"end_line":83,"end_character":41},"updated":"2019-12-19 14:14:17.000000000","message":"Debugging leftover?","commit_id":"2b1147c1b04fdd288720d39a8e160677231f0bbc"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"478a9ca4195b3d0c5553b69355df2caaae95efbd","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                                     subnetpool_id\u003d\u0027prefix_delegation\u0027)"},{"line_number":81,"context_line":"        subnet \u003d self._show_subnet(subnet[\u0027id\u0027])"},{"line_number":82,"context_line":"        self.assertIsNone(subnet[\u0027subnet\u0027][\u0027gateway_ip\u0027])"},{"line_number":83,"context_line":"        raise Exception(subnet[\u0027subnet\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"3fa7e38b_9efd23b4","line":83,"range":{"start_line":83,"start_character":8,"end_line":83,"end_character":41},"in_reply_to":"3fa7e38b_be125f54","updated":"2019-12-19 15:19:39.000000000","message":"hahaha yes sorry. This is my last day before xmas and I\u0027m not very focused.","commit_id":"2b1147c1b04fdd288720d39a8e160677231f0bbc"}],"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":"6746bb0a2ed642d64721bab7edd2eafbb4be8c3b","unresolved":false,"context_lines":[{"line_number":3934,"context_line":"                                 ipv6_ra_mode\u003dconstants.DHCPV6_STATEFUL,"},{"line_number":3935,"context_line":"                                 ipv6_address_mode\u003dconstants.DHCPV6_STATEFUL)"},{"line_number":3936,"context_line":"        # If gateway_ip is not specified, allocate first IP from the subnet"},{"line_number":3937,"context_line":"        expected \u003d {\u0027gateway_ip\u0027: str(netaddr.IPNetwork(cidr).ip),"},{"line_number":3938,"context_line":"                    \u0027cidr\u0027: cidr}"},{"line_number":3939,"context_line":"        self._test_create_subnet(expected\u003dexpected,"},{"line_number":3940,"context_line":"                                 cidr\u003dcidr, ip_version\u003dconstants.IP_VERSION_6,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_1584beb1","line":3937,"range":{"start_line":3937,"start_character":61,"end_line":3937,"end_character":64},"updated":"2019-12-18 20:13:08.000000000","message":"This should be \".network\" in order to match the code under test. The result is the same if the cidr specified is equal to the network, but it would fail with e.g. cidr \u003d \u00272001::1/64\u0027","commit_id":"3f79bc8f5fc02a9c173d56f5af3b78b1e4344c75"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8379f8a9e04e1d2300f8bd92c58ae8d7f779cce9","unresolved":false,"context_lines":[{"line_number":3934,"context_line":"                                 ipv6_ra_mode\u003dconstants.DHCPV6_STATEFUL,"},{"line_number":3935,"context_line":"                                 ipv6_address_mode\u003dconstants.DHCPV6_STATEFUL)"},{"line_number":3936,"context_line":"        # If gateway_ip is not specified, allocate first IP from the subnet"},{"line_number":3937,"context_line":"        expected \u003d {\u0027gateway_ip\u0027: str(netaddr.IPNetwork(cidr).ip),"},{"line_number":3938,"context_line":"                    \u0027cidr\u0027: cidr}"},{"line_number":3939,"context_line":"        self._test_create_subnet(expected\u003dexpected,"},{"line_number":3940,"context_line":"                                 cidr\u003dcidr, ip_version\u003dconstants.IP_VERSION_6,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_6c9a0814","line":3937,"range":{"start_line":3937,"start_character":61,"end_line":3937,"end_character":64},"in_reply_to":"3fa7e38b_1584beb1","updated":"2019-12-19 10:25:48.000000000","message":"Done, but the CIDR can\u0027t be 2001::1/64, because this is not a network domain but an IP address.","commit_id":"3f79bc8f5fc02a9c173d56f5af3b78b1e4344c75"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"6746bb0a2ed642d64721bab7edd2eafbb4be8c3b","unresolved":false,"context_lines":[{"line_number":3966,"context_line":"                                 cidr\u003dcidr, ip_version\u003dconstants.IP_VERSION_6,"},{"line_number":3967,"context_line":"                                 ipv6_ra_mode\u003dconstants.DHCPV6_STATELESS,"},{"line_number":3968,"context_line":"                                 ipv6_address_mode\u003dconstants.DHCPV6_STATELESS)"},{"line_number":3969,"context_line":"        # If gateway_ip is not specified, allocate first IP from the subnet"},{"line_number":3970,"context_line":"        expected \u003d {\u0027gateway_ip\u0027: None,"},{"line_number":3971,"context_line":"                    \u0027cidr\u0027: cidr}"},{"line_number":3972,"context_line":"        self._test_create_subnet(expected\u003dexpected,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_15ad9e31","line":3969,"range":{"start_line":3969,"start_character":42,"end_line":3969,"end_character":75},"updated":"2019-12-18 20:13:08.000000000","message":"I think that this should say \", return None as gateway_ip\" matching the changed functionality","commit_id":"3f79bc8f5fc02a9c173d56f5af3b78b1e4344c75"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8379f8a9e04e1d2300f8bd92c58ae8d7f779cce9","unresolved":false,"context_lines":[{"line_number":3966,"context_line":"                                 cidr\u003dcidr, ip_version\u003dconstants.IP_VERSION_6,"},{"line_number":3967,"context_line":"                                 ipv6_ra_mode\u003dconstants.DHCPV6_STATELESS,"},{"line_number":3968,"context_line":"                                 ipv6_address_mode\u003dconstants.DHCPV6_STATELESS)"},{"line_number":3969,"context_line":"        # If gateway_ip is not specified, allocate first IP from the subnet"},{"line_number":3970,"context_line":"        expected \u003d {\u0027gateway_ip\u0027: None,"},{"line_number":3971,"context_line":"                    \u0027cidr\u0027: cidr}"},{"line_number":3972,"context_line":"        self._test_create_subnet(expected\u003dexpected,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_ccbc5c6d","line":3969,"range":{"start_line":3969,"start_character":42,"end_line":3969,"end_character":75},"in_reply_to":"3fa7e38b_15ad9e31","updated":"2019-12-19 10:25:48.000000000","message":"heheheh I forgot the comment, thanks!","commit_id":"3f79bc8f5fc02a9c173d56f5af3b78b1e4344c75"}],"neutron/tests/unit/db/test_ipam_pluggable_backend.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"6746bb0a2ed642d64721bab7edd2eafbb4be8c3b","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        cidr \u003d constants.PROVISIONAL_IPV6_PD_PREFIX"},{"line_number":409,"context_line":"        cidr_network \u003d netaddr.IPNetwork(cidr)"},{"line_number":410,"context_line":"        allocation_pools \u003d [netaddr.IPRange("},{"line_number":411,"context_line":"            str(cidr_network.ip + 1),"},{"line_number":412,"context_line":"            str(netaddr.IPAddress(cidr_network.last)))]"},{"line_number":413,"context_line":"        with self.subnet(cidr\u003dNone, ip_version\u003dconstants.IP_VERSION_6,"},{"line_number":414,"context_line":"                         subnetpool_id\u003dconstants.IPV6_PD_POOL_ID,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_75441274","line":411,"range":{"start_line":411,"start_character":12,"end_line":411,"end_character":15},"updated":"2019-12-18 20:13:08.000000000","message":"I think the str() conversion is redundant, IPRange() takes IPAddress objects as parameters","commit_id":"3f79bc8f5fc02a9c173d56f5af3b78b1e4344c75"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8379f8a9e04e1d2300f8bd92c58ae8d7f779cce9","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        cidr \u003d constants.PROVISIONAL_IPV6_PD_PREFIX"},{"line_number":409,"context_line":"        cidr_network \u003d netaddr.IPNetwork(cidr)"},{"line_number":410,"context_line":"        allocation_pools \u003d [netaddr.IPRange("},{"line_number":411,"context_line":"            str(cidr_network.ip + 1),"},{"line_number":412,"context_line":"            str(netaddr.IPAddress(cidr_network.last)))]"},{"line_number":413,"context_line":"        with self.subnet(cidr\u003dNone, ip_version\u003dconstants.IP_VERSION_6,"},{"line_number":414,"context_line":"                         subnetpool_id\u003dconstants.IPV6_PD_POOL_ID,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_ac5ec04e","line":411,"range":{"start_line":411,"start_character":12,"end_line":411,"end_character":15},"in_reply_to":"3fa7e38b_75441274","updated":"2019-12-19 10:25:48.000000000","message":"Good catch, you are right!","commit_id":"3f79bc8f5fc02a9c173d56f5af3b78b1e4344c75"}],"neutron/tests/unit/extensions/test_network_ip_availability.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"6746bb0a2ed642d64721bab7edd2eafbb4be8c3b","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                self.assertEqual(0, len(response[IP_AVAILS_KEY]))"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def test_usages_query_ip_version_v6(self):"},{"line_number":219,"context_line":"        cidr_ipv6 \u003d \u00272607:f0d0:1002:51::/64\u0027"},{"line_number":220,"context_line":"        cidr_ipv6_net \u003d netaddr.IPNetwork(cidr_ipv6)"},{"line_number":221,"context_line":"        with self.network() as net:"},{"line_number":222,"context_line":"            with self.subnet("}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_d529469c","line":219,"range":{"start_line":219,"start_character":21,"end_line":219,"end_character":43},"updated":"2019-12-18 20:13:08.000000000","message":"This should use some prefix within 2001:db8::","commit_id":"3f79bc8f5fc02a9c173d56f5af3b78b1e4344c75"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8379f8a9e04e1d2300f8bd92c58ae8d7f779cce9","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                self.assertEqual(0, len(response[IP_AVAILS_KEY]))"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def test_usages_query_ip_version_v6(self):"},{"line_number":219,"context_line":"        cidr_ipv6 \u003d \u00272607:f0d0:1002:51::/64\u0027"},{"line_number":220,"context_line":"        cidr_ipv6_net \u003d netaddr.IPNetwork(cidr_ipv6)"},{"line_number":221,"context_line":"        with self.network() as net:"},{"line_number":222,"context_line":"            with self.subnet("}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_6c41a863","line":219,"range":{"start_line":219,"start_character":21,"end_line":219,"end_character":43},"in_reply_to":"3fa7e38b_d529469c","updated":"2019-12-19 10:25:48.000000000","message":"Yes, I was using the previously assigned IPs but we should use this prefix.","commit_id":"3f79bc8f5fc02a9c173d56f5af3b78b1e4344c75"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"6746bb0a2ed642d64721bab7edd2eafbb4be8c3b","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        cidr_ipv6_net \u003d netaddr.IPNetwork(cidr_ipv6)"},{"line_number":221,"context_line":"        with self.network() as net:"},{"line_number":222,"context_line":"            with self.subnet("},{"line_number":223,"context_line":"                    network\u003dnet, cidr\u003d\u00272607:f0d0:1002:51::/64\u0027,"},{"line_number":224,"context_line":"                    ip_version\u003dconstants.IP_VERSION_6,"},{"line_number":225,"context_line":"                    ipv6_address_mode\u003dconstants.DHCPV6_STATELESS):"},{"line_number":226,"context_line":"                # Get IPv6"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_95150e4f","line":223,"range":{"start_line":223,"start_character":38,"end_line":223,"end_character":62},"updated":"2019-12-18 20:13:08.000000000","message":"Use cidr_ipv6 here instead to avoid possible inconsistencies, like you did below","commit_id":"3f79bc8f5fc02a9c173d56f5af3b78b1e4344c75"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8379f8a9e04e1d2300f8bd92c58ae8d7f779cce9","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        cidr_ipv6_net \u003d netaddr.IPNetwork(cidr_ipv6)"},{"line_number":221,"context_line":"        with self.network() as net:"},{"line_number":222,"context_line":"            with self.subnet("},{"line_number":223,"context_line":"                    network\u003dnet, cidr\u003d\u00272607:f0d0:1002:51::/64\u0027,"},{"line_number":224,"context_line":"                    ip_version\u003dconstants.IP_VERSION_6,"},{"line_number":225,"context_line":"                    ipv6_address_mode\u003dconstants.DHCPV6_STATELESS):"},{"line_number":226,"context_line":"                # Get IPv6"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_8c442475","line":223,"range":{"start_line":223,"start_character":38,"end_line":223,"end_character":62},"in_reply_to":"3fa7e38b_95150e4f","updated":"2019-12-19 10:25:48.000000000","message":"Good catch","commit_id":"3f79bc8f5fc02a9c173d56f5af3b78b1e4344c75"}]}
