)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"acd63a10e474093a51907e457e9eb7bd6d0eddd9","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Introduce floating IP pool resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for listing floating ip pools (subnets)."},{"line_number":10,"context_line":"A new API resource ``floating_ips`` is introduced."},{"line_number":11,"context_line":"This API endpoint can return a list floating ip pools"},{"line_number":12,"context_line":"which are essentially mappings between network UUIDs and"},{"line_number":13,"context_line":"subnet CIDRs. Users can use this API to find out the pool"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5f7c97a3_6774d6fe","line":10,"range":{"start_line":10,"start_character":21,"end_line":10,"end_character":33},"updated":"2018-05-30 18:09:45.000000000","message":"``floatingip_pools`` ??","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6cc58169bd5deff64130df3fb71e4250e1ee9e77","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Introduce floating IP pool resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for listing floating ip pools (subnets)."},{"line_number":10,"context_line":"A new API resource ``floating_ips`` is introduced."},{"line_number":11,"context_line":"This API endpoint can return a list floating ip pools"},{"line_number":12,"context_line":"which are essentially mappings between network UUIDs and"},{"line_number":13,"context_line":"subnet CIDRs. Users can use this API to find out the pool"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5f7c97a3_9048e05c","line":10,"range":{"start_line":10,"start_character":21,"end_line":10,"end_character":33},"in_reply_to":"5f7c97a3_6774d6fe","updated":"2018-06-05 20:41:33.000000000","message":"Done","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"}],"etc/policy.json":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9f7f68face35b2e88ec8972d8f0b275c6419b358","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    \"create_floatingip\": \"rule:regular_user\","},{"line_number":151,"context_line":"    \"create_floatingip:floating_ip_address\": \"rule:admin_only\","},{"line_number":152,"context_line":"    \"get_floatingip\": \"rule:admin_or_owner\","},{"line_number":153,"context_line":"    \"get_floatingip_pool\": \"rule:regular_user\","},{"line_number":154,"context_line":"    \"update_floatingip\": \"rule:admin_or_owner\","},{"line_number":155,"context_line":"    \"delete_floatingip\": \"rule:admin_or_owner\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":25,"id":"3f79a3b5_5b528514","line":153,"range":{"start_line":153,"start_character":20,"end_line":153,"end_character":24},"updated":"2018-09-24 13:51:39.000000000","message":"And, according to the extension you defined in this patch, the function is `get_floatingip_pools`, so here should be get multiple pools too?","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9f7f68face35b2e88ec8972d8f0b275c6419b358","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    \"create_floatingip\": \"rule:regular_user\","},{"line_number":151,"context_line":"    \"create_floatingip:floating_ip_address\": \"rule:admin_only\","},{"line_number":152,"context_line":"    \"get_floatingip\": \"rule:admin_or_owner\","},{"line_number":153,"context_line":"    \"get_floatingip_pool\": \"rule:regular_user\","},{"line_number":154,"context_line":"    \"update_floatingip\": \"rule:admin_or_owner\","},{"line_number":155,"context_line":"    \"delete_floatingip\": \"rule:admin_or_owner\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":25,"id":"3f79a3b5_00dd7cdc","line":153,"range":{"start_line":153,"start_character":3,"end_line":153,"end_character":47},"updated":"2018-09-24 13:51:39.000000000","message":"Start a new code block for this?","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"72bdf427eeec509f242adae94a93cc97f8879a0a","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    \"create_floatingip\": \"rule:regular_user\","},{"line_number":151,"context_line":"    \"create_floatingip:floating_ip_address\": \"rule:admin_only\","},{"line_number":152,"context_line":"    \"get_floatingip\": \"rule:admin_or_owner\","},{"line_number":153,"context_line":"    \"get_floatingip_pool\": \"rule:regular_user\","},{"line_number":154,"context_line":"    \"update_floatingip\": \"rule:admin_or_owner\","},{"line_number":155,"context_line":"    \"delete_floatingip\": \"rule:admin_or_owner\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":25,"id":"3f79a3b5_5d2d5dac","line":153,"range":{"start_line":153,"start_character":20,"end_line":153,"end_character":24},"in_reply_to":"3f79a3b5_5b528514","updated":"2018-09-26 21:30:17.000000000","message":"Yes, the API should be getting multiple pools but the policy rule applies for individual pool in https://github.com/openstack/neutron/blob/56bcb6fe0aa545e5c6d4e208e9a0321929a353a4/neutron/api/v2/base.py#L317 , so I think it is fine.","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3c2910d9cb98878636ac76c249546216ab80bc60","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    \"create_floatingip\": \"rule:regular_user\","},{"line_number":151,"context_line":"    \"create_floatingip:floating_ip_address\": \"rule:admin_only\","},{"line_number":152,"context_line":"    \"get_floatingip\": \"rule:admin_or_owner\","},{"line_number":153,"context_line":"    \"get_floatingip_pool\": \"rule:regular_user\","},{"line_number":154,"context_line":"    \"update_floatingip\": \"rule:admin_or_owner\","},{"line_number":155,"context_line":"    \"delete_floatingip\": \"rule:admin_or_owner\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":27,"id":"3f79a3b5_ba7cacb6","line":153,"range":{"start_line":153,"start_character":20,"end_line":153,"end_character":24},"updated":"2018-09-27 07:44:28.000000000","message":"shouldn\u0027t be \"pools\" here?","commit_id":"b685632f4c088d203f56aaa69537a86f2a0c466e"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"b0227f2170bd2fdc404d2d3788aa847eb75a0661","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    \"create_floatingip\": \"rule:regular_user\","},{"line_number":151,"context_line":"    \"create_floatingip:floating_ip_address\": \"rule:admin_only\","},{"line_number":152,"context_line":"    \"get_floatingip\": \"rule:admin_or_owner\","},{"line_number":153,"context_line":"    \"get_floatingip_pool\": \"rule:regular_user\","},{"line_number":154,"context_line":"    \"update_floatingip\": \"rule:admin_or_owner\","},{"line_number":155,"context_line":"    \"delete_floatingip\": \"rule:admin_or_owner\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":27,"id":"3f79a3b5_a791ed55","line":153,"range":{"start_line":153,"start_character":20,"end_line":153,"end_character":24},"in_reply_to":"3f79a3b5_ba7cacb6","updated":"2018-09-27 13:59:43.000000000","message":"I tested it and it looks \"pools\" are not the right one. The code for checking policy rule is here: https://github.com/openstack/neutron/blob/56bcb6fe0aa545e5c6d4e208e9a0321929a353a4/neutron/api/v2/base.py#L317 .","commit_id":"b685632f4c088d203f56aaa69537a86f2a0c466e"}],"neutron/db/fip_pools_db.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6799fd70185c314b66e0b4dc12bea821d9960e61","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @staticmethod"},{"line_number":34,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"},{"line_number":35,"context_line":"        res \u003d {\u0027id\u0027: subnet.id,"},{"line_number":36,"context_line":"               \u0027name\u0027: subnet.name,"},{"line_number":37,"context_line":"               \u0027tenant_id\u0027: subnet.tenant_id,"},{"line_number":38,"context_line":"               \u0027network_id\u0027: subnet.network_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_13da6de8","line":35,"range":{"start_line":35,"start_character":16,"end_line":35,"end_character":19},"updated":"2018-05-01 19:48:13.000000000","message":"Please see my comment to https://review.openstack.org/#/c/556674/3/neutron_lib/api/definitions/floatingip_pools.py@30","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"87ff48862ec71e8bc171f5550d9d7e825b8582ad","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @staticmethod"},{"line_number":34,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"},{"line_number":35,"context_line":"        res \u003d {\u0027id\u0027: subnet.id,"},{"line_number":36,"context_line":"               \u0027name\u0027: subnet.name,"},{"line_number":37,"context_line":"               \u0027tenant_id\u0027: subnet.tenant_id,"},{"line_number":38,"context_line":"               \u0027network_id\u0027: subnet.network_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_d30dbe90","line":35,"range":{"start_line":35,"start_character":16,"end_line":35,"end_character":19},"in_reply_to":"9f6a8fd7_13da6de8","updated":"2018-05-02 17:55:05.000000000","message":"Done","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6799fd70185c314b66e0b4dc12bea821d9960e61","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @staticmethod"},{"line_number":34,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"},{"line_number":35,"context_line":"        res \u003d {\u0027id\u0027: subnet.id,"},{"line_number":36,"context_line":"               \u0027name\u0027: subnet.name,"},{"line_number":37,"context_line":"               \u0027tenant_id\u0027: subnet.tenant_id,"},{"line_number":38,"context_line":"               \u0027network_id\u0027: subnet.network_id,"},{"line_number":39,"context_line":"               \u0027cidr\u0027: str(subnet.cidr)}"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_33d531b8","line":36,"range":{"start_line":36,"start_character":16,"end_line":36,"end_character":21},"updated":"2018-05-01 19:48:13.000000000","message":"Please see my comment to https://review.openstack.org/#/c/556674/3/neutron_lib/api/definitions/floatingip_pools.py@33","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"87ff48862ec71e8bc171f5550d9d7e825b8582ad","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    @staticmethod"},{"line_number":34,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"},{"line_number":35,"context_line":"        res \u003d {\u0027id\u0027: subnet.id,"},{"line_number":36,"context_line":"               \u0027name\u0027: subnet.name,"},{"line_number":37,"context_line":"               \u0027tenant_id\u0027: subnet.tenant_id,"},{"line_number":38,"context_line":"               \u0027network_id\u0027: subnet.network_id,"},{"line_number":39,"context_line":"               \u0027cidr\u0027: str(subnet.cidr)}"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_f31002ab","line":36,"range":{"start_line":36,"start_character":16,"end_line":36,"end_character":21},"in_reply_to":"9f6a8fd7_33d531b8","updated":"2018-05-02 17:55:05.000000000","message":"Done","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"acd63a10e474093a51907e457e9eb7bd6d0eddd9","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        return db_utils.resource_fields(res, fields)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _network_is_external(self, context, net_id):"},{"line_number":44,"context_line":"        return net_obj.ExternalNetwork.objects_exist("},{"line_number":45,"context_line":"            context, network_id\u003dnet_id)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_a7266ecd","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":28},"updated":"2018-05-30 18:09:45.000000000","message":"_is_network_external would make more sense if you decide to keep it ?","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6cc58169bd5deff64130df3fb71e4250e1ee9e77","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        return db_utils.resource_fields(res, fields)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _network_is_external(self, context, net_id):"},{"line_number":44,"context_line":"        return net_obj.ExternalNetwork.objects_exist("},{"line_number":45,"context_line":"            context, network_id\u003dnet_id)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_1044d073","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":28},"in_reply_to":"5f7c97a3_a7266ecd","updated":"2018-06-05 20:41:33.000000000","message":"Done","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"acd63a10e474093a51907e457e9eb7bd6d0eddd9","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        return db_utils.resource_fields(res, fields)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _network_is_external(self, context, net_id):"},{"line_number":44,"context_line":"        return net_obj.ExternalNetwork.objects_exist("},{"line_number":45,"context_line":"            context, network_id\u003dnet_id)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":48,"context_line":"                             sorts\u003dNone, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_e738e6ee","line":45,"range":{"start_line":43,"start_character":3,"end_line":45,"end_character":39},"updated":"2018-05-30 18:09:45.000000000","message":"this one liner is not needed I guess","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6cc58169bd5deff64130df3fb71e4250e1ee9e77","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        return db_utils.resource_fields(res, fields)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _network_is_external(self, context, net_id):"},{"line_number":44,"context_line":"        return net_obj.ExternalNetwork.objects_exist("},{"line_number":45,"context_line":"            context, network_id\u003dnet_id)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":48,"context_line":"                             sorts\u003dNone, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_3049cc8a","line":45,"range":{"start_line":43,"start_character":3,"end_line":45,"end_character":39},"in_reply_to":"5f7c97a3_e738e6ee","updated":"2018-06-05 20:41:33.000000000","message":"Done","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"156f3219faee9c91a5cdd53f733fcf703427328b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                   if self._is_network_external(context, n.id)]"},{"line_number":57,"context_line":"        filters[\u0027network_id\u0027] \u003d net_ids"},{"line_number":58,"context_line":"        admin_context \u003d context.elevated()"},{"line_number":59,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":60,"context_line":"                                                    _pager\u003dpager, **filters)"},{"line_number":61,"context_line":"        # NOTE(hongbin): Right now, floating IP is only supported in ipv4"},{"line_number":62,"context_line":"        # but we need to revisit this once floating IP is supported in ipv6"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_4a390cf0","line":59,"range":{"start_line":59,"start_character":52,"end_line":59,"end_character":65},"updated":"2018-06-07 07:47:44.000000000","message":"why admin context? Doesn\u0027t it mean that You will return to user even networks not available for him?","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"976a1f9687968fd96546e8dfee498ee3137c1894","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                   if self._is_network_external(context, n.id)]"},{"line_number":57,"context_line":"        filters[\u0027network_id\u0027] \u003d net_ids"},{"line_number":58,"context_line":"        admin_context \u003d context.elevated()"},{"line_number":59,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":60,"context_line":"                                                    _pager\u003dpager, **filters)"},{"line_number":61,"context_line":"        # NOTE(hongbin): Right now, floating IP is only supported in ipv4"},{"line_number":62,"context_line":"        # but we need to revisit this once floating IP is supported in ipv6"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_54274a13","line":59,"range":{"start_line":59,"start_character":52,"end_line":59,"end_character":65},"in_reply_to":"5f7c97a3_4a390cf0","updated":"2018-06-08 20:26:38.000000000","message":"Yes, this patch is for addressing the problem that tenant users are not able to see individual subnets so they cannot pick a specific subnet from which the floating IP is created. Returning pools (a light version of subnet) to user (and skip checking tenants) is the intent. Pools should be returned as long as the users have enough permission to see the floating network at line #54","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1824b6df88d6b8f1bf3e2cc9337f92d8a09ebc5a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                   if self._is_network_external(context, n.id)]"},{"line_number":57,"context_line":"        filters[\u0027network_id\u0027] \u003d net_ids"},{"line_number":58,"context_line":"        admin_context \u003d context.elevated()"},{"line_number":59,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":60,"context_line":"                                                    _pager\u003dpager, **filters)"},{"line_number":61,"context_line":"        # NOTE(hongbin): Right now, floating IP is only supported in ipv4"},{"line_number":62,"context_line":"        # but we need to revisit this once floating IP is supported in ipv6"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_13bf6c61","line":59,"range":{"start_line":59,"start_character":52,"end_line":59,"end_character":65},"in_reply_to":"5f7c97a3_54274a13","updated":"2018-06-12 13:54:05.000000000","message":"ok, I see now. Thx","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"156f3219faee9c91a5cdd53f733fcf703427328b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":60,"context_line":"                                                    _pager\u003dpager, **filters)"},{"line_number":61,"context_line":"        # NOTE(hongbin): Right now, floating IP is only supported in ipv4"},{"line_number":62,"context_line":"        # but we need to revisit this once floating IP is supported in ipv6"},{"line_number":63,"context_line":"        return [self._make_floatingip_pool_dict(obj, fields)"},{"line_number":64,"context_line":"                for obj in subnet_objs"},{"line_number":65,"context_line":"                if obj.ip_version \u003d\u003d lib_const.IP_VERSION_4]"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_2a7050da","line":62,"updated":"2018-06-07 07:47:44.000000000","message":"It is like that in ML2 plugin but other plugins might support IPv6 FIP currently. IIRC midonet supports it.\n\nJust an idea: maybe You can check if extension: https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/fip64.py is available and then get also IPv6 subnets here?","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"976a1f9687968fd96546e8dfee498ee3137c1894","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":60,"context_line":"                                                    _pager\u003dpager, **filters)"},{"line_number":61,"context_line":"        # NOTE(hongbin): Right now, floating IP is only supported in ipv4"},{"line_number":62,"context_line":"        # but we need to revisit this once floating IP is supported in ipv6"},{"line_number":63,"context_line":"        return [self._make_floatingip_pool_dict(obj, fields)"},{"line_number":64,"context_line":"                for obj in subnet_objs"},{"line_number":65,"context_line":"                if obj.ip_version \u003d\u003d lib_const.IP_VERSION_4]"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_9a3c2993","line":62,"in_reply_to":"5f7c97a3_2a7050da","updated":"2018-06-08 20:26:38.000000000","message":"Done. Thanks for the good suggestion.","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"830293197f2dac3041d0e918dabf50171796a375","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                is_v6_supported \u003d True"},{"line_number":68,"context_line":"        return [self._make_floatingip_pool_dict(obj, fields)"},{"line_number":69,"context_line":"                for obj in subnet_objs"},{"line_number":70,"context_line":"                if obj.ip_version \u003d\u003d lib_const.IP_VERSION_4 or is_v6_supported]"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_2e44b6b7","line":70,"range":{"start_line":70,"start_character":37,"end_line":70,"end_character":78},"updated":"2018-06-08 21:46:40.000000000","message":"you\u0027re mixing datatypes here, IP_VERSION_4 is int and is_v6_supported is boolen","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"e84e896d6742e51ffac4bec1477bd05229f58375","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                is_v6_supported \u003d True"},{"line_number":68,"context_line":"        return [self._make_floatingip_pool_dict(obj, fields)"},{"line_number":69,"context_line":"                for obj in subnet_objs"},{"line_number":70,"context_line":"                if obj.ip_version \u003d\u003d lib_const.IP_VERSION_4 or is_v6_supported]"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_8eae2a2c","line":70,"range":{"start_line":70,"start_character":37,"end_line":70,"end_character":78},"in_reply_to":"5f7c97a3_2e44b6b7","updated":"2018-06-08 21:49:26.000000000","message":"ignore this comment","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1824b6df88d6b8f1bf3e2cc9337f92d8a09ebc5a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":57,"context_line":"        nets \u003d net_obj.Network.get_objects(context)"},{"line_number":58,"context_line":"        net_ids \u003d [n.id for n in nets"},{"line_number":59,"context_line":"                   if self._is_network_external(context, n.id)]"},{"line_number":60,"context_line":"        filters[\u0027network_id\u0027] \u003d net_ids"},{"line_number":61,"context_line":"        admin_context \u003d context.elevated()"},{"line_number":62,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_f6a41e09","line":59,"updated":"2018-06-12 13:54:05.000000000","message":"why You need to get all networks first and then get each as ExternalNetwork object?\nCan\u0027t You do something like:\n\nnets \u003d net_obj.ExternalNetwork.get_objects(context)","commit_id":"e0f823d23aa32ca1fe8c9bcb67918aba99ecdc2f"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"ae7092f1be9062a20dd93dca1a0808c283352d1c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":57,"context_line":"        nets \u003d net_obj.Network.get_objects(context)"},{"line_number":58,"context_line":"        net_ids \u003d [n.id for n in nets"},{"line_number":59,"context_line":"                   if self._is_network_external(context, n.id)]"},{"line_number":60,"context_line":"        filters[\u0027network_id\u0027] \u003d net_ids"},{"line_number":61,"context_line":"        admin_context \u003d context.elevated()"},{"line_number":62,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_3e657faf","line":59,"in_reply_to":"5f7c97a3_f6a41e09","updated":"2018-06-12 23:11:06.000000000","message":"Done","commit_id":"e0f823d23aa32ca1fe8c9bcb67918aba99ecdc2f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1824b6df88d6b8f1bf3e2cc9337f92d8a09ebc5a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":63,"context_line":"                                                    _pager\u003dpager, **filters)"},{"line_number":64,"context_line":"        is_v6_supported \u003d False"},{"line_number":65,"context_line":"        for plugin in directory.get_plugins().values():"},{"line_number":66,"context_line":"            if extensions.is_extension_supported(plugin, fip64.ALIAS):"},{"line_number":67,"context_line":"                is_v6_supported \u003d True"},{"line_number":68,"context_line":"        return [self._make_floatingip_pool_dict(obj, fields)"},{"line_number":69,"context_line":"                for obj in subnet_objs"},{"line_number":70,"context_line":"                if obj.ip_version \u003d\u003d lib_const.IP_VERSION_4 or is_v6_supported]"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_f6217e9f","line":67,"range":{"start_line":65,"start_character":0,"end_line":67,"end_character":38},"updated":"2018-06-12 13:54:05.000000000","message":"maybe You can move it to separate method? and cache this value in memory to not check it during every call. It will not change without restart of service","commit_id":"e0f823d23aa32ca1fe8c9bcb67918aba99ecdc2f"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"ae7092f1be9062a20dd93dca1a0808c283352d1c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":63,"context_line":"                                                    _pager\u003dpager, **filters)"},{"line_number":64,"context_line":"        is_v6_supported \u003d False"},{"line_number":65,"context_line":"        for plugin in directory.get_plugins().values():"},{"line_number":66,"context_line":"            if extensions.is_extension_supported(plugin, fip64.ALIAS):"},{"line_number":67,"context_line":"                is_v6_supported \u003d True"},{"line_number":68,"context_line":"        return [self._make_floatingip_pool_dict(obj, fields)"},{"line_number":69,"context_line":"                for obj in subnet_objs"},{"line_number":70,"context_line":"                if obj.ip_version \u003d\u003d lib_const.IP_VERSION_4 or is_v6_supported]"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_fe0867d9","line":67,"range":{"start_line":65,"start_character":0,"end_line":67,"end_character":38},"in_reply_to":"5f7c97a3_f6217e9f","updated":"2018-06-12 23:11:06.000000000","message":"Done","commit_id":"e0f823d23aa32ca1fe8c9bcb67918aba99ecdc2f"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"9062e9aeb9b22c420f6dfc01988a39b12115cbad","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                is_v6_supported \u003d True"},{"line_number":68,"context_line":"        return [self._make_floatingip_pool_dict(obj, fields)"},{"line_number":69,"context_line":"                for obj in subnet_objs"},{"line_number":70,"context_line":"                if obj.ip_version \u003d\u003d lib_const.IP_VERSION_4 or is_v6_supported]"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_80948e37","line":70,"range":{"start_line":70,"start_character":16,"end_line":70,"end_character":78},"updated":"2018-06-11 23:54:34.000000000","message":"i guess this condition is not even need because 4 and 6 are only supported values, whatever version it has will be passed along.","commit_id":"e0f823d23aa32ca1fe8c9bcb67918aba99ecdc2f"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"ae7092f1be9062a20dd93dca1a0808c283352d1c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                is_v6_supported \u003d True"},{"line_number":68,"context_line":"        return [self._make_floatingip_pool_dict(obj, fields)"},{"line_number":69,"context_line":"                for obj in subnet_objs"},{"line_number":70,"context_line":"                if obj.ip_version \u003d\u003d lib_const.IP_VERSION_4 or is_v6_supported]"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_5ef95bc5","line":70,"range":{"start_line":70,"start_character":16,"end_line":70,"end_character":78},"in_reply_to":"5f7c97a3_80948e37","updated":"2018-06-12 23:11:06.000000000","message":"This condition is needed because the result would depend on the present of fip64 extension.","commit_id":"e0f823d23aa32ca1fe8c9bcb67918aba99ecdc2f"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"0154ba1d24b4e62f5afd1eddf379943815dbfadc","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        return db_utils.resource_fields(res, fields)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _is_network_external(self, context, net_id):"},{"line_number":50,"context_line":"        return net_obj.ExternalNetwork.objects_exist(context,"},{"line_number":51,"context_line":"                                                     network_id\u003dnet_id)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":54,"context_line":"                             sorts\u003dNone, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_fea4e7ba","line":51,"range":{"start_line":49,"start_character":3,"end_line":51,"end_character":71},"updated":"2018-06-12 23:17:52.000000000","message":"is this even needed now ?","commit_id":"95aa364564122156aa9b7901b2d7c6f58d834acf"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"67459b7db7f1c115a17c366eafe9a4fcc02ffbc3","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        return db_utils.resource_fields(res, fields)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _is_network_external(self, context, net_id):"},{"line_number":50,"context_line":"        return net_obj.ExternalNetwork.objects_exist(context,"},{"line_number":51,"context_line":"                                                     network_id\u003dnet_id)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":54,"context_line":"                             sorts\u003dNone, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_25d23afe","line":51,"range":{"start_line":49,"start_character":3,"end_line":51,"end_character":71},"in_reply_to":"5f7c97a3_fea4e7ba","updated":"2018-06-13 15:32:49.000000000","message":"Done","commit_id":"95aa364564122156aa9b7901b2d7c6f58d834acf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9b730a2e8074884ae026bc4a891374c1ce1427ad","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        return db_utils.resource_fields(res, fields)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _is_network_external(self, context, net_id):"},{"line_number":50,"context_line":"        return net_obj.ExternalNetwork.objects_exist(context,"},{"line_number":51,"context_line":"                                                     network_id\u003dnet_id)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":54,"context_line":"                             sorts\u003dNone, limit\u003dNone, marker\u003dNone,"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_18676e27","line":51,"range":{"start_line":49,"start_character":3,"end_line":51,"end_character":71},"in_reply_to":"5f7c97a3_fea4e7ba","updated":"2018-06-13 11:30:06.000000000","message":"I think it\u0027s not used anywhere now","commit_id":"95aa364564122156aa9b7901b2d7c6f58d834acf"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"fdebd83a0f1dffef5e547f00c4a2fa8e02a5183e","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    \"\"\"Class to support floating IP pool.\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    _is_v6_supported \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"},{"line_number":40,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_ee03ba0e","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":27},"updated":"2018-06-13 22:39:27.000000000","message":"this can be defaulted to False ?","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"fdebd83a0f1dffef5e547f00c4a2fa8e02a5183e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"},{"line_number":41,"context_line":"        res \u003d {\u0027subnet_id\u0027: subnet.id,"},{"line_number":42,"context_line":"               \u0027subnet_name\u0027: subnet.name,"},{"line_number":43,"context_line":"               \u0027tenant_id\u0027: subnet.tenant_id,"},{"line_number":44,"context_line":"               \u0027network_id\u0027: subnet.network_id,"},{"line_number":45,"context_line":"               \u0027cidr\u0027: str(subnet.cidr)}"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_ee2ada8e","line":43,"range":{"start_line":43,"start_character":15,"end_line":43,"end_character":26},"updated":"2018-06-13 22:39:27.000000000","message":"\u0027project_id\u0027 ?","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8e4bfad3a3d326ed4b7ca9a56a5432ae295b7ee1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"},{"line_number":41,"context_line":"        res \u003d {\u0027subnet_id\u0027: subnet.id,"},{"line_number":42,"context_line":"               \u0027subnet_name\u0027: subnet.name,"},{"line_number":43,"context_line":"               \u0027tenant_id\u0027: subnet.tenant_id,"},{"line_number":44,"context_line":"               \u0027network_id\u0027: subnet.network_id,"},{"line_number":45,"context_line":"               \u0027cidr\u0027: str(subnet.cidr)}"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_1fd0542b","line":43,"range":{"start_line":43,"start_character":15,"end_line":43,"end_character":26},"in_reply_to":"5f7c97a3_ee2ada8e","updated":"2018-06-18 15:24:07.000000000","message":"I believe \u0027project_id\u0027 will be populated on the call of db_utils.resource_fileds(..) at line #47","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"fdebd83a0f1dffef5e547f00c4a2fa8e02a5183e","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @property"},{"line_number":67,"context_line":"    def is_v6_supported(self):"},{"line_number":68,"context_line":"        if self._is_v6_supported is not None:"},{"line_number":69,"context_line":"            return self._is_v6_supported"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        supported \u003d False"},{"line_number":72,"context_line":"        for plugin in directory.get_plugins().values():"},{"line_number":73,"context_line":"            if extensions.is_extension_supported(plugin, fip64.ALIAS):"},{"line_number":74,"context_line":"                supported \u003d True"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_e93174ee","line":71,"range":{"start_line":68,"start_character":8,"end_line":71,"end_character":25},"updated":"2018-06-13 22:39:27.000000000","message":"this part can be removed, if _is_v6_supported is defaulted to False.","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":27329,"name":"Federico Ressi","email":"fressi@redhat.com","username":"fressi_redhat"},"change_message_id":"b7e6032395ce0ab29ce8559cfe32ef3983cfb57e","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @property"},{"line_number":67,"context_line":"    def is_v6_supported(self):"},{"line_number":68,"context_line":"        if self._is_v6_supported is not None:"},{"line_number":69,"context_line":"            return self._is_v6_supported"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        supported \u003d False"},{"line_number":72,"context_line":"        for plugin in directory.get_plugins().values():"},{"line_number":73,"context_line":"            if extensions.is_extension_supported(plugin, fip64.ALIAS):"},{"line_number":74,"context_line":"                supported \u003d True"},{"line_number":75,"context_line":"        self._is_v6_supported \u003d supported"},{"line_number":76,"context_line":"        return self._is_v6_supported"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_d1b71e21","line":76,"range":{"start_line":68,"start_character":8,"end_line":76,"end_character":36},"updated":"2018-06-19 08:51:23.000000000","message":"This code could be more simple:\n\n  supported \u003d self._is_v6_supported\n  if supported is None:\n    supported \u003d False\n    for plugin in directory.get_plugins().values():\n      if extensions.is_extension_supported(plugin, fip64.ALIAS):\n        supported \u003d True\n        break\n    self._is_v6_supported \u003d supported \u003d supported or False\n\n   return supported","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"fdebd83a0f1dffef5e547f00c4a2fa8e02a5183e","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            return self._is_v6_supported"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        supported \u003d False"},{"line_number":72,"context_line":"        for plugin in directory.get_plugins().values():"},{"line_number":73,"context_line":"            if extensions.is_extension_supported(plugin, fip64.ALIAS):"},{"line_number":74,"context_line":"                supported \u003d True"},{"line_number":75,"context_line":"        self._is_v6_supported \u003d supported"},{"line_number":76,"context_line":"        return self._is_v6_supported"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_696c84cf","line":76,"range":{"start_line":72,"start_character":8,"end_line":76,"end_character":36},"updated":"2018-06-13 22:39:27.000000000","message":"for plugin in directory.get_plugins().values():\n    if extensions.is_extension_supported(plugin,fip64.ALIAS):\n        self._is_v6_supported \u003d True\nreturn self._is_v6_supported\n\nthis can be simplified and extra variable supported can be avoided","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"d289581ceec6db8271df578511ad656c5c565096","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            return self._is_v6_supported"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        supported \u003d False"},{"line_number":72,"context_line":"        for plugin in directory.get_plugins().values():"},{"line_number":73,"context_line":"            if extensions.is_extension_supported(plugin, fip64.ALIAS):"},{"line_number":74,"context_line":"                supported \u003d True"},{"line_number":75,"context_line":"        self._is_v6_supported \u003d supported"},{"line_number":76,"context_line":"        return self._is_v6_supported"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_3f919047","line":76,"range":{"start_line":72,"start_character":8,"end_line":76,"end_character":36},"in_reply_to":"5f7c97a3_5fc6cc6a","updated":"2018-06-18 15:27:22.000000000","message":"oh I see !","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8e4bfad3a3d326ed4b7ca9a56a5432ae295b7ee1","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            return self._is_v6_supported"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        supported \u003d False"},{"line_number":72,"context_line":"        for plugin in directory.get_plugins().values():"},{"line_number":73,"context_line":"            if extensions.is_extension_supported(plugin, fip64.ALIAS):"},{"line_number":74,"context_line":"                supported \u003d True"},{"line_number":75,"context_line":"        self._is_v6_supported \u003d supported"},{"line_number":76,"context_line":"        return self._is_v6_supported"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_5fc6cc6a","line":76,"range":{"start_line":72,"start_character":8,"end_line":76,"end_character":36},"in_reply_to":"5f7c97a3_696c84cf","updated":"2018-06-18 15:24:07.000000000","message":"Would your implementation satisfy the caching requirement? Below is the caching requirement raised by another reviewer.\n\n  \"maybe You can move it to separate method? and cache this value in memory to not check it during every call. It will not change without restart of service\"","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8bb757dc32a93de74edece923352f642716d73bd","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @property"},{"line_number":67,"context_line":"    def is_v6_supported(self):"},{"line_number":68,"context_line":"        if self._is_v6_supported is not None:"},{"line_number":69,"context_line":"            return self._is_v6_supported"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        supported \u003d False"},{"line_number":72,"context_line":"        for plugin in directory.get_plugins().values():"},{"line_number":73,"context_line":"            if extensions.is_extension_supported(plugin, fip64.ALIAS):"},{"line_number":74,"context_line":"                supported \u003d True"},{"line_number":75,"context_line":"        self._is_v6_supported \u003d supported"},{"line_number":76,"context_line":"        return self._is_v6_supported"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_e8fba912","line":76,"range":{"start_line":68,"start_character":8,"end_line":76,"end_character":36},"in_reply_to":"5f7c97a3_d1b71e21","updated":"2018-07-20 18:06:59.000000000","message":"Done","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"9ee97a7c40d6cbdcbfe5c25fb4540bcd0159aff0","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    \"\"\"Class to support floating IP pool.\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    _is_v6_supported \u003d None"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"},{"line_number":40,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_e8008437","line":37,"range":{"start_line":37,"start_character":22,"end_line":37,"end_character":27},"updated":"2018-07-20 22:02:27.000000000","message":"False will make things simpler, IMO","commit_id":"13ea759b34985bd1a5b3e837fdc397f161411a3a"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"9ee97a7c40d6cbdcbfe5c25fb4540bcd0159aff0","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    @property"},{"line_number":67,"context_line":"    def is_v6_supported(self):"},{"line_number":68,"context_line":"        supported \u003d self._is_v6_supported"},{"line_number":69,"context_line":"        if supported is None:"},{"line_number":70,"context_line":"            supported \u003d False"},{"line_number":71,"context_line":"            for plugin in directory.get_plugins().values():"},{"line_number":72,"context_line":"                if extensions.is_extension_supported(plugin, fip64.ALIAS):"},{"line_number":73,"context_line":"                    supported \u003d True"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_e885e4ae","line":70,"range":{"start_line":69,"start_character":7,"end_line":70,"end_character":29},"updated":"2018-07-20 22:02:27.000000000","message":"if you like comment @L37 then L69-70 can be replaced with\nif not self._is_v6_supported:\n\nwould be simple","commit_id":"13ea759b34985bd1a5b3e837fdc397f161411a3a"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"9ee97a7c40d6cbdcbfe5c25fb4540bcd0159aff0","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            supported \u003d False"},{"line_number":71,"context_line":"            for plugin in directory.get_plugins().values():"},{"line_number":72,"context_line":"                if extensions.is_extension_supported(plugin, fip64.ALIAS):"},{"line_number":73,"context_line":"                    supported \u003d True"},{"line_number":74,"context_line":"                    break"},{"line_number":75,"context_line":"        self._is_v6_supported \u003d supported"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_088140a0","line":73,"range":{"start_line":73,"start_character":20,"end_line":73,"end_character":36},"updated":"2018-07-20 22:02:27.000000000","message":"self._is_v6_supported \u003d True","commit_id":"13ea759b34985bd1a5b3e837fdc397f161411a3a"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"97bd9f714b3ac9a8422c5ac0e49cea1fe1d12bcf","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":55,"context_line":"        net_ids \u003d [n.network_id"},{"line_number":56,"context_line":"                   for n in net_obj.ExternalNetwork.get_objects(context)]"},{"line_number":57,"context_line":"        filters[\u0027network_id\u0027] \u003d net_ids"},{"line_number":58,"context_line":"        admin_context \u003d context.elevated()"},{"line_number":59,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":60,"context_line":"                                                    _pager\u003dpager, **filters)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_19ad5431","line":57,"range":{"start_line":57,"start_character":8,"end_line":57,"end_character":39},"updated":"2018-07-31 03:51:12.000000000","message":"This may break a filter given by users.","commit_id":"7feb2607e088bc765e8595149c03e55b43fb1397"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8580e62a6b220da2ba0ab76b893dc2130d268a82","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":55,"context_line":"        net_ids \u003d [n.network_id"},{"line_number":56,"context_line":"                   for n in net_obj.ExternalNetwork.get_objects(context)]"},{"line_number":57,"context_line":"        filters[\u0027network_id\u0027] \u003d net_ids"},{"line_number":58,"context_line":"        admin_context \u003d context.elevated()"},{"line_number":59,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":60,"context_line":"                                                    _pager\u003dpager, **filters)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_8138f4ca","line":57,"range":{"start_line":57,"start_character":8,"end_line":57,"end_character":39},"in_reply_to":"5f7c97a3_19ad5431","updated":"2018-07-31 19:45:53.000000000","message":"Done","commit_id":"7feb2607e088bc765e8595149c03e55b43fb1397"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"73b4777edf18288d6731b9c4898197177fa41809","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":54,"context_line":"        net_ids \u003d [n.network_id"},{"line_number":55,"context_line":"                   for n in net_obj.ExternalNetwork.get_objects(context)]"},{"line_number":56,"context_line":"        admin_context \u003d context.elevated()"},{"line_number":57,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":58,"context_line":"                                                    _pager\u003dpager,"},{"line_number":59,"context_line":"                                                    network_id\u003dnet_ids)"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_86e76ce4","line":56,"updated":"2018-09-24 08:16:38.000000000","message":"why we need to use elevated context here and for not for networks above?","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"72bdf427eeec509f242adae94a93cc97f8879a0a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":54,"context_line":"        net_ids \u003d [n.network_id"},{"line_number":55,"context_line":"                   for n in net_obj.ExternalNetwork.get_objects(context)]"},{"line_number":56,"context_line":"        admin_context \u003d context.elevated()"},{"line_number":57,"context_line":"        subnet_objs \u003d subnet_obj.Subnet.get_objects(admin_context,"},{"line_number":58,"context_line":"                                                    _pager\u003dpager,"},{"line_number":59,"context_line":"                                                    network_id\u003dnet_ids)"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_8883b555","line":56,"in_reply_to":"3f79a3b5_86e76ce4","updated":"2018-09-26 21:30:17.000000000","message":"Added an inline comment to explain that.\n\nWe use elevated context to make sure we have enough permission to retrieve subnets that are not in current tenant but belongs to external networks shared with current tenant.","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"}],"neutron/db/l3_fip_pools_db.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6ec33a4ede15dc7c2c522c76da0dc01a05a9e8a0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"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":28,"id":"3f79a3b5_797c661f","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"updated":"2018-10-03 10:15:07.000000000","message":"Missing OpenStack fundation ?","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1d930db198cc0d7a3af42a36ea1b1adb88f0cf1d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"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":28,"id":"3f79a3b5_b7dbc2e8","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"in_reply_to":"3f79a3b5_797c661f","updated":"2018-10-04 15:55:48.000000000","message":"I think it is not mandatory.","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"233a59ddc1c787665f1161e9f588d79ba1af9260","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All Rights Reserved."},{"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":28,"id":"3f79a3b5_e2c2e185","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"in_reply_to":"3f79a3b5_b7dbc2e8","updated":"2018-10-16 22:31:00.000000000","message":"In fact, OpenStack foundation is only for foundation employees. if you want to put something here, you put your employer. Or leave it out, like Hongbin did","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6ec33a4ede15dc7c2c522c76da0dc01a05a9e8a0","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class FloatingIPPoolsDbMixin(object):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    \"\"\"Class to support floating IP pool.\"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    _is_v6_supported \u003d None"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_39726e4b","line":28,"updated":"2018-10-03 10:15:07.000000000","message":"This empty line seems not necessary.","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1d930db198cc0d7a3af42a36ea1b1adb88f0cf1d","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class FloatingIPPoolsDbMixin(object):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    \"\"\"Class to support floating IP pool.\"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    _is_v6_supported \u003d None"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_77ef6a86","line":28,"in_reply_to":"3f79a3b5_39726e4b","updated":"2018-10-04 15:55:48.000000000","message":"Done","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6ec33a4ede15dc7c2c522c76da0dc01a05a9e8a0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"},{"line_number":35,"context_line":"        res \u003d {\u0027subnet_id\u0027: subnet.id,"},{"line_number":36,"context_line":"               \u0027subnet_name\u0027: subnet.name,"},{"line_number":37,"context_line":"               \u0027tenant_id\u0027: subnet.tenant_id,"},{"line_number":38,"context_line":"               \u0027network_id\u0027: subnet.network_id,"},{"line_number":39,"context_line":"               \u0027cidr\u0027: str(subnet.cidr)}"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_d9325a5d","line":37,"range":{"start_line":37,"start_character":15,"end_line":37,"end_character":45},"updated":"2018-10-03 10:15:07.000000000","message":"If subnet is not belong to this project, IMO return a tenant id not same to the current user may cause some user confusions.","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"c77cc1ce91167edd6a9875a4cab1bfe291bb8356","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"},{"line_number":35,"context_line":"        res \u003d {\u0027subnet_id\u0027: subnet.id,"},{"line_number":36,"context_line":"               \u0027subnet_name\u0027: subnet.name,"},{"line_number":37,"context_line":"               \u0027tenant_id\u0027: subnet.tenant_id,"},{"line_number":38,"context_line":"               \u0027network_id\u0027: subnet.network_id,"},{"line_number":39,"context_line":"               \u0027cidr\u0027: str(subnet.cidr)}"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_b56f7af8","line":37,"range":{"start_line":37,"start_character":15,"end_line":37,"end_character":45},"in_reply_to":"3f79a3b5_97f7a65b","updated":"2018-10-14 13:18:44.000000000","message":"Maybe You can add some tempest api test (in follow up patch) to check this behavior?","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"9bc0efde9336847b83ea6ffaf547a1db839c993c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"},{"line_number":35,"context_line":"        res \u003d {\u0027subnet_id\u0027: subnet.id,"},{"line_number":36,"context_line":"               \u0027subnet_name\u0027: subnet.name,"},{"line_number":37,"context_line":"               \u0027tenant_id\u0027: subnet.tenant_id,"},{"line_number":38,"context_line":"               \u0027network_id\u0027: subnet.network_id,"},{"line_number":39,"context_line":"               \u0027cidr\u0027: str(subnet.cidr)}"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_14ef09fb","line":37,"range":{"start_line":37,"start_character":15,"end_line":37,"end_character":45},"in_reply_to":"3f79a3b5_b56f7af8","updated":"2018-10-17 14:08:12.000000000","message":"Sure. I will do that.","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1d930db198cc0d7a3af42a36ea1b1adb88f0cf1d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def _make_floatingip_pool_dict(subnet, fields\u003dNone):"},{"line_number":35,"context_line":"        res \u003d {\u0027subnet_id\u0027: subnet.id,"},{"line_number":36,"context_line":"               \u0027subnet_name\u0027: subnet.name,"},{"line_number":37,"context_line":"               \u0027tenant_id\u0027: subnet.tenant_id,"},{"line_number":38,"context_line":"               \u0027network_id\u0027: subnet.network_id,"},{"line_number":39,"context_line":"               \u0027cidr\u0027: str(subnet.cidr)}"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_97f7a65b","line":37,"range":{"start_line":37,"start_character":15,"end_line":37,"end_character":45},"in_reply_to":"3f79a3b5_d9325a5d","updated":"2018-10-04 15:55:48.000000000","message":"Use current project ID instead. Done.","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6ec33a4ede15dc7c2c522c76da0dc01a05a9e8a0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":44,"context_line":"                             sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":45,"context_line":"                             page_reverse\u003dFalse):"},{"line_number":46,"context_line":"        \"\"\"Return information for available log objects\"\"\""},{"line_number":47,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":48,"context_line":"        net_ids \u003d [n.network_id"},{"line_number":49,"context_line":"                   for n in net_obj.ExternalNetwork.get_objects(context)]"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_b97e7e18","line":46,"range":{"start_line":46,"start_character":48,"end_line":46,"end_character":55},"updated":"2018-10-03 10:15:07.000000000","message":"dict?","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6ec33a4ede15dc7c2c522c76da0dc01a05a9e8a0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":44,"context_line":"                             sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":45,"context_line":"                             page_reverse\u003dFalse):"},{"line_number":46,"context_line":"        \"\"\"Return information for available log objects\"\"\""},{"line_number":47,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":48,"context_line":"        net_ids \u003d [n.network_id"},{"line_number":49,"context_line":"                   for n in net_obj.ExternalNetwork.get_objects(context)]"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_f9887622","line":46,"range":{"start_line":46,"start_character":44,"end_line":46,"end_character":47},"updated":"2018-10-03 10:15:07.000000000","message":"floating IP pool?","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"1d930db198cc0d7a3af42a36ea1b1adb88f0cf1d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":44,"context_line":"                             sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":45,"context_line":"                             page_reverse\u003dFalse):"},{"line_number":46,"context_line":"        \"\"\"Return information for available log objects\"\"\""},{"line_number":47,"context_line":"        pager \u003d base_obj.Pager(sorts, limit, page_reverse, marker)"},{"line_number":48,"context_line":"        net_ids \u003d [n.network_id"},{"line_number":49,"context_line":"                   for n in net_obj.ExternalNetwork.get_objects(context)]"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_b7f42257","line":46,"range":{"start_line":46,"start_character":44,"end_line":46,"end_character":47},"in_reply_to":"3f79a3b5_f9887622","updated":"2018-10-04 15:55:48.000000000","message":"Done","commit_id":"aa3d65e40ff3e427f9e04f82e53f266281c85e25"}],"neutron/extensions/_floatingip_pools_lib.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6799fd70185c314b66e0b4dc12bea821d9960e61","unresolved":false,"context_lines":[{"line_number":32,"context_line":"UPDATED_TIMESTAMP \u003d \u00272018-03-21T10:00:00-00:00\u0027"},{"line_number":33,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":34,"context_line":"    FLOATINGIP_POOLS: {"},{"line_number":35,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":36,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":37,"context_line":"               \u0027is_visible\u0027: True},"},{"line_number":38,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_f3ded9d8","line":35,"range":{"start_line":35,"start_character":9,"end_line":35,"end_character":12},"updated":"2018-05-01 19:48:13.000000000","message":"Please see my comment to https://review.openstack.org/#/c/556674/3/neutron_lib/api/definitions/floatingip_pools.py@30","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"87ff48862ec71e8bc171f5550d9d7e825b8582ad","unresolved":false,"context_lines":[{"line_number":32,"context_line":"UPDATED_TIMESTAMP \u003d \u00272018-03-21T10:00:00-00:00\u0027"},{"line_number":33,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":34,"context_line":"    FLOATINGIP_POOLS: {"},{"line_number":35,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":36,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":37,"context_line":"               \u0027is_visible\u0027: True},"},{"line_number":38,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_b3228a00","line":35,"range":{"start_line":35,"start_character":9,"end_line":35,"end_character":12},"in_reply_to":"9f6a8fd7_f3ded9d8","updated":"2018-05-02 17:55:05.000000000","message":"Done","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6799fd70185c314b66e0b4dc12bea821d9960e61","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":36,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":37,"context_line":"               \u0027is_visible\u0027: True},"},{"line_number":38,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":39,"context_line":"                 \u0027validate\u0027: {\u0027type:string\u0027: db_const.NAME_FIELD_SIZE},"},{"line_number":40,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":41,"context_line":"        \u0027network_id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_b3f2a16e","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":14},"updated":"2018-05-01 19:48:13.000000000","message":"Please see my comment to https://review.openstack.org/#/c/556674/3/neutron_lib/api/definitions/floatingip_pools.py@33","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"87ff48862ec71e8bc171f5550d9d7e825b8582ad","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":36,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":37,"context_line":"               \u0027is_visible\u0027: True},"},{"line_number":38,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":39,"context_line":"                 \u0027validate\u0027: {\u0027type:string\u0027: db_const.NAME_FIELD_SIZE},"},{"line_number":40,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":41,"context_line":"        \u0027network_id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_5321aefa","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":14},"in_reply_to":"9f6a8fd7_b3f2a16e","updated":"2018-05-02 17:55:05.000000000","message":"Done","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"acd63a10e474093a51907e457e9eb7bd6d0eddd9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 VMware, Inc.  All rights reserved."},{"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":11,"id":"5f7c97a3_2201ec05","line":1,"range":{"start_line":1,"start_character":1,"end_line":1,"end_character":17},"updated":"2018-05-30 18:09:45.000000000","message":"is it going to part of existing file ? if not then 2018 ?","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6cc58169bd5deff64130df3fb71e4250e1ee9e77","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 VMware, Inc.  All rights reserved."},{"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":11,"id":"5f7c97a3_d05df848","line":1,"range":{"start_line":1,"start_character":1,"end_line":1,"end_character":17},"in_reply_to":"5f7c97a3_2201ec05","updated":"2018-06-05 20:41:33.000000000","message":"Done","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"acd63a10e474093a51907e457e9eb7bd6d0eddd9","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        \u0027cidr\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":45,"context_line":"                 \u0027validate\u0027: {\u0027type:subnet_or_none\u0027: None},"},{"line_number":46,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":47,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":48,"context_line":"                      \u0027validate\u0027: {"},{"line_number":49,"context_line":"                          \u0027type:string\u0027: db_const.PROJECT_ID_FIELD_SIZE},"},{"line_number":50,"context_line":"                      \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_621a846f","line":47,"range":{"start_line":47,"start_character":8,"end_line":47,"end_character":19},"updated":"2018-05-30 18:09:45.000000000","message":"why not project_id  ?","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6cc58169bd5deff64130df3fb71e4250e1ee9e77","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        \u0027cidr\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":45,"context_line":"                 \u0027validate\u0027: {\u0027type:subnet_or_none\u0027: None},"},{"line_number":46,"context_line":"                 \u0027is_visible\u0027: True},"},{"line_number":47,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":48,"context_line":"                      \u0027validate\u0027: {"},{"line_number":49,"context_line":"                          \u0027type:string\u0027: db_const.PROJECT_ID_FIELD_SIZE},"},{"line_number":50,"context_line":"                      \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_90578027","line":47,"range":{"start_line":47,"start_character":8,"end_line":47,"end_character":19},"in_reply_to":"5f7c97a3_621a846f","updated":"2018-06-05 20:41:33.000000000","message":"Done","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"830293197f2dac3041d0e918dabf50171796a375","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"5f7c97a3_ae09a684","updated":"2018-06-08 21:46:40.000000000","message":"NOTE: COLLECTION_NAME is missing, its just a reminder, wouldn\u0027t matter as I see its addressed in neutron-lib patch","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"7fe565ae2f66a082d011135646b7617848f5c384","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"5f7c97a3_a6f8cb49","in_reply_to":"5f7c97a3_ae09a684","updated":"2018-06-11 17:51:49.000000000","message":"Done","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"e4091741db16340d3cedb8f20f6c82466df99ca3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"\"\"\""},{"line_number":14,"context_line":"This module should be deleted once neutron-lib containing"},{"line_number":15,"context_line":"https://review.openstack.org/#/c/556674/ change is released."},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron_lib.api.definitions import l3"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_ee98a8cc","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":60},"updated":"2018-07-19 23:53:08.000000000","message":"This already has been released so we can remove.","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"c8ff49a2327dc3a645794911c01202582726f79e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"\"\"\""},{"line_number":14,"context_line":"This module should be deleted once neutron-lib containing"},{"line_number":15,"context_line":"https://review.openstack.org/#/c/556674/ change is released."},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron_lib.api.definitions import l3"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_65b4a481","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":60},"in_reply_to":"5f7c97a3_ee98a8cc","updated":"2018-07-20 17:11:23.000000000","message":"+1","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8bb757dc32a93de74edece923352f642716d73bd","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"\"\"\""},{"line_number":14,"context_line":"This module should be deleted once neutron-lib containing"},{"line_number":15,"context_line":"https://review.openstack.org/#/c/556674/ change is released."},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron_lib.api.definitions import l3"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_33027609","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":60},"in_reply_to":"5f7c97a3_ee98a8cc","updated":"2018-07-20 18:06:59.000000000","message":"Done","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"}],"neutron/extensions/floatingip_pools.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"acd63a10e474093a51907e457e9eb7bd6d0eddd9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2017 Fujitsu Limited"},{"line_number":2,"context_line":"# All rights reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_c23d98bb","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2018-05-30 18:09:45.000000000","message":"2018 ?","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6cc58169bd5deff64130df3fb71e4250e1ee9e77","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2017 Fujitsu Limited"},{"line_number":2,"context_line":"# All rights reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_b054fc22","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"in_reply_to":"5f7c97a3_c23d98bb","updated":"2018-06-05 20:41:33.000000000","message":"Done","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"acd63a10e474093a51907e457e9eb7bd6d0eddd9","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @classmethod"},{"line_number":71,"context_line":"    def get_plugin_type(cls):"},{"line_number":72,"context_line":"        return \u0027FLOATINGIPPOOL\u0027"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @abc.abstractmethod"},{"line_number":75,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_a242dc3c","line":72,"range":{"start_line":72,"start_character":15,"end_line":72,"end_character":31},"updated":"2018-05-30 18:09:45.000000000","message":"should be a constant, later be homed to neutron-lib.","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6cc58169bd5deff64130df3fb71e4250e1ee9e77","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @classmethod"},{"line_number":71,"context_line":"    def get_plugin_type(cls):"},{"line_number":72,"context_line":"        return \u0027FLOATINGIPPOOL\u0027"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @abc.abstractmethod"},{"line_number":75,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_901a206d","line":72,"range":{"start_line":72,"start_character":15,"end_line":72,"end_character":31},"in_reply_to":"5f7c97a3_a242dc3c","updated":"2018-06-05 20:41:33.000000000","message":"The constant is defined in https://review.openstack.org/#/c/556674/6/neutron_lib/plugins/constants.py . Need to wait for a newer release of neutron-lib in order to consume the constant defined in there.","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"156f3219faee9c91a5cdd53f733fcf703427328b","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @classmethod"},{"line_number":68,"context_line":"    def get_plugin_type(cls):"},{"line_number":69,"context_line":"        return \u0027FLOATINGIPPOOL\u0027"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @abc.abstractmethod"},{"line_number":72,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_ad00fa01","line":69,"range":{"start_line":69,"start_character":15,"end_line":69,"end_character":31},"updated":"2018-06-07 07:47:44.000000000","message":"You are using it in 2 places at least (here and in L42). Maybe define it as constant?","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"976a1f9687968fd96546e8dfee498ee3137c1894","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @classmethod"},{"line_number":68,"context_line":"    def get_plugin_type(cls):"},{"line_number":69,"context_line":"        return \u0027FLOATINGIPPOOL\u0027"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @abc.abstractmethod"},{"line_number":72,"context_line":"    def get_floatingip_pools(self, context, filters\u003dNone, fields\u003dNone,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_da04e1c8","line":69,"range":{"start_line":69,"start_character":15,"end_line":69,"end_character":31},"in_reply_to":"5f7c97a3_ad00fa01","updated":"2018-06-08 20:26:38.000000000","message":"The constant is defined in neutron-lib: https://review.openstack.org/#/c/556674/7/neutron_lib/plugins/constants.py . That patch needs to be released first before we consume it from here.","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"c8ff49a2327dc3a645794911c01202582726f79e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        super(Floatingip_pools, self).update_attributes_map("},{"line_number":50,"context_line":"            attributes, extension_attrs_map\u003dapidef.RESOURCE_ATTRIBUTE_MAP)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def get_extended_resources(self, version):"},{"line_number":53,"context_line":"        if version \u003d\u003d \"2.0\":"},{"line_number":54,"context_line":"            return dict(list(apidef.RESOURCE_ATTRIBUTE_MAP.items()))"},{"line_number":55,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_65426469","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":30},"updated":"2018-07-20 17:11:23.000000000","message":"Why do we need to extend this method, isn\u0027t the one in the parent class [1] doing the same thing??\n\n\n\n[1] https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/extensions.py#L224","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8bb757dc32a93de74edece923352f642716d73bd","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        super(Floatingip_pools, self).update_attributes_map("},{"line_number":50,"context_line":"            attributes, extension_attrs_map\u003dapidef.RESOURCE_ATTRIBUTE_MAP)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def get_extended_resources(self, version):"},{"line_number":53,"context_line":"        if version \u003d\u003d \"2.0\":"},{"line_number":54,"context_line":"            return dict(list(apidef.RESOURCE_ATTRIBUTE_MAP.items()))"},{"line_number":55,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_f30f1e2c","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":30},"in_reply_to":"5f7c97a3_65426469","updated":"2018-07-20 18:06:59.000000000","message":"Done","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"684528cc9df239b283418d9372eba93e8e43a37c","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        return resources"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def update_attributes_map(self, attributes, extension_attrs_map\u003dNone):"},{"line_number":50,"context_line":"        super(Floatingip_pools, self).update_attributes_map("},{"line_number":51,"context_line":"            attributes, extension_attrs_map\u003dapidef.RESOURCE_ATTRIBUTE_MAP)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_b1b94217","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":29},"updated":"2018-07-25 14:26:24.000000000","message":"Is this really needed?\nDoesn\u0027t the one in the base class do the same thing: https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/extensions.py#L259","commit_id":"7feb2607e088bc765e8595149c03e55b43fb1397"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8580e62a6b220da2ba0ab76b893dc2130d268a82","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        return resources"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def update_attributes_map(self, attributes, extension_attrs_map\u003dNone):"},{"line_number":50,"context_line":"        super(Floatingip_pools, self).update_attributes_map("},{"line_number":51,"context_line":"            attributes, extension_attrs_map\u003dapidef.RESOURCE_ATTRIBUTE_MAP)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_21432042","line":49,"range":{"start_line":49,"start_character":8,"end_line":49,"end_character":29},"in_reply_to":"5f7c97a3_b1b94217","updated":"2018-07-31 19:45:53.000000000","message":"Done","commit_id":"7feb2607e088bc765e8595149c03e55b43fb1397"}],"neutron/plugins/common/constants.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"156f3219faee9c91a5cdd53f733fcf703427328b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \u0027metering\u0027: p_const.METERING,"},{"line_number":27,"context_line":"    \u0027router\u0027: p_const.L3,"},{"line_number":28,"context_line":"    \u0027qos\u0027: p_const.QOS,"},{"line_number":29,"context_line":"    \u0027floatingip-pools\u0027: \u0027FLOATINGIPPOOL\u0027,"},{"line_number":30,"context_line":"}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Maps default service plugins entry points to their extension aliases"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_0d11ee53","line":29,"range":{"start_line":29,"start_character":24,"end_line":29,"end_character":40},"updated":"2018-06-07 07:47:44.000000000","message":"and also here :)","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"976a1f9687968fd96546e8dfee498ee3137c1894","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \u0027metering\u0027: p_const.METERING,"},{"line_number":27,"context_line":"    \u0027router\u0027: p_const.L3,"},{"line_number":28,"context_line":"    \u0027qos\u0027: p_const.QOS,"},{"line_number":29,"context_line":"    \u0027floatingip-pools\u0027: \u0027FLOATINGIPPOOL\u0027,"},{"line_number":30,"context_line":"}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Maps default service plugins entry points to their extension aliases"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_fa099ddc","line":29,"range":{"start_line":29,"start_character":24,"end_line":29,"end_character":40},"in_reply_to":"5f7c97a3_0d11ee53","updated":"2018-06-08 20:26:38.000000000","message":"Ditto","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"c8ff49a2327dc3a645794911c01202582726f79e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \u0027metering\u0027: p_const.METERING,"},{"line_number":27,"context_line":"    \u0027router\u0027: p_const.L3,"},{"line_number":28,"context_line":"    \u0027qos\u0027: p_const.QOS,"},{"line_number":29,"context_line":"    \u0027floatingip-pools\u0027: \u0027FLOATINGIPPOOL\u0027,"},{"line_number":30,"context_line":"}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Maps default service plugins entry points to their extension aliases"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_e54d1493","line":29,"range":{"start_line":29,"start_character":25,"end_line":29,"end_character":39},"updated":"2018-07-20 17:11:23.000000000","message":"IMO this should be a constant... ideally in neutron_lib.plugins.constants","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8bb757dc32a93de74edece923352f642716d73bd","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \u0027metering\u0027: p_const.METERING,"},{"line_number":27,"context_line":"    \u0027router\u0027: p_const.L3,"},{"line_number":28,"context_line":"    \u0027qos\u0027: p_const.QOS,"},{"line_number":29,"context_line":"    \u0027floatingip-pools\u0027: \u0027FLOATINGIPPOOL\u0027,"},{"line_number":30,"context_line":"}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Maps default service plugins entry points to their extension aliases"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_130bba21","line":29,"range":{"start_line":29,"start_character":25,"end_line":29,"end_character":39},"in_reply_to":"5f7c97a3_e54d1493","updated":"2018-07-20 18:06:59.000000000","message":"Done","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9f7f68face35b2e88ec8972d8f0b275c6419b358","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \u0027metering\u0027: p_const.METERING,"},{"line_number":27,"context_line":"    \u0027router\u0027: p_const.L3,"},{"line_number":28,"context_line":"    \u0027qos\u0027: p_const.QOS,"},{"line_number":29,"context_line":"    \u0027floatingip-pools\u0027: p_const.FLOATINGIPPOOL,"},{"line_number":30,"context_line":"}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Maps default service plugins entry points to their extension aliases"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_6041d063","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":21},"updated":"2018-09-24 13:51:39.000000000","message":"Seems this `s` is not needed.","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"72bdf427eeec509f242adae94a93cc97f8879a0a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \u0027metering\u0027: p_const.METERING,"},{"line_number":27,"context_line":"    \u0027router\u0027: p_const.L3,"},{"line_number":28,"context_line":"    \u0027qos\u0027: p_const.QOS,"},{"line_number":29,"context_line":"    \u0027floatingip-pools\u0027: p_const.FLOATINGIPPOOL,"},{"line_number":30,"context_line":"}"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Maps default service plugins entry points to their extension aliases"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_e89349a3","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":21},"in_reply_to":"3f79a3b5_6041d063","updated":"2018-09-26 21:30:17.000000000","message":"I removed this since we switch to router plugin approach.","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"}],"neutron/services/floatingip_pools/__init__.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"156f3219faee9c91a5cdd53f733fcf703427328b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"5f7c97a3_6d7182a8","line":1,"updated":"2018-06-07 07:47:44.000000000","message":"It is small service plugin. Do we really need to create separate directory for it?","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"976a1f9687968fd96546e8dfee498ee3137c1894","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"5f7c97a3_9a0ae9ce","line":1,"in_reply_to":"5f7c97a3_6d7182a8","updated":"2018-06-08 20:26:38.000000000","message":"But all other plugins are in their own directories ..","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"}],"neutron/services/floatingip_pools/floatingip_pool_plugin.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"c8ff49a2327dc3a645794911c01202582726f79e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"class FloatingIPPoolPlugin(fip_pools_db.FloatingIPPoolsDbMixin):"},{"line_number":17,"context_line":"    \"\"\"Implementation of the Neutron floating IP pool api plugin.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    supported_extension_aliases \u003d [\u0027floatingip-pools\u0027]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    __native_pagination_support \u003d True"},{"line_number":22,"context_line":"    __native_sorting_support \u003d True"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_453408fa","line":19,"range":{"start_line":19,"start_character":35,"end_line":19,"end_character":53},"updated":"2018-07-20 17:11:23.000000000","message":"Why not just use the ALIAS from the API definition itself?","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8bb757dc32a93de74edece923352f642716d73bd","unresolved":false,"context_lines":[{"line_number":16,"context_line":"class FloatingIPPoolPlugin(fip_pools_db.FloatingIPPoolsDbMixin):"},{"line_number":17,"context_line":"    \"\"\"Implementation of the Neutron floating IP pool api plugin.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    supported_extension_aliases \u003d [\u0027floatingip-pools\u0027]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    __native_pagination_support \u003d True"},{"line_number":22,"context_line":"    __native_sorting_support \u003d True"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_b3152640","line":19,"range":{"start_line":19,"start_character":35,"end_line":19,"end_character":53},"in_reply_to":"5f7c97a3_453408fa","updated":"2018-07-20 18:06:59.000000000","message":"Done","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"}],"neutron/tests/etc/policy.json":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9f7f68face35b2e88ec8972d8f0b275c6419b358","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    \"create_floatingip\": \"rule:regular_user\","},{"line_number":151,"context_line":"    \"create_floatingip:floating_ip_address\": \"rule:admin_only\","},{"line_number":152,"context_line":"    \"get_floatingip\": \"rule:admin_or_owner\","},{"line_number":153,"context_line":"    \"get_floatingip_pool\": \"rule:regular_user\","},{"line_number":154,"context_line":"    \"update_floatingip\": \"rule:admin_or_owner\","},{"line_number":155,"context_line":"    \"delete_floatingip\": \"rule:admin_or_owner\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":25,"id":"3f79a3b5_3b39c9ce","line":153,"range":{"start_line":153,"start_character":20,"end_line":153,"end_character":24},"updated":"2018-09-24 13:51:39.000000000","message":"pools?","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"72bdf427eeec509f242adae94a93cc97f8879a0a","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    \"create_floatingip\": \"rule:regular_user\","},{"line_number":151,"context_line":"    \"create_floatingip:floating_ip_address\": \"rule:admin_only\","},{"line_number":152,"context_line":"    \"get_floatingip\": \"rule:admin_or_owner\","},{"line_number":153,"context_line":"    \"get_floatingip_pool\": \"rule:regular_user\","},{"line_number":154,"context_line":"    \"update_floatingip\": \"rule:admin_or_owner\","},{"line_number":155,"context_line":"    \"delete_floatingip\": \"rule:admin_or_owner\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":25,"id":"3f79a3b5_68e5f93d","line":153,"range":{"start_line":153,"start_character":20,"end_line":153,"end_character":24},"in_reply_to":"3f79a3b5_3b39c9ce","updated":"2018-09-26 21:30:17.000000000","message":"The policy check is looking for \u0027pool\u0027 so I cannot change it: https://github.com/openstack/neutron/blob/56bcb6fe0aa545e5c6d4e208e9a0321929a353a4/neutron/api/v2/base.py#L317","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3c2910d9cb98878636ac76c249546216ab80bc60","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    \"create_floatingip\": \"rule:regular_user\","},{"line_number":151,"context_line":"    \"create_floatingip:floating_ip_address\": \"rule:admin_only\","},{"line_number":152,"context_line":"    \"get_floatingip\": \"rule:admin_or_owner\","},{"line_number":153,"context_line":"    \"get_floatingip_pool\": \"rule:regular_user\","},{"line_number":154,"context_line":"    \"update_floatingip\": \"rule:admin_or_owner\","},{"line_number":155,"context_line":"    \"delete_floatingip\": \"rule:admin_or_owner\","},{"line_number":156,"context_line":""}],"source_content_type":"application/json","patch_set":27,"id":"3f79a3b5_3a42dc69","line":153,"range":{"start_line":153,"start_character":20,"end_line":153,"end_character":24},"updated":"2018-09-27 07:44:28.000000000","message":"shouldn\u0027t be \"pools\" here?","commit_id":"b685632f4c088d203f56aaa69537a86f2a0c466e"}],"neutron/tests/unit/services/floatingip_pools/test_floatingip_pool_plugin.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6799fd70185c314b66e0b4dc12bea821d9960e61","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            fip_pools \u003d self.fip_pool_plugin.get_floatingip_pools(self.ctxt)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        expected_fip_pools \u003d [{\u0027cidr\u0027: \u002710.0.0.0/24\u0027,"},{"line_number":66,"context_line":"                               \u0027id\u0027: \u0027fake_subnet\u0027,"},{"line_number":67,"context_line":"                               \u0027name\u0027: \u0027fake_subnet_v4\u0027,"},{"line_number":68,"context_line":"                               \u0027network_id\u0027: \u0027fake_net\u0027,"},{"line_number":69,"context_line":"                               \u0027project_id\u0027: \u0027fake_tenant\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_d3aab517","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":35},"updated":"2018-05-01 19:48:13.000000000","message":"See my comment to https://review.openstack.org/#/c/556674/3/neutron_lib/api/definitions/floatingip_pools.py@30","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"87ff48862ec71e8bc171f5550d9d7e825b8582ad","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            fip_pools \u003d self.fip_pool_plugin.get_floatingip_pools(self.ctxt)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        expected_fip_pools \u003d [{\u0027cidr\u0027: \u002710.0.0.0/24\u0027,"},{"line_number":66,"context_line":"                               \u0027id\u0027: \u0027fake_subnet\u0027,"},{"line_number":67,"context_line":"                               \u0027name\u0027: \u0027fake_subnet_v4\u0027,"},{"line_number":68,"context_line":"                               \u0027network_id\u0027: \u0027fake_net\u0027,"},{"line_number":69,"context_line":"                               \u0027project_id\u0027: \u0027fake_tenant\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_731cf2c0","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":35},"in_reply_to":"9f6a8fd7_d3aab517","updated":"2018-05-02 17:55:05.000000000","message":"Done","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6799fd70185c314b66e0b4dc12bea821d9960e61","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        expected_fip_pools \u003d [{\u0027cidr\u0027: \u002710.0.0.0/24\u0027,"},{"line_number":66,"context_line":"                               \u0027id\u0027: \u0027fake_subnet\u0027,"},{"line_number":67,"context_line":"                               \u0027name\u0027: \u0027fake_subnet_v4\u0027,"},{"line_number":68,"context_line":"                               \u0027network_id\u0027: \u0027fake_net\u0027,"},{"line_number":69,"context_line":"                               \u0027project_id\u0027: \u0027fake_tenant\u0027,"},{"line_number":70,"context_line":"                               \u0027tenant_id\u0027: \u0027fake_tenant\u0027}]"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_736f29fc","line":67,"range":{"start_line":67,"start_character":31,"end_line":67,"end_character":37},"updated":"2018-05-01 19:48:13.000000000","message":"See my comment to https://review.openstack.org/#/c/556674/3/neutron_lib/api/definitions/floatingip_pools.py@33","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"87ff48862ec71e8bc171f5550d9d7e825b8582ad","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        expected_fip_pools \u003d [{\u0027cidr\u0027: \u002710.0.0.0/24\u0027,"},{"line_number":66,"context_line":"                               \u0027id\u0027: \u0027fake_subnet\u0027,"},{"line_number":67,"context_line":"                               \u0027name\u0027: \u0027fake_subnet_v4\u0027,"},{"line_number":68,"context_line":"                               \u0027network_id\u0027: \u0027fake_net\u0027,"},{"line_number":69,"context_line":"                               \u0027project_id\u0027: \u0027fake_tenant\u0027,"},{"line_number":70,"context_line":"                               \u0027tenant_id\u0027: \u0027fake_tenant\u0027}]"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f6a8fd7_d3829ec8","line":67,"range":{"start_line":67,"start_character":31,"end_line":67,"end_character":37},"in_reply_to":"9f6a8fd7_736f29fc","updated":"2018-05-02 17:55:05.000000000","message":"Done","commit_id":"bb0c8f439d0efe6aa199e47667696a8db693b724"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"acd63a10e474093a51907e457e9eb7bd6d0eddd9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2017 Fujitsu Limited"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_02a63010","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":21},"updated":"2018-05-30 18:09:45.000000000","message":"2018","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6cc58169bd5deff64130df3fb71e4250e1ee9e77","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2017 Fujitsu Limited"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_502fa8a6","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":21},"in_reply_to":"5f7c97a3_02a63010","updated":"2018-06-05 20:41:33.000000000","message":"Done","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"acd63a10e474093a51907e457e9eb7bd6d0eddd9","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_floatingip_pools(self):"},{"line_number":44,"context_line":"        fake_network \u003d mock.Mock(id\u003d\u0027fake_net\u0027)"},{"line_number":45,"context_line":"        fake_subnet \u003d mock.Mock(id\u003d\u0027fake_subnet\u0027,"},{"line_number":46,"context_line":"                                network_id\u003d\u0027fake_net\u0027,"},{"line_number":47,"context_line":"                                cidr\u003d\u002710.0.0.0/24\u0027,"},{"line_number":48,"context_line":"                                tenant_id\u003d\u0027fake_tenant\u0027)"},{"line_number":49,"context_line":"        fake_subnet.name \u003d \u0027fake_subnet_v4\u0027"},{"line_number":50,"context_line":"        with mock.patch.object("},{"line_number":51,"context_line":"            subnet_obj.Subnet, \u0027get_objects\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_42d7484c","line":48,"range":{"start_line":44,"start_character":7,"end_line":48,"end_character":56},"updated":"2018-05-30 18:09:45.000000000","message":"uuids can be used to reflect the original type.","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6cc58169bd5deff64130df3fb71e4250e1ee9e77","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_floatingip_pools(self):"},{"line_number":44,"context_line":"        fake_network \u003d mock.Mock(id\u003d\u0027fake_net\u0027)"},{"line_number":45,"context_line":"        fake_subnet \u003d mock.Mock(id\u003d\u0027fake_subnet\u0027,"},{"line_number":46,"context_line":"                                network_id\u003d\u0027fake_net\u0027,"},{"line_number":47,"context_line":"                                cidr\u003d\u002710.0.0.0/24\u0027,"},{"line_number":48,"context_line":"                                tenant_id\u003d\u0027fake_tenant\u0027)"},{"line_number":49,"context_line":"        fake_subnet.name \u003d \u0027fake_subnet_v4\u0027"},{"line_number":50,"context_line":"        with mock.patch.object("},{"line_number":51,"context_line":"            subnet_obj.Subnet, \u0027get_objects\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_703424fc","line":48,"range":{"start_line":44,"start_character":7,"end_line":48,"end_character":56},"in_reply_to":"5f7c97a3_42d7484c","updated":"2018-06-05 20:41:33.000000000","message":"Done","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"156f3219faee9c91a5cdd53f733fcf703427328b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"             \".FloatingIPPoolPlugin\"])"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        manager.init()"},{"line_number":37,"context_line":"        self.fip_pool_plugin \u003d directory.get_plugin(\"FLOATINGIPPOOL\")"},{"line_number":38,"context_line":"        self.ctxt \u003d context.Context(\u0027admin\u0027, \u0027fake_tenant\u0027)"},{"line_number":39,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_2d0cea37","line":37,"range":{"start_line":37,"start_character":52,"end_line":37,"end_character":68},"updated":"2018-06-07 07:47:44.000000000","message":"and here :)","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"830293197f2dac3041d0e918dabf50171796a375","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        cfg.CONF.set_override("},{"line_number":31,"context_line":"            \"core_plugin\", \"neutron.db.db_base_plugin_v2.NeutronDbPluginV2\")"},{"line_number":32,"context_line":"        cfg.CONF.set_override(\"service_plugins\","},{"line_number":33,"context_line":"            [\"neutron.services.floatingip_pools.floatingip_pool_plugin\""},{"line_number":34,"context_line":"             \".FloatingIPPoolPlugin\"])"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        manager.init()"},{"line_number":37,"context_line":"        self.fip_pool_plugin \u003d directory.get_plugin(\"FLOATINGIPPOOL\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_2e1d96bd","line":34,"range":{"start_line":32,"start_character":7,"end_line":34,"end_character":38},"updated":"2018-06-08 21:46:40.000000000","message":"I think this will overwrite the service_plugin, which may loose other service_plugins, it should just append floatingip_pool_plugin, not overwrite","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"7fe565ae2f66a082d011135646b7617848f5c384","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        cfg.CONF.set_override("},{"line_number":31,"context_line":"            \"core_plugin\", \"neutron.db.db_base_plugin_v2.NeutronDbPluginV2\")"},{"line_number":32,"context_line":"        cfg.CONF.set_override(\"service_plugins\","},{"line_number":33,"context_line":"            [\"neutron.services.floatingip_pools.floatingip_pool_plugin\""},{"line_number":34,"context_line":"             \".FloatingIPPoolPlugin\"])"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        manager.init()"},{"line_number":37,"context_line":"        self.fip_pool_plugin \u003d directory.get_plugin(\"FLOATINGIPPOOL\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_a6a68b53","line":34,"range":{"start_line":32,"start_character":7,"end_line":34,"end_character":38},"in_reply_to":"5f7c97a3_2e1d96bd","updated":"2018-06-11 17:51:49.000000000","message":"In these test cases, I don\u0027t need service_plugins other than floatingip-pools.","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"830293197f2dac3041d0e918dabf50171796a375","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        manager.init()"},{"line_number":37,"context_line":"        self.fip_pool_plugin \u003d directory.get_plugin(\"FLOATINGIPPOOL\")"},{"line_number":38,"context_line":"        self.ctxt \u003d context.Context(\u0027admin\u0027, \u0027fake_tenant\u0027)"},{"line_number":39,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def test_get_floatingip_pools(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_ee78fef8","line":38,"range":{"start_line":38,"start_character":46,"end_line":38,"end_character":57},"updated":"2018-06-08 21:46:40.000000000","message":"use uuid to reflect original type ?","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"7fe565ae2f66a082d011135646b7617848f5c384","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        manager.init()"},{"line_number":37,"context_line":"        self.fip_pool_plugin \u003d directory.get_plugin(\"FLOATINGIPPOOL\")"},{"line_number":38,"context_line":"        self.ctxt \u003d context.Context(\u0027admin\u0027, \u0027fake_tenant\u0027)"},{"line_number":39,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def test_get_floatingip_pools(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_e67563cd","line":38,"range":{"start_line":38,"start_character":46,"end_line":38,"end_character":57},"in_reply_to":"5f7c97a3_ee78fef8","updated":"2018-06-11 17:51:49.000000000","message":"In these test cases, I don\u0027t need a real uuid to test. If others feel it is necessary to mock a real uuid, I can amend it.","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"830293197f2dac3041d0e918dabf50171796a375","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                network_id\u003dfake_network_id,"},{"line_number":47,"context_line":"                                cidr\u003d\u002710.0.0.0/24\u0027,"},{"line_number":48,"context_line":"                                ip_version\u003dlib_const.IP_VERSION_4,"},{"line_number":49,"context_line":"                                tenant_id\u003d\u0027fake_tenant\u0027)"},{"line_number":50,"context_line":"        fake_subnet.name \u003d \u0027fake_subnet_v4\u0027"},{"line_number":51,"context_line":"        with mock.patch.object("},{"line_number":52,"context_line":"            subnet_obj.Subnet, \u0027get_objects\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_8e694a26","line":49,"range":{"start_line":49,"start_character":42,"end_line":49,"end_character":55},"updated":"2018-06-08 21:46:40.000000000","message":"2 things here, first use uuid, second I guess project_id should be better, since keystonev3 that\u0027s the norm.","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"7fe565ae2f66a082d011135646b7617848f5c384","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                network_id\u003dfake_network_id,"},{"line_number":47,"context_line":"                                cidr\u003d\u002710.0.0.0/24\u0027,"},{"line_number":48,"context_line":"                                ip_version\u003dlib_const.IP_VERSION_4,"},{"line_number":49,"context_line":"                                tenant_id\u003d\u0027fake_tenant\u0027)"},{"line_number":50,"context_line":"        fake_subnet.name \u003d \u0027fake_subnet_v4\u0027"},{"line_number":51,"context_line":"        with mock.patch.object("},{"line_number":52,"context_line":"            subnet_obj.Subnet, \u0027get_objects\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_26411b64","line":49,"range":{"start_line":49,"start_character":42,"end_line":49,"end_character":55},"in_reply_to":"5f7c97a3_8e694a26","updated":"2018-06-11 17:51:49.000000000","message":"Added a \u0027project_id\u0027. The \u0027tenant_id\u0027 needs to be kept in order to mock correctly.","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1824b6df88d6b8f1bf3e2cc9337f92d8a09ebc5a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                                cidr\u003d\u002710.0.0.0/24\u0027,"},{"line_number":48,"context_line":"                                ip_version\u003dlib_const.IP_VERSION_4,"},{"line_number":49,"context_line":"                                tenant_id\u003d\u0027fake_tenant\u0027,"},{"line_number":50,"context_line":"                                project_id\u003d\u0027fake_tenant\u0027)"},{"line_number":51,"context_line":"        fake_subnet.name \u003d \u0027fake_subnet_v4\u0027"},{"line_number":52,"context_line":"        with mock.patch.object("},{"line_number":53,"context_line":"            subnet_obj.Subnet, \u0027get_objects\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_363b769c","line":50,"updated":"2018-06-12 13:54:05.000000000","message":"maybe You could add also IPv6 subnet and check that it isn\u0027t included when fip IPv6 is not supported and is included when such FIP are supported","commit_id":"e0f823d23aa32ca1fe8c9bcb67918aba99ecdc2f"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"ae7092f1be9062a20dd93dca1a0808c283352d1c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                                cidr\u003d\u002710.0.0.0/24\u0027,"},{"line_number":48,"context_line":"                                ip_version\u003dlib_const.IP_VERSION_4,"},{"line_number":49,"context_line":"                                tenant_id\u003d\u0027fake_tenant\u0027,"},{"line_number":50,"context_line":"                                project_id\u003d\u0027fake_tenant\u0027)"},{"line_number":51,"context_line":"        fake_subnet.name \u003d \u0027fake_subnet_v4\u0027"},{"line_number":52,"context_line":"        with mock.patch.object("},{"line_number":53,"context_line":"            subnet_obj.Subnet, \u0027get_objects\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_3efa5fb9","line":50,"in_reply_to":"5f7c97a3_363b769c","updated":"2018-06-12 23:11:06.000000000","message":"Done","commit_id":"e0f823d23aa32ca1fe8c9bcb67918aba99ecdc2f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9b730a2e8074884ae026bc4a891374c1ce1427ad","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        ) as mock_context_elevated:"},{"line_number":97,"context_line":"            fip_pools \u003d self.fip_pool_plugin.get_floatingip_pools(self.ctxt)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        self.assertEqual([], fip_pools)"},{"line_number":100,"context_line":"        mock_subnet_get_objects.assert_called_once_with("},{"line_number":101,"context_line":"            self.admin_ctxt, _pager\u003dmock.ANY, network_id\u003d[fake_network_id])"},{"line_number":102,"context_line":"        mock_extnet_get_objects.assert_called_once_with(self.ctxt)"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_ee28a886","line":99,"updated":"2018-06-13 11:30:06.000000000","message":"You can easily mock _is_ipv6_supported to be True and test also if then You have pools which are necessary","commit_id":"95aa364564122156aa9b7901b2d7c6f58d834acf"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"67459b7db7f1c115a17c366eafe9a4fcc02ffbc3","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        ) as mock_context_elevated:"},{"line_number":97,"context_line":"            fip_pools \u003d self.fip_pool_plugin.get_floatingip_pools(self.ctxt)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        self.assertEqual([], fip_pools)"},{"line_number":100,"context_line":"        mock_subnet_get_objects.assert_called_once_with("},{"line_number":101,"context_line":"            self.admin_ctxt, _pager\u003dmock.ANY, network_id\u003d[fake_network_id])"},{"line_number":102,"context_line":"        mock_extnet_get_objects.assert_called_once_with(self.ctxt)"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_c506e686","line":99,"in_reply_to":"5f7c97a3_ee28a886","updated":"2018-06-13 15:32:49.000000000","message":"Done","commit_id":"95aa364564122156aa9b7901b2d7c6f58d834acf"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"351c9e33f693ac392482dadb2be7bc8563891042","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_floatingip_pools(self):"},{"line_number":44,"context_line":"        fake_network_id \u003d \u002771d8126b-8411-44ac-b8f5-2d9aca7b99f2\u0027"},{"line_number":45,"context_line":"        fake_subnet_id \u003d \u002729198a50-01d8-4c79-9c13-9f8c313eb772\u0027"},{"line_number":46,"context_line":"        fake_ext_network \u003d mock.Mock(network_id\u003dfake_network_id)"},{"line_number":47,"context_line":"        fake_subnet \u003d mock.Mock(id\u003dfake_subnet_id,"},{"line_number":48,"context_line":"                                network_id\u003dfake_network_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_600be47c","line":45,"range":{"start_line":44,"start_character":8,"end_line":45,"end_character":63},"updated":"2018-06-18 18:41:20.000000000","message":"optionally uuidutils from oslo can used to generate uuids","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8bb757dc32a93de74edece923352f642716d73bd","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_floatingip_pools(self):"},{"line_number":44,"context_line":"        fake_network_id \u003d \u002771d8126b-8411-44ac-b8f5-2d9aca7b99f2\u0027"},{"line_number":45,"context_line":"        fake_subnet_id \u003d \u002729198a50-01d8-4c79-9c13-9f8c313eb772\u0027"},{"line_number":46,"context_line":"        fake_ext_network \u003d mock.Mock(network_id\u003dfake_network_id)"},{"line_number":47,"context_line":"        fake_subnet \u003d mock.Mock(id\u003dfake_subnet_id,"},{"line_number":48,"context_line":"                                network_id\u003dfake_network_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_73254ead","line":45,"range":{"start_line":44,"start_character":8,"end_line":45,"end_character":63},"in_reply_to":"5f7c97a3_600be47c","updated":"2018-07-20 18:06:59.000000000","message":"Done","commit_id":"45b591de4fc55fdfa3c859e7c9e049671fff563d"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"9ee97a7c40d6cbdcbfe5c25fb4540bcd0159aff0","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.ctxt \u003d context.Context(\u0027admin\u0027, \u0027fake_tenant\u0027)"},{"line_number":42,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_get_floatingip_pools(self):"},{"line_number":45,"context_line":"        fake_network_id \u003d uuidutils.generate_uuid()"},{"line_number":46,"context_line":"        fake_subnet_id \u003d uuidutils.generate_uuid()"},{"line_number":47,"context_line":"        fake_ext_network \u003d mock.Mock(network_id\u003dfake_network_id)"},{"line_number":48,"context_line":"        fake_subnet \u003d mock.Mock(id\u003dfake_subnet_id,"},{"line_number":49,"context_line":"                                network_id\u003dfake_network_id,"},{"line_number":50,"context_line":"                                cidr\u003d\u002710.0.0.0/24\u0027,"},{"line_number":51,"context_line":"                                ip_version\u003dlib_const.IP_VERSION_4,"},{"line_number":52,"context_line":"                                tenant_id\u003d\u0027fake_tenant\u0027,"},{"line_number":53,"context_line":"                                project_id\u003d\u0027fake_tenant\u0027)"},{"line_number":54,"context_line":"        fake_subnet.name \u003d \u0027fake_subnet_v4\u0027"},{"line_number":55,"context_line":"        with mock.patch.object("},{"line_number":56,"context_line":"            subnet_obj.Subnet, \u0027get_objects\u0027,"},{"line_number":57,"context_line":"            return_value\u003d[fake_subnet]"},{"line_number":58,"context_line":"        ) as mock_subnet_get_objects, mock.patch.object("},{"line_number":59,"context_line":"            net_obj.ExternalNetwork, \u0027get_objects\u0027,"},{"line_number":60,"context_line":"            return_value\u003d[fake_ext_network]"},{"line_number":61,"context_line":"        ) as mock_extnet_get_objects, mock.patch.object("},{"line_number":62,"context_line":"            self.ctxt, \u0027elevated\u0027,"},{"line_number":63,"context_line":"            return_value\u003dself.admin_ctxt"},{"line_number":64,"context_line":"        ) as mock_context_elevated:"},{"line_number":65,"context_line":"            fip_pools \u003d self.fip_pool_plugin.get_floatingip_pools(self.ctxt)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        expected_fip_pools \u003d [{\u0027cidr\u0027: \u002710.0.0.0/24\u0027,"},{"line_number":68,"context_line":"                               \u0027subnet_id\u0027: fake_subnet_id,"},{"line_number":69,"context_line":"                               \u0027subnet_name\u0027: \u0027fake_subnet_v4\u0027,"},{"line_number":70,"context_line":"                               \u0027network_id\u0027: fake_network_id,"},{"line_number":71,"context_line":"                               \u0027project_id\u0027: \u0027fake_tenant\u0027,"},{"line_number":72,"context_line":"                               \u0027tenant_id\u0027: \u0027fake_tenant\u0027}]"},{"line_number":73,"context_line":"        self.assertEqual(expected_fip_pools, fip_pools)"},{"line_number":74,"context_line":"        mock_subnet_get_objects.assert_called_once_with("},{"line_number":75,"context_line":"            self.admin_ctxt, _pager\u003dmock.ANY, network_id\u003d[fake_network_id])"},{"line_number":76,"context_line":"        mock_extnet_get_objects.assert_called_once_with(self.ctxt)"},{"line_number":77,"context_line":"        mock_context_elevated.assert_called_once_with()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @ddt.data(True, False)"},{"line_number":80,"context_line":"    def test_get_floatingip_pools_ipv6(self, fake_is_v6_supported):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_c82268b7","line":77,"range":{"start_line":44,"start_character":4,"end_line":77,"end_character":55},"updated":"2018-07-20 22:02:27.000000000","message":"I see lot of code is repeated b/w two test, which can be reduced,\n\nI\u0027d suggest to have a helper def _test_floating_ip_pools(ip_type\u003d\u0027IPV4\u0027) with ipv_type and use in both test cases ?\n\nalso another test case can be added when no fip pool exists.","commit_id":"13ea759b34985bd1a5b3e837fdc397f161411a3a"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"468616cc0cb8a1ff1075a1915e764658ff330737","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.ctxt \u003d context.Context(\u0027admin\u0027, \u0027fake_tenant\u0027)"},{"line_number":42,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_get_floatingip_pools(self):"},{"line_number":45,"context_line":"        fake_network_id \u003d uuidutils.generate_uuid()"},{"line_number":46,"context_line":"        fake_subnet_id \u003d uuidutils.generate_uuid()"},{"line_number":47,"context_line":"        fake_ext_network \u003d mock.Mock(network_id\u003dfake_network_id)"},{"line_number":48,"context_line":"        fake_subnet \u003d mock.Mock(id\u003dfake_subnet_id,"},{"line_number":49,"context_line":"                                network_id\u003dfake_network_id,"},{"line_number":50,"context_line":"                                cidr\u003d\u002710.0.0.0/24\u0027,"},{"line_number":51,"context_line":"                                ip_version\u003dlib_const.IP_VERSION_4,"},{"line_number":52,"context_line":"                                tenant_id\u003d\u0027fake_tenant\u0027,"},{"line_number":53,"context_line":"                                project_id\u003d\u0027fake_tenant\u0027)"},{"line_number":54,"context_line":"        fake_subnet.name \u003d \u0027fake_subnet_v4\u0027"},{"line_number":55,"context_line":"        with mock.patch.object("},{"line_number":56,"context_line":"            subnet_obj.Subnet, \u0027get_objects\u0027,"},{"line_number":57,"context_line":"            return_value\u003d[fake_subnet]"},{"line_number":58,"context_line":"        ) as mock_subnet_get_objects, mock.patch.object("},{"line_number":59,"context_line":"            net_obj.ExternalNetwork, \u0027get_objects\u0027,"},{"line_number":60,"context_line":"            return_value\u003d[fake_ext_network]"},{"line_number":61,"context_line":"        ) as mock_extnet_get_objects, mock.patch.object("},{"line_number":62,"context_line":"            self.ctxt, \u0027elevated\u0027,"},{"line_number":63,"context_line":"            return_value\u003dself.admin_ctxt"},{"line_number":64,"context_line":"        ) as mock_context_elevated:"},{"line_number":65,"context_line":"            fip_pools \u003d self.fip_pool_plugin.get_floatingip_pools(self.ctxt)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        expected_fip_pools \u003d [{\u0027cidr\u0027: \u002710.0.0.0/24\u0027,"},{"line_number":68,"context_line":"                               \u0027subnet_id\u0027: fake_subnet_id,"},{"line_number":69,"context_line":"                               \u0027subnet_name\u0027: \u0027fake_subnet_v4\u0027,"},{"line_number":70,"context_line":"                               \u0027network_id\u0027: fake_network_id,"},{"line_number":71,"context_line":"                               \u0027project_id\u0027: \u0027fake_tenant\u0027,"},{"line_number":72,"context_line":"                               \u0027tenant_id\u0027: \u0027fake_tenant\u0027}]"},{"line_number":73,"context_line":"        self.assertEqual(expected_fip_pools, fip_pools)"},{"line_number":74,"context_line":"        mock_subnet_get_objects.assert_called_once_with("},{"line_number":75,"context_line":"            self.admin_ctxt, _pager\u003dmock.ANY, network_id\u003d[fake_network_id])"},{"line_number":76,"context_line":"        mock_extnet_get_objects.assert_called_once_with(self.ctxt)"},{"line_number":77,"context_line":"        mock_context_elevated.assert_called_once_with()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @ddt.data(True, False)"},{"line_number":80,"context_line":"    def test_get_floatingip_pools_ipv6(self, fake_is_v6_supported):"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_3f9af0c3","line":77,"range":{"start_line":44,"start_character":4,"end_line":77,"end_character":55},"in_reply_to":"5f7c97a3_c82268b7","updated":"2018-07-24 20:18:46.000000000","message":"Done","commit_id":"13ea759b34985bd1a5b3e837fdc397f161411a3a"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"815e13982d2f405549be5272afbfd5f21eff10cb","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.ctxt \u003d context.Context(\u0027admin\u0027, \u0027fake_tenant\u0027)"},{"line_number":42,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_get_floatingip_pools(self):"},{"line_number":45,"context_line":"        self._test_get_floatingip_pools(lib_const.IP_VERSION_4, False)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @ddt.data(True, False)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_1a95c294","line":44,"range":{"start_line":44,"start_character":28,"end_line":44,"end_character":33},"updated":"2018-07-24 20:41:58.000000000","message":"pools_ipv4","commit_id":"7feb2607e088bc765e8595149c03e55b43fb1397"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"8580e62a6b220da2ba0ab76b893dc2130d268a82","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.ctxt \u003d context.Context(\u0027admin\u0027, \u0027fake_tenant\u0027)"},{"line_number":42,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_get_floatingip_pools(self):"},{"line_number":45,"context_line":"        self._test_get_floatingip_pools(lib_const.IP_VERSION_4, False)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @ddt.data(True, False)"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f7c97a3_017624a4","line":44,"range":{"start_line":44,"start_character":28,"end_line":44,"end_character":33},"in_reply_to":"5f7c97a3_1a95c294","updated":"2018-07-31 19:45:53.000000000","message":"Done","commit_id":"7feb2607e088bc765e8595149c03e55b43fb1397"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9f7f68face35b2e88ec8972d8f0b275c6419b358","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@ddt.ddt"},{"line_number":28,"context_line":"class TestFloatingIPPoolPlugin(base.BaseTestCase):"},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super(TestFloatingIPPoolPlugin, self).setUp()"},{"line_number":31,"context_line":"        self.setup_coreplugin(load_plugins\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_bb9b99c6","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":30},"updated":"2018-09-24 13:51:39.000000000","message":"Add a policy check case to valid the new get_floatingip_pools method?","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"72bdf427eeec509f242adae94a93cc97f8879a0a","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@ddt.ddt"},{"line_number":28,"context_line":"class TestFloatingIPPoolPlugin(base.BaseTestCase):"},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super(TestFloatingIPPoolPlugin, self).setUp()"},{"line_number":31,"context_line":"        self.setup_coreplugin(load_plugins\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_88d2d532","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":30},"in_reply_to":"3f79a3b5_bb9b99c6","updated":"2018-09-26 21:30:17.000000000","message":"OK, this might be a good idea but I couldn\u0027t find an existing example of doing that. Setup these test cases from scratch might be non-trivial and if so, it should be done in a separated patch.","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"73b4777edf18288d6731b9c4898197177fa41809","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        manager.init()"},{"line_number":40,"context_line":"        self.fip_pool_plugin \u003d directory.get_plugin(\"FLOATINGIPPOOL\")"},{"line_number":41,"context_line":"        self.ctxt \u003d context.Context(\u0027admin\u0027, \u0027fake_tenant\u0027)"},{"line_number":42,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_get_floatingip_pools_ipv4(self):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_46c9544f","line":41,"updated":"2018-09-24 08:16:38.000000000","message":"nit: maybe use some other name instead of \"admin\" here as below You have also elevated context and that may be confusing IMO","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"72bdf427eeec509f242adae94a93cc97f8879a0a","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        manager.init()"},{"line_number":40,"context_line":"        self.fip_pool_plugin \u003d directory.get_plugin(\"FLOATINGIPPOOL\")"},{"line_number":41,"context_line":"        self.ctxt \u003d context.Context(\u0027admin\u0027, \u0027fake_tenant\u0027)"},{"line_number":42,"context_line":"        self.admin_ctxt \u003d self.ctxt.elevated()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_get_floatingip_pools_ipv4(self):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f79a3b5_48dcbd44","line":41,"in_reply_to":"3f79a3b5_46c9544f","updated":"2018-09-26 21:30:17.000000000","message":"Done","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"}],"releasenotes/notes/add-floatingip-pool-api-6927362ef87fdbe5.yaml":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"acd63a10e474093a51907e457e9eb7bd6d0eddd9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for listing floating ip pools (subnets)."},{"line_number":5,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":6,"context_line":"    This API endpoint can return a list floating ip pools which are"},{"line_number":7,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."},{"line_number":8,"context_line":"    Users can use this API to find out the pool to create the floating IPs."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5f7c97a3_82fb20bc","line":8,"range":{"start_line":4,"start_character":4,"end_line":8,"end_character":75},"updated":"2018-05-30 18:09:45.000000000","message":"would it make sense to add about configuration as well, since service_plugin should parameter can be used to enable or avoid this ?","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6cc58169bd5deff64130df3fb71e4250e1ee9e77","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for listing floating ip pools (subnets)."},{"line_number":5,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":6,"context_line":"    This API endpoint can return a list floating ip pools which are"},{"line_number":7,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."},{"line_number":8,"context_line":"    Users can use this API to find out the pool to create the floating IPs."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5f7c97a3_90054017","line":8,"range":{"start_line":4,"start_character":4,"end_line":8,"end_character":75},"in_reply_to":"5f7c97a3_82fb20bc","updated":"2018-06-05 20:41:33.000000000","message":"I am not sure if I get it. Could you point to an example of doing that if there is one?","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"ef3652a9a69a5daff9562a2349277631686576e5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for listing floating ip pools (subnets)."},{"line_number":5,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":6,"context_line":"    This API endpoint can return a list floating ip pools which are"},{"line_number":7,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."},{"line_number":8,"context_line":"    Users can use this API to find out the pool to create the floating IPs."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5f7c97a3_340d20e8","line":8,"range":{"start_line":4,"start_character":4,"end_line":8,"end_character":75},"in_reply_to":"5f7c97a3_90054017","updated":"2018-06-06 21:59:45.000000000","message":"you can use other: tag in release notes notify the change in configuration that is needed to use this service plugin.\n\nreno new \"new-slug\"\n\nit will have other: tag","commit_id":"b77a83d02a324e636597d720242f2f3e69b094ff"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"156f3219faee9c91a5cdd53f733fcf703427328b","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for listing floating ip pools (subnets)."},{"line_number":5,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":6,"context_line":"    This API endpoint can return a list floating ip pools which are"},{"line_number":7,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."},{"line_number":8,"context_line":"    Users can use this API to find out the pool to create the floating IPs."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5f7c97a3_ad29da89","line":6,"range":{"start_line":6,"start_character":36,"end_line":6,"end_character":48},"updated":"2018-06-07 07:47:44.000000000","message":"list of floating ip","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"976a1f9687968fd96546e8dfee498ee3137c1894","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for listing floating ip pools (subnets)."},{"line_number":5,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":6,"context_line":"    This API endpoint can return a list floating ip pools which are"},{"line_number":7,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."},{"line_number":8,"context_line":"    Users can use this API to find out the pool to create the floating IPs."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5f7c97a3_ba41e50c","line":6,"range":{"start_line":6,"start_character":36,"end_line":6,"end_character":48},"in_reply_to":"5f7c97a3_ad29da89","updated":"2018-06-08 20:26:38.000000000","message":"Done","commit_id":"52081d1c4a228a340893eeb45b83fd4502c385a9"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"ef301db207a588e13e3b15904f86aedb42c31ae8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for listing floating ip pools (subnets)."},{"line_number":5,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":6,"context_line":"    This API endpoint can return a list of floating ip pools which are"},{"line_number":7,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."},{"line_number":8,"context_line":"    Users can use this API to find out the pool to create the floating IPs."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"5f7c97a3_4e4812b2","line":8,"range":{"start_line":4,"start_character":4,"end_line":8,"end_character":75},"updated":"2018-06-08 21:47:48.000000000","message":"and a comment on PS11 is still valid on this","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"7fe565ae2f66a082d011135646b7617848f5c384","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for listing floating ip pools (subnets)."},{"line_number":5,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":6,"context_line":"    This API endpoint can return a list of floating ip pools which are"},{"line_number":7,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."},{"line_number":8,"context_line":"    Users can use this API to find out the pool to create the floating IPs."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"5f7c97a3_e65ec343","line":8,"range":{"start_line":4,"start_character":4,"end_line":8,"end_character":75},"in_reply_to":"5f7c97a3_4e4812b2","updated":"2018-06-11 17:51:49.000000000","message":"Done","commit_id":"261863e141fd3712089906e8811f0222f3bd09ff"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"9062e9aeb9b22c420f6dfc01988a39b12115cbad","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for listing floating ip pools (subnets)."},{"line_number":5,"context_line":"    To enable this feature, a service plugin named ``floatingip_pools``"},{"line_number":6,"context_line":"    must be added to the option ``service_plugins`` in your neutron.conf."},{"line_number":7,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":8,"context_line":"    This API endpoint can return a list of floating ip pools which are"},{"line_number":9,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"5f7c97a3_80e24ed3","line":6,"range":{"start_line":5,"start_character":3,"end_line":6,"end_character":73},"updated":"2018-06-11 23:54:34.000000000","message":"this part can be moved to different section,\nOther:\n   - |","commit_id":"e0f823d23aa32ca1fe8c9bcb67918aba99ecdc2f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"73b4777edf18288d6731b9c4898197177fa41809","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":8,"context_line":"    This API endpoint can return a list of floating ip pools which are"},{"line_number":9,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."},{"line_number":10,"context_line":"    Users can use this API to find out the pool to create the floating IPs."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"3f79a3b5_26cc5861","line":10,"updated":"2018-09-24 08:16:38.000000000","message":"It was probably discussed somewhere in the past that using service plugin is the best approach here and if so then I\u0027m fine with that.\nBut personally I think that this could be added in L3 router plugin as then it wouldn\u0027t require additional config to enable this in the deployment.","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"e296480aea7dadcf771b168d43777c9f61e8230d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":8,"context_line":"    This API endpoint can return a list of floating ip pools which are"},{"line_number":9,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."},{"line_number":10,"context_line":"    Users can use this API to find out the pool to create the floating IPs."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"3f79a3b5_9bd333d4","line":10,"in_reply_to":"3f79a3b5_26cc5861","updated":"2018-09-24 21:32:25.000000000","message":"Actually, the option to add this into the L3 router plugin was not yet discussed. I will investigate this alternative.","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"72bdf427eeec509f242adae94a93cc97f8879a0a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":8,"context_line":"    This API endpoint can return a list of floating ip pools which are"},{"line_number":9,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."},{"line_number":10,"context_line":"    Users can use this API to find out the pool to create the floating IPs."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"3f79a3b5_e8d82981","line":10,"in_reply_to":"3f79a3b5_26cc5861","updated":"2018-09-26 21:30:17.000000000","message":"Done","commit_id":"59d9b2f4770473b0924fe1649e537909c552bc5c"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3c2910d9cb98878636ac76c249546216ab80bc60","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for listing floating ip pools (subnets) in l3 plugin."},{"line_number":5,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":6,"context_line":"    This API endpoint can return a list of floating ip pools which are"},{"line_number":7,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."}],"source_content_type":"text/x-yaml","patch_set":27,"id":"3f79a3b5_da50882f","line":4,"range":{"start_line":4,"start_character":59,"end_line":4,"end_character":61},"updated":"2018-09-27 07:44:28.000000000","message":"L3 will looks better IMO","commit_id":"b685632f4c088d203f56aaa69537a86f2a0c466e"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"b0227f2170bd2fdc404d2d3788aa847eb75a0661","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add support for listing floating ip pools (subnets) in l3 plugin."},{"line_number":5,"context_line":"    A new API resource ``floatingip-pools`` is introduced."},{"line_number":6,"context_line":"    This API endpoint can return a list of floating ip pools which are"},{"line_number":7,"context_line":"    essentially mappings between network UUIDs and subnet CIDRs."}],"source_content_type":"text/x-yaml","patch_set":27,"id":"3f79a3b5_e78045fa","line":4,"range":{"start_line":4,"start_character":59,"end_line":4,"end_character":61},"in_reply_to":"3f79a3b5_da50882f","updated":"2018-09-27 13:59:43.000000000","message":"Done","commit_id":"b685632f4c088d203f56aaa69537a86f2a0c466e"}]}
