)]}'
{"neutron/db/l3_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d4dc399a66ae462e2b8338efe155fdda66eadfd4","unresolved":false,"context_lines":[{"line_number":953,"context_line":"        subnet \u003d self._core_plugin.get_subnet(context, subnet_id)"},{"line_number":954,"context_line":"        subnet_cidr \u003d netaddr.IPNetwork(subnet[\u0027cidr\u0027])"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"        fip_objs \u003d l3_obj.FloatingIP.get_objects(context, router_id\u003drouter_id)"},{"line_number":957,"context_line":"        pf_plugin \u003d directory.get_plugin(plugin_constants.PORTFORWARDING)"},{"line_number":958,"context_line":"        if pf_plugin:"},{"line_number":959,"context_line":"            for fip_obj in fip_objs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_7df6a060","line":956,"range":{"start_line":956,"start_character":49,"end_line":956,"end_character":56},"updated":"2018-10-26 13:46:48.000000000","message":"This FIPs can belong to other projects. If I\u0027m not wrong, this should be context.elevated()","commit_id":"0c6346c7e71709cadef0154cd54a28dc3e5cbd74"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b01bc9a491855f20029c3c8f0ba0a98defb46d82","unresolved":false,"context_lines":[{"line_number":953,"context_line":"        subnet \u003d self._core_plugin.get_subnet(context, subnet_id)"},{"line_number":954,"context_line":"        subnet_cidr \u003d netaddr.IPNetwork(subnet[\u0027cidr\u0027])"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"        fip_objs \u003d l3_obj.FloatingIP.get_objects(context, router_id\u003drouter_id)"},{"line_number":957,"context_line":"        pf_plugin \u003d directory.get_plugin(plugin_constants.PORTFORWARDING)"},{"line_number":958,"context_line":"        if pf_plugin:"},{"line_number":959,"context_line":"            for fip_obj in fip_objs:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_d8f10298","line":956,"range":{"start_line":956,"start_character":49,"end_line":956,"end_character":56},"in_reply_to":"3f79a3b5_7df6a060","updated":"2018-10-26 14:14:41.000000000","message":"Hmm, yes, admin user can do anything...","commit_id":"0c6346c7e71709cadef0154cd54a28dc3e5cbd74"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d4dc399a66ae462e2b8338efe155fdda66eadfd4","unresolved":false,"context_lines":[{"line_number":958,"context_line":"        if pf_plugin:"},{"line_number":959,"context_line":"            for fip_obj in fip_objs:"},{"line_number":960,"context_line":"                pf_objs \u003d port_forwarding.PortForwarding.get_objects("},{"line_number":961,"context_line":"                    context, floatingip_id\u003dfip_obj.id)"},{"line_number":962,"context_line":"                for pf_obj in pf_objs:"},{"line_number":963,"context_line":"                    if (pf_obj and pf_obj.internal_ip_address and"},{"line_number":964,"context_line":"                            pf_obj.internal_ip_address in subnet_cidr):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5d4c049c","line":961,"range":{"start_line":961,"start_character":20,"end_line":961,"end_character":27},"updated":"2018-10-26 13:46:48.000000000","message":"ditto","commit_id":"0c6346c7e71709cadef0154cd54a28dc3e5cbd74"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d4dc399a66ae462e2b8338efe155fdda66eadfd4","unresolved":false,"context_lines":[{"line_number":960,"context_line":"                pf_objs \u003d port_forwarding.PortForwarding.get_objects("},{"line_number":961,"context_line":"                    context, floatingip_id\u003dfip_obj.id)"},{"line_number":962,"context_line":"                for pf_obj in pf_objs:"},{"line_number":963,"context_line":"                    if (pf_obj and pf_obj.internal_ip_address and"},{"line_number":964,"context_line":"                            pf_obj.internal_ip_address in subnet_cidr):"},{"line_number":965,"context_line":"                        raise l3_exc.RouterInterfaceInUseByFloatingIP("},{"line_number":966,"context_line":"                            router_id\u003drouter_id, subnet_id\u003dsubnet_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_1d7f6cde","line":963,"range":{"start_line":963,"start_character":24,"end_line":963,"end_character":30},"updated":"2018-10-26 13:46:48.000000000","message":"Why this check?","commit_id":"0c6346c7e71709cadef0154cd54a28dc3e5cbd74"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"c2f5aff815db8e0e062ec2fba68390df0c4e6c70","unresolved":false,"context_lines":[{"line_number":53,"context_line":"from neutron.extensions import l3"},{"line_number":54,"context_line":"from neutron.extensions import qos_fip"},{"line_number":55,"context_line":"from neutron.objects import base as base_obj"},{"line_number":56,"context_line":"from neutron.objects import port_forwarding"},{"line_number":57,"context_line":"from neutron.objects import ports as port_obj"},{"line_number":58,"context_line":"from neutron.objects import router as l3_obj"},{"line_number":59,"context_line":"from neutron import worker as neutron_worker"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_490ae0cf","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":43},"updated":"2018-10-30 01:28:47.000000000","message":"The object brought by port_forwarding, I think don\u0027t couple the code with other module is better.","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"cf9ffbaf28603cdcfc24b2449ba68fcb6590f0f1","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        pf_plugin \u003d directory.get_plugin(plugin_constants.PORTFORWARDING)"},{"line_number":958,"context_line":"        if pf_plugin:"},{"line_number":959,"context_line":"            for fip_obj in fip_objs:"},{"line_number":960,"context_line":"                pf_objs \u003d port_forwarding.PortForwarding.get_objects("},{"line_number":961,"context_line":"                    context, floatingip_id\u003dfip_obj.id)"},{"line_number":962,"context_line":"                for pf_obj in pf_objs:"},{"line_number":963,"context_line":"                    if (pf_obj.internal_ip_address and"},{"line_number":964,"context_line":"                            pf_obj.internal_ip_address in subnet_cidr):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_96301608","line":961,"range":{"start_line":960,"start_character":0,"end_line":961,"end_character":54},"updated":"2018-10-29 21:00:25.000000000","message":"I am a bit concerned to have this call inside the loop since this call will hit the DB which is a heavy call.\n\nIs it possible to move this outside of the loop. I remember we can pass a list of values (instead of a single value) to get_objects as a filter. In other word, can we do this (UNTESTED)?:\n\n            fip_ids \u003d [fip_obj.id for fip_obj in fip_objs]\n            pf_objs \u003d port_forwarding.PortForwarding.get_objects(\n                    context, floatingip_id\u003dfip_ids)\n            ...","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"dea65712299e209e389c28b45789d5bf6df2d5c7","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        pf_plugin \u003d directory.get_plugin(plugin_constants.PORTFORWARDING)"},{"line_number":958,"context_line":"        if pf_plugin:"},{"line_number":959,"context_line":"            for fip_obj in fip_objs:"},{"line_number":960,"context_line":"                pf_objs \u003d port_forwarding.PortForwarding.get_objects("},{"line_number":961,"context_line":"                    context, floatingip_id\u003dfip_obj.id)"},{"line_number":962,"context_line":"                for pf_obj in pf_objs:"},{"line_number":963,"context_line":"                    if (pf_obj.internal_ip_address and"},{"line_number":964,"context_line":"                            pf_obj.internal_ip_address in subnet_cidr):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_8c89e625","line":961,"range":{"start_line":960,"start_character":0,"end_line":961,"end_character":54},"in_reply_to":"3f79a3b5_96301608","updated":"2018-10-30 02:53:09.000000000","message":"Done","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"c2f5aff815db8e0e062ec2fba68390df0c4e6c70","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        pf_plugin \u003d directory.get_plugin(plugin_constants.PORTFORWARDING)"},{"line_number":958,"context_line":"        if pf_plugin:"},{"line_number":959,"context_line":"            for fip_obj in fip_objs:"},{"line_number":960,"context_line":"                pf_objs \u003d port_forwarding.PortForwarding.get_objects("},{"line_number":961,"context_line":"                    context, floatingip_id\u003dfip_obj.id)"},{"line_number":962,"context_line":"                for pf_obj in pf_objs:"},{"line_number":963,"context_line":"                    if (pf_obj.internal_ip_address and"},{"line_number":964,"context_line":"                            pf_obj.internal_ip_address in subnet_cidr):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_c96030a1","line":961,"range":{"start_line":960,"start_character":0,"end_line":961,"end_character":54},"in_reply_to":"3f79a3b5_96301608","updated":"2018-10-30 01:28:47.000000000","message":"Yeah, Agree with hongbin, we just load the data 1 time from db.","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"c2f5aff815db8e0e062ec2fba68390df0c4e6c70","unresolved":false,"context_lines":[{"line_number":976,"context_line":"        try:"},{"line_number":977,"context_line":"            kwargs \u003d {\u0027context\u0027: context, \u0027router_id\u0027: router_id,"},{"line_number":978,"context_line":"                      \u0027subnet_id\u0027: subnet_id}"},{"line_number":979,"context_line":"            registry.notify("},{"line_number":980,"context_line":"                resources.ROUTER_INTERFACE,"},{"line_number":981,"context_line":"                events.BEFORE_DELETE, self, **kwargs)"},{"line_number":982,"context_line":"        except exceptions.CallbackFailure as e:"},{"line_number":983,"context_line":"            # NOTE(armax): preserve old check\u0027s behavior"},{"line_number":984,"context_line":"            if len(e.errors) \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_295204db","line":981,"range":{"start_line":979,"start_character":0,"end_line":981,"end_character":53},"updated":"2018-10-30 01:28:47.000000000","message":"why not use callback for validate?","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"46c33272ab24f6a9ade9fb18147c6dc1e462dbc2","unresolved":false,"context_lines":[{"line_number":976,"context_line":"        try:"},{"line_number":977,"context_line":"            kwargs \u003d {\u0027context\u0027: context, \u0027router_id\u0027: router_id,"},{"line_number":978,"context_line":"                      \u0027subnet_id\u0027: subnet_id}"},{"line_number":979,"context_line":"            registry.notify("},{"line_number":980,"context_line":"                resources.ROUTER_INTERFACE,"},{"line_number":981,"context_line":"                events.BEFORE_DELETE, self, **kwargs)"},{"line_number":982,"context_line":"        except exceptions.CallbackFailure as e:"},{"line_number":983,"context_line":"            # NOTE(armax): preserve old check\u0027s behavior"},{"line_number":984,"context_line":"            if len(e.errors) \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6387ac0c","line":981,"range":{"start_line":979,"start_character":0,"end_line":981,"end_character":53},"in_reply_to":"3f79a3b5_0c9ab65e","updated":"2018-10-30 14:52:48.000000000","message":"IMHO, @Zhaobo\u0027s approach sounds better. I feel it would be good to experiment such approach in a follow-up patch. No mandatory change is required for this patch.","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"dea65712299e209e389c28b45789d5bf6df2d5c7","unresolved":false,"context_lines":[{"line_number":976,"context_line":"        try:"},{"line_number":977,"context_line":"            kwargs \u003d {\u0027context\u0027: context, \u0027router_id\u0027: router_id,"},{"line_number":978,"context_line":"                      \u0027subnet_id\u0027: subnet_id}"},{"line_number":979,"context_line":"            registry.notify("},{"line_number":980,"context_line":"                resources.ROUTER_INTERFACE,"},{"line_number":981,"context_line":"                events.BEFORE_DELETE, self, **kwargs)"},{"line_number":982,"context_line":"        except exceptions.CallbackFailure as e:"},{"line_number":983,"context_line":"            # NOTE(armax): preserve old check\u0027s behavior"},{"line_number":984,"context_line":"            if len(e.errors) \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_2c7c5220","line":981,"range":{"start_line":979,"start_character":0,"end_line":981,"end_character":53},"in_reply_to":"3f79a3b5_295204db","updated":"2018-10-30 02:53:09.000000000","message":"Not related to this patch","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"4ec16db837a4a75141d0cfd6f77f8cadc9c03d6d","unresolved":false,"context_lines":[{"line_number":976,"context_line":"        try:"},{"line_number":977,"context_line":"            kwargs \u003d {\u0027context\u0027: context, \u0027router_id\u0027: router_id,"},{"line_number":978,"context_line":"                      \u0027subnet_id\u0027: subnet_id}"},{"line_number":979,"context_line":"            registry.notify("},{"line_number":980,"context_line":"                resources.ROUTER_INTERFACE,"},{"line_number":981,"context_line":"                events.BEFORE_DELETE, self, **kwargs)"},{"line_number":982,"context_line":"        except exceptions.CallbackFailure as e:"},{"line_number":983,"context_line":"            # NOTE(armax): preserve old check\u0027s behavior"},{"line_number":984,"context_line":"            if len(e.errors) \u003d\u003d 1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_0c9ab65e","line":981,"range":{"start_line":979,"start_character":0,"end_line":981,"end_character":53},"in_reply_to":"3f79a3b5_2c7c5220","updated":"2018-10-30 02:56:11.000000000","message":"Sorry, misread the comments here.\nBoth can work, if you insist, I can refactor this.","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"}],"neutron/tests/functional/services/portforwarding/test_port_forwarding.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6c9eaa400df26fd244c864a5a3948808b1f98fd4","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                 apidef.INTERNAL_IP_ADDRESS:"},{"line_number":107,"context_line":"                     self.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]}}"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def test_create_floatingip_port_forwarding(self):"},{"line_number":110,"context_line":"        res \u003d self.pf_plugin.create_floatingip_port_forwarding("},{"line_number":111,"context_line":"            self.context, self.fip[\u0027id\u0027], self.port_forwarding)"},{"line_number":112,"context_line":"        expect \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b1651cb2","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":46},"updated":"2018-10-29 21:26:12.000000000","message":"Do we still need this test? I asked that because the new test \u0027test_create_floatingip_port_forwarding_and_remove_subnets\u0027 seems to cover everything in here.","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"dea65712299e209e389c28b45789d5bf6df2d5c7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                 apidef.INTERNAL_IP_ADDRESS:"},{"line_number":107,"context_line":"                     self.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]}}"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def test_create_floatingip_port_forwarding(self):"},{"line_number":110,"context_line":"        res \u003d self.pf_plugin.create_floatingip_port_forwarding("},{"line_number":111,"context_line":"            self.context, self.fip[\u0027id\u0027], self.port_forwarding)"},{"line_number":112,"context_line":"        expect \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_4c7f4e15","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":46},"in_reply_to":"3f79a3b5_b1651cb2","updated":"2018-10-30 02:53:09.000000000","message":"Done","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bae4a9340b0f7aef2ce11b5b37ea04ef8d14a0fe","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                 apidef.INTERNAL_IP_ADDRESS:"},{"line_number":107,"context_line":"                     self.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]}}"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def test_create_floatingip_port_forwarding(self):"},{"line_number":110,"context_line":"        res \u003d self.pf_plugin.create_floatingip_port_forwarding("},{"line_number":111,"context_line":"            self.context, self.fip[\u0027id\u0027], self.port_forwarding)"},{"line_number":112,"context_line":"        expect \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_89755899","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":46},"in_reply_to":"3f79a3b5_b1651cb2","updated":"2018-10-30 01:11:56.000000000","message":"Make sense, thanks.","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6c0e77af759add5780bef1f1955917676ca5ca12","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \u0027floating_ip_address\u0027: self.fip[\u0027floating_ip_address\u0027],"},{"line_number":143,"context_line":"            \u0027floatingip_id\u0027: self.fip[\u0027id\u0027]}"},{"line_number":144,"context_line":"        self.assertEqual(expect, res)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        self._remove_router_interface(self.router[\u0027id\u0027], subnet_2[\u0027id\u0027])"},{"line_number":147,"context_line":"        self._remove_router_interface(self.router[\u0027id\u0027], subnet_3[\u0027id\u0027])"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_7ccc4232","line":145,"updated":"2018-10-29 15:56:38.000000000","message":"If You will respin, maybe You can add also assert that proper exception will be raised when self.subnet will be removing from router?","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"dea65712299e209e389c28b45789d5bf6df2d5c7","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \u0027floating_ip_address\u0027: self.fip[\u0027floating_ip_address\u0027],"},{"line_number":143,"context_line":"            \u0027floatingip_id\u0027: self.fip[\u0027id\u0027]}"},{"line_number":144,"context_line":"        self.assertEqual(expect, res)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        self._remove_router_interface(self.router[\u0027id\u0027], subnet_2[\u0027id\u0027])"},{"line_number":147,"context_line":"        self._remove_router_interface(self.router[\u0027id\u0027], subnet_3[\u0027id\u0027])"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_ec797a2f","line":145,"in_reply_to":"3f79a3b5_7ccc4232","updated":"2018-10-30 02:53:09.000000000","message":"Done","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bae4a9340b0f7aef2ce11b5b37ea04ef8d14a0fe","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \u0027floating_ip_address\u0027: self.fip[\u0027floating_ip_address\u0027],"},{"line_number":143,"context_line":"            \u0027floatingip_id\u0027: self.fip[\u0027id\u0027]}"},{"line_number":144,"context_line":"        self.assertEqual(expect, res)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        self._remove_router_interface(self.router[\u0027id\u0027], subnet_2[\u0027id\u0027])"},{"line_number":147,"context_line":"        self._remove_router_interface(self.router[\u0027id\u0027], subnet_3[\u0027id\u0027])"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_496bc0b6","line":145,"in_reply_to":"3f79a3b5_7ccc4232","updated":"2018-10-30 01:11:56.000000000","message":"Will do it, Thanks","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"}],"neutron/tests/unit/extensions/test_expose_port_forwarding_in_fip.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"6c9eaa400df26fd244c864a5a3948808b1f98fd4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            plugin\u003dCORE_PLUGIN, ext_mgr\u003dext_mgr, service_plugins\u003dsvc_plugins)"},{"line_number":66,"context_line":"        self.pf_plugin \u003d pf_plugin.PortForwardingPlugin()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_get_fip_after_port_forwarding_create(self):"},{"line_number":69,"context_line":"        port_forwarding \u003d {"},{"line_number":70,"context_line":"            apidef.RESOURCE_NAME:"},{"line_number":71,"context_line":"                {apidef.EXTERNAL_PORT: 2225,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_f16f1490","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":49},"updated":"2018-10-29 21:26:12.000000000","message":"I wonder if we still need this test because the new test \u0027test_create_port_forwarding_and_remove_subnets\u0027 seems to be able to cover everything in here.","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bae4a9340b0f7aef2ce11b5b37ea04ef8d14a0fe","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            plugin\u003dCORE_PLUGIN, ext_mgr\u003dext_mgr, service_plugins\u003dsvc_plugins)"},{"line_number":66,"context_line":"        self.pf_plugin \u003d pf_plugin.PortForwardingPlugin()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_get_fip_after_port_forwarding_create(self):"},{"line_number":69,"context_line":"        port_forwarding \u003d {"},{"line_number":70,"context_line":"            apidef.RESOURCE_NAME:"},{"line_number":71,"context_line":"                {apidef.EXTERNAL_PORT: 2225,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_c93d90b9","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":49},"in_reply_to":"3f79a3b5_f16f1490","updated":"2018-10-30 01:11:56.000000000","message":"Do not want to influence the original test here, cause another patch is based on it:\nhttps://review.openstack.org/#/c/613543/2/neutron/tests/unit/extensions/test_expose_port_forwarding_in_fip.py","commit_id":"3db276079baefbed8384f7255f6c856b9a1aa96e"}]}
