)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"cc48b68ca74c0b221034a4c2fd6046cd58b67cea","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Michal Kelner Mishali \u003cmkelnermishal@vmware.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-10-21 14:56:10 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Router: restrict associate floatingip to i/f"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Restricting the option of associating a floating IP"},{"line_number":10,"context_line":"to a router interface, since floating IPs might be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_7725d815","line":7,"range":{"start_line":7,"start_character":41,"end_line":7,"end_character":44},"updated":"2018-10-21 14:36:41.000000000","message":"\u0027i/f\u0027 is not so much clear, what about \"router interface\" ?","commit_id":"31a4d2f940aaa36dc2f00393df4a86e61944f4d5"}],"neutron/db/l3_db.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"960a20099dca2712c9ea415ee53206b0071becf3","unresolved":false,"context_lines":[{"line_number":1993,"context_line":"            # non-existent ports don\u0027t need to be protected from deletion"},{"line_number":1994,"context_line":"            return"},{"line_number":1995,"context_line":""},{"line_number":1996,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, context, floatingip):"},{"line_number":1997,"context_line":"        port_id \u003d floatingip[\u0027floatingip\u0027][\u0027port_id\u0027]"},{"line_number":1998,"context_line":"        dev_owner \u003d self._get_port_device_owner(context, port_id)"},{"line_number":1999,"context_line":"        if port_id and dev_owner and dev_owner in \"network:router_interface\":"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_4a49832f","line":1996,"updated":"2018-10-03 16:49:25.000000000","message":"Why not do this check right after https://review.openstack.org/#/c/599572/2/neutron/db/l3_db.py@1174, where we call the core plugin to retrieve the port anyways. That method is in class L3_NAT_dbonly_mixin, which is inherited by the class you are modifying. In fact, if you look at L2007 below, you are invoking that class. Also, doing the check right after https://review.openstack.org/#/c/599572/2/neutron/db/l3_db.py@1174 will take care of floating ip creation and update","commit_id":"cb4ca8bcf4719b41a47afe51ec1e9f19a659633a"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"8d10b1f9487f7dfefaf9fd0480cc98a54dae0dac","unresolved":false,"context_lines":[{"line_number":1993,"context_line":"            # non-existent ports don\u0027t need to be protected from deletion"},{"line_number":1994,"context_line":"            return"},{"line_number":1995,"context_line":""},{"line_number":1996,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, context, floatingip):"},{"line_number":1997,"context_line":"        port_id \u003d floatingip[\u0027floatingip\u0027][\u0027port_id\u0027]"},{"line_number":1998,"context_line":"        dev_owner \u003d self._get_port_device_owner(context, port_id)"},{"line_number":1999,"context_line":"        if port_id and dev_owner and dev_owner in \"network:router_interface\":"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_d7b9537c","line":1996,"in_reply_to":"3f79a3b5_4a49832f","updated":"2018-10-09 05:43:28.000000000","message":"you are right, thanks. Moved it to the above mentioned location.","commit_id":"cb4ca8bcf4719b41a47afe51ec1e9f19a659633a"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9ac05e1bc54980562feec0ee5c20457720bef622","unresolved":false,"context_lines":[{"line_number":1541,"context_line":"        except l3_exc.RouterNotFound:"},{"line_number":1542,"context_line":"            return False"},{"line_number":1543,"context_line":""},{"line_number":1544,"context_line":"    def get_port_device_owner(self, context, port_id):"},{"line_number":1545,"context_line":"        try:"},{"line_number":1546,"context_line":"            port \u003d self._core_plugin.get_port(context, port_id)"},{"line_number":1547,"context_line":"            return port[\u0027device_owner\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_17558b1e","line":1544,"range":{"start_line":1544,"start_character":8,"end_line":1544,"end_character":29},"updated":"2018-10-09 05:57:12.000000000","message":"get_port_device_owner and _get_port_device_owner have the same body, and this \u0027get_port_device_owner\u0027 was not called anywhere.","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"04f3c2f43a48496044eb063c4a94c3492b9bc2c6","unresolved":false,"context_lines":[{"line_number":1541,"context_line":"        except l3_exc.RouterNotFound:"},{"line_number":1542,"context_line":"            return False"},{"line_number":1543,"context_line":""},{"line_number":1544,"context_line":"    def get_port_device_owner(self, context, port_id):"},{"line_number":1545,"context_line":"        try:"},{"line_number":1546,"context_line":"            port \u003d self._core_plugin.get_port(context, port_id)"},{"line_number":1547,"context_line":"            return port[\u0027device_owner\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6860a0d1","line":1544,"range":{"start_line":1544,"start_character":8,"end_line":1544,"end_character":29},"in_reply_to":"3f79a3b5_17558b1e","updated":"2018-10-10 11:49:50.000000000","message":"Done","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9ac05e1bc54980562feec0ee5c20457720bef622","unresolved":false,"context_lines":[{"line_number":1989,"context_line":""},{"line_number":1990,"context_line":"    def _get_port_device_owner(self, context, port_id):"},{"line_number":1991,"context_line":"        try:"},{"line_number":1992,"context_line":"            port \u003d self._core_plugin.get_port(context, port_id)"},{"line_number":1993,"context_line":"            return port[\u0027device_owner\u0027]"},{"line_number":1994,"context_line":"        except n_exc.PortNotFound:"},{"line_number":1995,"context_line":"            # non-existent ports don\u0027t need to be protected from deletion"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d2fac10f","line":1992,"range":{"start_line":1992,"start_character":12,"end_line":1992,"end_character":63},"updated":"2018-10-09 05:57:12.000000000","message":"Since line 1175 already call the get_port, why not directly use that?","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"59a10a6eb9d8834e0c03e7463857157e82b5839b","unresolved":false,"context_lines":[{"line_number":1989,"context_line":""},{"line_number":1990,"context_line":"    def _get_port_device_owner(self, context, port_id):"},{"line_number":1991,"context_line":"        try:"},{"line_number":1992,"context_line":"            port \u003d self._core_plugin.get_port(context, port_id)"},{"line_number":1993,"context_line":"            return port[\u0027device_owner\u0027]"},{"line_number":1994,"context_line":"        except n_exc.PortNotFound:"},{"line_number":1995,"context_line":"            # non-existent ports don\u0027t need to be protected from deletion"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_088eccd0","line":1992,"range":{"start_line":1992,"start_character":12,"end_line":1992,"end_character":63},"in_reply_to":"3f79a3b5_d2fac10f","updated":"2018-10-09 08:47:54.000000000","message":"+1","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"04f3c2f43a48496044eb063c4a94c3492b9bc2c6","unresolved":false,"context_lines":[{"line_number":1989,"context_line":""},{"line_number":1990,"context_line":"    def _get_port_device_owner(self, context, port_id):"},{"line_number":1991,"context_line":"        try:"},{"line_number":1992,"context_line":"            port \u003d self._core_plugin.get_port(context, port_id)"},{"line_number":1993,"context_line":"            return port[\u0027device_owner\u0027]"},{"line_number":1994,"context_line":"        except n_exc.PortNotFound:"},{"line_number":1995,"context_line":"            # non-existent ports don\u0027t need to be protected from deletion"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_35b73cda","line":1992,"range":{"start_line":1992,"start_character":12,"end_line":1992,"end_character":63},"in_reply_to":"3f79a3b5_d2fac10f","updated":"2018-10-10 11:49:50.000000000","message":"Done","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9ac05e1bc54980562feec0ee5c20457720bef622","unresolved":false,"context_lines":[{"line_number":1987,"context_line":"            context, router_interface_info, \u0027remove\u0027)"},{"line_number":1988,"context_line":"        return router_interface_info"},{"line_number":1989,"context_line":""},{"line_number":1990,"context_line":"    def _get_port_device_owner(self, context, port_id):"},{"line_number":1991,"context_line":"        try:"},{"line_number":1992,"context_line":"            port \u003d self._core_plugin.get_port(context, port_id)"},{"line_number":1993,"context_line":"            return port[\u0027device_owner\u0027]"},{"line_number":1994,"context_line":"        except n_exc.PortNotFound:"},{"line_number":1995,"context_line":"            # non-existent ports don\u0027t need to be protected from deletion"},{"line_number":1996,"context_line":"            return"},{"line_number":1997,"context_line":""},{"line_number":1998,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, context, fip):"},{"line_number":1999,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d747137a","line":1996,"range":{"start_line":1990,"start_character":0,"end_line":1996,"end_character":18},"updated":"2018-10-09 05:57:12.000000000","message":"Duplocated defination, this class is inherited from\n L3_NAT_dbonly_mixin so it has such method you defined line 1544.","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"04f3c2f43a48496044eb063c4a94c3492b9bc2c6","unresolved":false,"context_lines":[{"line_number":1987,"context_line":"            context, router_interface_info, \u0027remove\u0027)"},{"line_number":1988,"context_line":"        return router_interface_info"},{"line_number":1989,"context_line":""},{"line_number":1990,"context_line":"    def _get_port_device_owner(self, context, port_id):"},{"line_number":1991,"context_line":"        try:"},{"line_number":1992,"context_line":"            port \u003d self._core_plugin.get_port(context, port_id)"},{"line_number":1993,"context_line":"            return port[\u0027device_owner\u0027]"},{"line_number":1994,"context_line":"        except n_exc.PortNotFound:"},{"line_number":1995,"context_line":"            # non-existent ports don\u0027t need to be protected from deletion"},{"line_number":1996,"context_line":"            return"},{"line_number":1997,"context_line":""},{"line_number":1998,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, context, fip):"},{"line_number":1999,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_95c73047","line":1996,"range":{"start_line":1990,"start_character":0,"end_line":1996,"end_character":18},"in_reply_to":"3f79a3b5_d747137a","updated":"2018-10-10 11:49:50.000000000","message":"Done","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9ac05e1bc54980562feec0ee5c20457720bef622","unresolved":false,"context_lines":[{"line_number":1995,"context_line":"            # non-existent ports don\u0027t need to be protected from deletion"},{"line_number":1996,"context_line":"            return"},{"line_number":1997,"context_line":""},{"line_number":1998,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, context, fip):"},{"line_number":1999,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":2000,"context_line":"        dev_owner \u003d self._get_port_device_owner(context, port_id)"},{"line_number":2001,"context_line":"        if port_id and dev_owner and dev_owner in \"network:router_interface\":"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_17034b12","line":1998,"range":{"start_line":1998,"start_character":8,"end_line":1998,"end_character":48},"updated":"2018-10-09 05:57:12.000000000","message":"This method can be define to nearby Line 1236.","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"04f3c2f43a48496044eb063c4a94c3492b9bc2c6","unresolved":false,"context_lines":[{"line_number":1995,"context_line":"            # non-existent ports don\u0027t need to be protected from deletion"},{"line_number":1996,"context_line":"            return"},{"line_number":1997,"context_line":""},{"line_number":1998,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, context, fip):"},{"line_number":1999,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":2000,"context_line":"        dev_owner \u003d self._get_port_device_owner(context, port_id)"},{"line_number":2001,"context_line":"        if port_id and dev_owner and dev_owner in \"network:router_interface\":"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_55c1982e","line":1998,"range":{"start_line":1998,"start_character":8,"end_line":1998,"end_character":48},"in_reply_to":"3f79a3b5_17034b12","updated":"2018-10-10 11:49:50.000000000","message":"Done","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"59a10a6eb9d8834e0c03e7463857157e82b5839b","unresolved":false,"context_lines":[{"line_number":1998,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, context, fip):"},{"line_number":1999,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":2000,"context_line":"        dev_owner \u003d self._get_port_device_owner(context, port_id)"},{"line_number":2001,"context_line":"        if port_id and dev_owner and dev_owner in \"network:router_interface\":"},{"line_number":2002,"context_line":"                msg \u003d (\u0027Associating floatingip to router interface is \u0027"},{"line_number":2003,"context_line":"                       \u0027restricted\u0027)"},{"line_number":2004,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_88417c66","line":2001,"range":{"start_line":2001,"start_character":51,"end_line":2001,"end_character":75},"updated":"2018-10-09 08:47:54.000000000","message":"This can use neutron-lib defined constant. And also need to consider DVR case.","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"04f3c2f43a48496044eb063c4a94c3492b9bc2c6","unresolved":false,"context_lines":[{"line_number":1998,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, context, fip):"},{"line_number":1999,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":2000,"context_line":"        dev_owner \u003d self._get_port_device_owner(context, port_id)"},{"line_number":2001,"context_line":"        if port_id and dev_owner and dev_owner in \"network:router_interface\":"},{"line_number":2002,"context_line":"                msg \u003d (\u0027Associating floatingip to router interface is \u0027"},{"line_number":2003,"context_line":"                       \u0027restricted\u0027)"},{"line_number":2004,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_75bcd4b4","line":2001,"range":{"start_line":2001,"start_character":51,"end_line":2001,"end_character":75},"in_reply_to":"3f79a3b5_88417c66","updated":"2018-10-10 11:49:50.000000000","message":"Done","commit_id":"55ba2e293617815385cb27a0b5636f059a91cc53"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"7f7a5d01e6148f99fcb538336e22f29eda7fcfec","unresolved":false,"context_lines":[{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        return (fip[\u0027port_id\u0027], internal_ip_address, router_id)"},{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if port_id and dev_owner and dev_owner in constants.DEVICE_OWNER_ROUTER_INTF:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_98919548","line":1236,"range":{"start_line":1236,"start_character":8,"end_line":1236,"end_character":48},"updated":"2018-10-11 02:11:46.000000000","message":"It seems that networking-midonet supports extension router-interface-fip which can associate floating ip to router interface. Please confirms this change not breaks that function.","commit_id":"db4920067435bb9ca1498007708eef84e76696a3"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"b59e7fc9fe8038464e021d8c4ceb88792456150c","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if port_id and dev_owner and dev_owner in constants.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":1240,"context_line":"                msg \u003d (\u0027Associating floatingip to router interface is \u0027"},{"line_number":1241,"context_line":"                       \u0027restricted\u0027)"},{"line_number":1242,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_2d036c12","line":1239,"range":{"start_line":1239,"start_character":60,"end_line":1239,"end_character":84},"updated":"2018-10-10 18:58:36.000000000","message":"It seems you can use ROUTER_INTERFACE_OWNERS (http://git.openstack.org/cgit/openstack/neutron-lib/tree/neutron_lib/constants.py#n70) instead?","commit_id":"db4920067435bb9ca1498007708eef84e76696a3"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"cb8ee9fa37fa447b2d021e035e8c79236405b2ba","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if port_id and dev_owner and dev_owner in constants.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":1240,"context_line":"                msg \u003d (\u0027Associating floatingip to router interface is \u0027"},{"line_number":1241,"context_line":"                       \u0027restricted\u0027)"},{"line_number":1242,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_ae1a0868","line":1239,"range":{"start_line":1239,"start_character":8,"end_line":1239,"end_character":85},"updated":"2018-10-11 08:00:44.000000000","message":"Pep8 failed this line, exceed 79 width.","commit_id":"db4920067435bb9ca1498007708eef84e76696a3"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"7f7a5d01e6148f99fcb538336e22f29eda7fcfec","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if port_id and dev_owner and dev_owner in constants.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":1240,"context_line":"                msg \u003d (\u0027Associating floatingip to router interface is \u0027"},{"line_number":1241,"context_line":"                       \u0027restricted\u0027)"},{"line_number":1242,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_789cb95a","line":1239,"range":{"start_line":1239,"start_character":60,"end_line":1239,"end_character":84},"in_reply_to":"3f79a3b5_2d036c12","updated":"2018-10-11 02:11:46.000000000","message":"Agree, DEVICE_OWNER_ROUTER_INTF still indicates legacy router interface.","commit_id":"db4920067435bb9ca1498007708eef84e76696a3"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"4456ce04c527cb205b4449b40f04d266d7b7872b","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if port_id and dev_owner and dev_owner in constants.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":1240,"context_line":"                msg \u003d (\u0027Associating floatingip to router interface is \u0027"},{"line_number":1241,"context_line":"                       \u0027restricted\u0027)"},{"line_number":1242,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_50fd0907","line":1239,"range":{"start_line":1239,"start_character":60,"end_line":1239,"end_character":84},"in_reply_to":"3f79a3b5_2d036c12","updated":"2018-10-14 12:03:26.000000000","message":"Done","commit_id":"db4920067435bb9ca1498007708eef84e76696a3"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"4456ce04c527cb205b4449b40f04d266d7b7872b","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if port_id and dev_owner and dev_owner in constants.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":1240,"context_line":"                msg \u003d (\u0027Associating floatingip to router interface is \u0027"},{"line_number":1241,"context_line":"                       \u0027restricted\u0027)"},{"line_number":1242,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_16254aae","line":1239,"range":{"start_line":1239,"start_character":60,"end_line":1239,"end_character":84},"in_reply_to":"3f79a3b5_789cb95a","updated":"2018-10-14 12:03:26.000000000","message":"Done","commit_id":"db4920067435bb9ca1498007708eef84e76696a3"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"4456ce04c527cb205b4449b40f04d266d7b7872b","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if port_id and dev_owner and dev_owner in constants.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":1240,"context_line":"                msg \u003d (\u0027Associating floatingip to router interface is \u0027"},{"line_number":1241,"context_line":"                       \u0027restricted\u0027)"},{"line_number":1242,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_16fc6a0a","line":1239,"range":{"start_line":1239,"start_character":8,"end_line":1239,"end_character":85},"in_reply_to":"3f79a3b5_ae1a0868","updated":"2018-10-14 12:03:26.000000000","message":"Done","commit_id":"db4920067435bb9ca1498007708eef84e76696a3"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"b59e7fc9fe8038464e021d8c4ceb88792456150c","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if port_id and dev_owner and dev_owner in constants.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":1240,"context_line":"                msg \u003d (\u0027Associating floatingip to router interface is \u0027"},{"line_number":1241,"context_line":"                       \u0027restricted\u0027)"},{"line_number":1242,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":1243,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_a8044a15","line":1240,"range":{"start_line":1240,"start_character":16,"end_line":1240,"end_character":19},"updated":"2018-10-10 18:58:36.000000000","message":"We need to use translation instead, i.e. _(\u0027...\u0027), because this is a user-facing error message.","commit_id":"db4920067435bb9ca1498007708eef84e76696a3"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"4456ce04c527cb205b4449b40f04d266d7b7872b","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if port_id and dev_owner and dev_owner in constants.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":1240,"context_line":"                msg \u003d (\u0027Associating floatingip to router interface is \u0027"},{"line_number":1241,"context_line":"                       \u0027restricted\u0027)"},{"line_number":1242,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":1243,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_76127e57","line":1240,"range":{"start_line":1240,"start_character":16,"end_line":1240,"end_character":19},"in_reply_to":"3f79a3b5_a8044a15","updated":"2018-10-14 12:03:26.000000000","message":"Done","commit_id":"db4920067435bb9ca1498007708eef84e76696a3"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"6b514132278f97fcded168494dc7dd260aa11864","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if (port_id and dev_owner and dev_owner in"},{"line_number":1240,"context_line":"                constants.ROUTER_INTERFACE_OWNERS):"},{"line_number":1241,"context_line":"                msg \u003d _(\u0027Associating floatingip to router interface is \u0027"},{"line_number":1242,"context_line":"                        \u0027restricted\u0027)"},{"line_number":1243,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_4190a842","line":1240,"range":{"start_line":1240,"start_character":16,"end_line":1240,"end_character":49},"updated":"2018-10-15 02:16:00.000000000","message":"It\u0027s better to add unit tests to verify all the device_owners you restricted here.","commit_id":"38103dab5cc276ade3b43e9514b87c925eeb6fea"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"f312c0f205fa6368b924e9b5f6d98a2c7f14910e","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if (port_id and dev_owner and dev_owner in"},{"line_number":1240,"context_line":"                constants.ROUTER_INTERFACE_OWNERS):"},{"line_number":1241,"context_line":"                msg \u003d _(\u0027Associating floatingip to router interface is \u0027"},{"line_number":1242,"context_line":"                        \u0027restricted\u0027)"},{"line_number":1243,"context_line":"                raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_8db572d2","line":1240,"range":{"start_line":1240,"start_character":16,"end_line":1240,"end_character":49},"in_reply_to":"3f79a3b5_4190a842","updated":"2018-10-16 11:28:40.000000000","message":"added. thanks","commit_id":"38103dab5cc276ade3b43e9514b87c925eeb6fea"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"493215eef94be41d3811c77a0d9c9040d68c38c9","unresolved":false,"context_lines":[{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        return (fip[\u0027port_id\u0027], internal_ip_address, router_id)"},{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if (port_id and dev_owner and dev_owner in"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_5cf9467f","line":1236,"range":{"start_line":1236,"start_character":8,"end_line":1236,"end_character":48},"updated":"2018-10-16 14:57:18.000000000","message":"Below is @Dongcan Ye\u0027s remark on patchset #4\n\n  It seems that networking-midonet supports extension router-interface-fip which can associate floating ip to router interface.\n\nOne way to address this comment is to check if the API extension router-interface-fip is present and skip the validation accordingly. The code might be similar as:\n\n    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):\n        if self._is_router_interface_fip_supported:\n            return\n        ...\n\nThe implementation of \u0027_is_router_interface_fip_supported\u0027 might be similar as \u0027_is_fip_qos_supported\u0027 in line #120","commit_id":"121bba00f6962503d466f27738898f457fc73fef"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"ab3c8df19c1cd0e29431e09e98a00e6f874342eb","unresolved":false,"context_lines":[{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        return (fip[\u0027port_id\u0027], internal_ip_address, router_id)"},{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1237,"context_line":"        port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1238,"context_line":"        dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1239,"context_line":"        if (port_id and dev_owner and dev_owner in"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f79a3b5_bce94c83","line":1236,"range":{"start_line":1236,"start_character":8,"end_line":1236,"end_character":48},"in_reply_to":"3f79a3b5_5cf9467f","updated":"2018-10-18 08:17:33.000000000","message":"Done","commit_id":"121bba00f6962503d466f27738898f457fc73fef"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9b2ebe93ad4b1c90a2d51b8590649781b8d40c06","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        if self._fip_router_interface is None:"},{"line_number":132,"context_line":"            # Check L3 extension"},{"line_number":133,"context_line":"            self._fip_router_interface \u003d extensions.is_extension_supported("},{"line_number":134,"context_line":"                self, \"router-interface-fip\")"},{"line_number":135,"context_line":"        return self._fip_router_interface"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_b16399de","line":134,"range":{"start_line":134,"start_character":22,"end_line":134,"end_character":45},"updated":"2018-10-19 05:13:22.000000000","message":"Where is this extension defined?\nI can not find it:\nhttps://github.com/search?q\u003dorg%3Aopenstack+router-interface-fip\n\nIMO, this entire function is not necessary.","commit_id":"eac8a333aa9ccae3ada0bab77fde5db50f3a47d3"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"7b9502e3a771c5736a5897672b429d76cd0e2109","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        if self._fip_router_interface is None:"},{"line_number":132,"context_line":"            # Check L3 extension"},{"line_number":133,"context_line":"            self._fip_router_interface \u003d extensions.is_extension_supported("},{"line_number":134,"context_line":"                self, \"router-interface-fip\")"},{"line_number":135,"context_line":"        return self._fip_router_interface"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_747e366e","line":134,"range":{"start_line":134,"start_character":22,"end_line":134,"end_character":45},"in_reply_to":"3f79a3b5_b16399de","updated":"2018-10-21 07:11:53.000000000","message":"https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/router_interface_fip.py\nI added this bit following previous comments.","commit_id":"eac8a333aa9ccae3ada0bab77fde5db50f3a47d3"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9b2ebe93ad4b1c90a2d51b8590649781b8d40c06","unresolved":false,"context_lines":[{"line_number":1244,"context_line":"        return (fip[\u0027port_id\u0027], internal_ip_address, router_id)"},{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1247,"context_line":"        if not self._is_router_interface_fip_supported:"},{"line_number":1248,"context_line":"            port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1249,"context_line":"            dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1250,"context_line":"            if (port_id and dev_owner and dev_owner in"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_31954995","line":1247,"range":{"start_line":1247,"start_character":8,"end_line":1247,"end_character":55},"updated":"2018-10-19 05:13:22.000000000","message":"Not necessary.","commit_id":"eac8a333aa9ccae3ada0bab77fde5db50f3a47d3"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"7b9502e3a771c5736a5897672b429d76cd0e2109","unresolved":false,"context_lines":[{"line_number":1244,"context_line":"        return (fip[\u0027port_id\u0027], internal_ip_address, router_id)"},{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"    def _assert_on_assoc_floatingip_to_router_if(self, fip, internal_port):"},{"line_number":1247,"context_line":"        if not self._is_router_interface_fip_supported:"},{"line_number":1248,"context_line":"            port_id \u003d fip[\u0027port_id\u0027]"},{"line_number":1249,"context_line":"            dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1250,"context_line":"            if (port_id and dev_owner and dev_owner in"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_148d827c","line":1247,"range":{"start_line":1247,"start_character":8,"end_line":1247,"end_character":55},"in_reply_to":"3f79a3b5_31954995","updated":"2018-10-21 07:11:53.000000000","message":"Please see previous comments (#4 for example)","commit_id":"eac8a333aa9ccae3ada0bab77fde5db50f3a47d3"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"cc48b68ca74c0b221034a4c2fd6046cd58b67cea","unresolved":false,"context_lines":[{"line_number":1249,"context_line":"            dev_owner \u003d internal_port[\u0027device_owner\u0027]"},{"line_number":1250,"context_line":"            if (port_id and dev_owner and dev_owner in"},{"line_number":1251,"context_line":"                    constants.ROUTER_INTERFACE_OWNERS):"},{"line_number":1252,"context_line":"                    msg \u003d _(\u0027Associating floatingip to router interface is \u0027"},{"line_number":1253,"context_line":"                            \u0027restricted\u0027)"},{"line_number":1254,"context_line":"                    raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":1255,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_b7edb0b9","line":1252,"range":{"start_line":1252,"start_character":55,"end_line":1252,"end_character":71},"updated":"2018-10-21 14:36:41.000000000","message":"Add the device_owner type here?","commit_id":"31a4d2f940aaa36dc2f00393df4a86e61944f4d5"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"fe5fa184b2ec5d5cf3b4f9fa902a7bb41003a374","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"                    constants.ROUTER_INTERFACE_OWNERS):"},{"line_number":1252,"context_line":"                    msg \u003d _(\u0027Associating floatingip to router interface %s is \u0027"},{"line_number":1253,"context_line":"                            \u0027restricted\u0027) % dev_owner"},{"line_number":1254,"context_line":"                    raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"    def _check_and_get_fip_assoc(self, context, fip, floatingip_obj):"},{"line_number":1257,"context_line":"        port_id \u003d internal_ip_address \u003d router_id \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_a453076e","line":1254,"range":{"start_line":1254,"start_character":53,"end_line":1254,"end_character":59},"updated":"2018-10-24 00:16:16.000000000","message":"Should it be floatingip?","commit_id":"9ee9b76475161bf2332d08d15f5796b5c02309a8"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"8ebfb73c3daa0978ed2cb41f5526b31324121d5c","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"                    constants.ROUTER_INTERFACE_OWNERS):"},{"line_number":1252,"context_line":"                    msg \u003d _(\u0027Associating floatingip to router interface %s is \u0027"},{"line_number":1253,"context_line":"                            \u0027restricted\u0027) % dev_owner"},{"line_number":1254,"context_line":"                    raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":1255,"context_line":""},{"line_number":1256,"context_line":"    def _check_and_get_fip_assoc(self, context, fip, floatingip_obj):"},{"line_number":1257,"context_line":"        port_id \u003d internal_ip_address \u003d router_id \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_b6a7b609","line":1254,"range":{"start_line":1254,"start_character":53,"end_line":1254,"end_character":59},"in_reply_to":"3f79a3b5_a453076e","updated":"2018-10-24 06:40:02.000000000","message":"Done","commit_id":"9ee9b76475161bf2332d08d15f5796b5c02309a8"}],"neutron/tests/unit/extensions/test_l3.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"235d4150ad30d0752389ce1f86a26b731517fc7b","unresolved":false,"context_lines":[{"line_number":2306,"context_line":"                    fip \u003d self._make_floatingip(self.fmt,"},{"line_number":2307,"context_line":"                                 public_sub[\u0027subnet\u0027][\u0027network_id\u0027])"},{"line_number":2308,"context_line":"                    res \u003d self._update(\u0027floatingips\u0027,"},{"line_number":2309,"context_line":"                                               fip[\u0027floatingip\u0027][\u0027id\u0027],"},{"line_number":2310,"context_line":"                                  {\u0027floatingip\u0027: {\u0027port_id\u0027: port_id}},"},{"line_number":2311,"context_line":"                                    expected_code\u003dexc.HTTPBadRequest.code)"},{"line_number":2312,"context_line":"                    self.assertIn(\"NeutronError\", res)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_fef81519","line":2309,"updated":"2018-10-18 10:35:25.000000000","message":"E127 continuation line over-indented for visual indent","commit_id":"d828c4abcd42be1fa15cc0c3004d4160a6e8a3c6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"235d4150ad30d0752389ce1f86a26b731517fc7b","unresolved":false,"context_lines":[{"line_number":2317,"context_line":"        # interface port with floatingip."},{"line_number":2318,"context_line":""},{"line_number":2319,"context_line":"        with self.subnet(cidr\u003d\u002730.0.0.0/24\u0027, gateway_ip\u003dNone) as private_sub:"},{"line_number":2320,"context_line":"           for device_owner in lib_constants.ROUTER_INTERFACE_OWNERS:"},{"line_number":2321,"context_line":"            with self.port(subnet\u003dprivate_sub, device_owner\u003ddevice_owner) as p:"},{"line_number":2322,"context_line":"                port_id \u003d p[\u0027port\u0027][\u0027id\u0027]"},{"line_number":2323,"context_line":"                with self.router() as r:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_1efe3104","line":2320,"updated":"2018-10-18 10:35:25.000000000","message":"E111 indentation is not a multiple of four","commit_id":"d828c4abcd42be1fa15cc0c3004d4160a6e8a3c6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"235d4150ad30d0752389ce1f86a26b731517fc7b","unresolved":false,"context_lines":[{"line_number":2327,"context_line":"                    self._set_net_external(public_sub[\u0027subnet\u0027][\u0027network_id\u0027])"},{"line_number":2328,"context_line":"                    self._add_external_gateway_to_router("},{"line_number":2329,"context_line":"                            r[\u0027router\u0027][\u0027id\u0027], public_sub[\u0027subnet\u0027]"},{"line_number":2330,"context_line":"                        [\u0027network_id\u0027])"},{"line_number":2331,"context_line":"                    fip \u003d self._make_floatingip(self.fmt,"},{"line_number":2332,"context_line":"                                    public_sub[\u0027subnet\u0027][\u0027network_id\u0027])"},{"line_number":2333,"context_line":"                    res \u003d self._update(\u0027floatingips\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_be029d07","line":2330,"updated":"2018-10-18 10:35:25.000000000","message":"E131 continuation line unaligned for hanging indent","commit_id":"d828c4abcd42be1fa15cc0c3004d4160a6e8a3c6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"235d4150ad30d0752389ce1f86a26b731517fc7b","unresolved":false,"context_lines":[{"line_number":2331,"context_line":"                    fip \u003d self._make_floatingip(self.fmt,"},{"line_number":2332,"context_line":"                                    public_sub[\u0027subnet\u0027][\u0027network_id\u0027])"},{"line_number":2333,"context_line":"                    res \u003d self._update(\u0027floatingips\u0027,"},{"line_number":2334,"context_line":"                                                fip[\u0027floatingip\u0027][\u0027id\u0027],"},{"line_number":2335,"context_line":"                                    {\u0027floatingip\u0027: {\u0027port_id\u0027: port_id}},"},{"line_number":2336,"context_line":"                                    expected_code\u003dexc.HTTPBadRequest.code)"},{"line_number":2337,"context_line":"                    self.assertIn(\"NeutronError\", res)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_de075917","line":2334,"updated":"2018-10-18 10:35:25.000000000","message":"E127 continuation line over-indented for visual indent","commit_id":"d828c4abcd42be1fa15cc0c3004d4160a6e8a3c6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"235d4150ad30d0752389ce1f86a26b731517fc7b","unresolved":false,"context_lines":[{"line_number":2338,"context_line":""},{"line_number":2339,"context_line":""},{"line_number":2340,"context_line":""},{"line_number":2341,"context_line":"    def test_floatingip_create_different_fixed_ip_same_port(self):"},{"line_number":2342,"context_line":"        \u0027\u0027\u0027This tests that it is possible to delete a port that has"},{"line_number":2343,"context_line":"        multiple floating ip addresses associated with it (each floating"},{"line_number":2344,"context_line":"        address associated with a unique fixed address)."}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_7e0c053a","line":2341,"updated":"2018-10-18 10:35:25.000000000","message":"E303 too many blank lines (3)","commit_id":"d828c4abcd42be1fa15cc0c3004d4160a6e8a3c6"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9b2ebe93ad4b1c90a2d51b8590649781b8d40c06","unresolved":false,"context_lines":[{"line_number":2308,"context_line":"                    res \u003d self._update(\u0027floatingips\u0027, fip[\u0027floatingip\u0027][\u0027id\u0027],"},{"line_number":2309,"context_line":"                                       {\u0027floatingip\u0027: {\u0027port_id\u0027: port_id}},"},{"line_number":2310,"context_line":"                                       expected_code\u003dexc.HTTPBadRequest.code)"},{"line_number":2311,"context_line":"                    self.assertIn(\"NeutronError\", res)"},{"line_number":2312,"context_line":""},{"line_number":2313,"context_line":"    def test_assign_floatingip_to_router_interface_device_owner_fail(self):"},{"line_number":2314,"context_line":"        # This tests that an error is raised when trying to assign a router"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_912c5d94","line":2311,"range":{"start_line":2311,"start_character":20,"end_line":2311,"end_character":54},"updated":"2018-10-19 05:13:22.000000000","message":"Line 2310 expected_code is enough.","commit_id":"eac8a333aa9ccae3ada0bab77fde5db50f3a47d3"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"7b9502e3a771c5736a5897672b429d76cd0e2109","unresolved":false,"context_lines":[{"line_number":2308,"context_line":"                    res \u003d self._update(\u0027floatingips\u0027, fip[\u0027floatingip\u0027][\u0027id\u0027],"},{"line_number":2309,"context_line":"                                       {\u0027floatingip\u0027: {\u0027port_id\u0027: port_id}},"},{"line_number":2310,"context_line":"                                       expected_code\u003dexc.HTTPBadRequest.code)"},{"line_number":2311,"context_line":"                    self.assertIn(\"NeutronError\", res)"},{"line_number":2312,"context_line":""},{"line_number":2313,"context_line":"    def test_assign_floatingip_to_router_interface_device_owner_fail(self):"},{"line_number":2314,"context_line":"        # This tests that an error is raised when trying to assign a router"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_d4862a60","line":2311,"range":{"start_line":2311,"start_character":20,"end_line":2311,"end_character":54},"in_reply_to":"3f79a3b5_912c5d94","updated":"2018-10-21 07:11:53.000000000","message":"you are right. thanks, will remove it.","commit_id":"eac8a333aa9ccae3ada0bab77fde5db50f3a47d3"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9b2ebe93ad4b1c90a2d51b8590649781b8d40c06","unresolved":false,"context_lines":[{"line_number":2333,"context_line":"                        res \u003d self._update(\u0027floatingips\u0027, fip[\u0027floatingip\u0027]["},{"line_number":2334,"context_line":"                            \u0027id\u0027], {\u0027floatingip\u0027: {\u0027port_id\u0027: port_id}},"},{"line_number":2335,"context_line":"                                    expected_code\u003dexc.HTTPBadRequest.code)"},{"line_number":2336,"context_line":"                        self.assertIn(\"NeutronError\", res)"},{"line_number":2337,"context_line":""},{"line_number":2338,"context_line":"    def test_floatingip_create_different_fixed_ip_same_port(self):"},{"line_number":2339,"context_line":"        \u0027\u0027\u0027This tests that it is possible to delete a port that has"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_514c8574","line":2336,"range":{"start_line":2336,"start_character":24,"end_line":2336,"end_character":58},"updated":"2018-10-19 05:13:22.000000000","message":"ditto","commit_id":"eac8a333aa9ccae3ada0bab77fde5db50f3a47d3"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"7b9502e3a771c5736a5897672b429d76cd0e2109","unresolved":false,"context_lines":[{"line_number":2333,"context_line":"                        res \u003d self._update(\u0027floatingips\u0027, fip[\u0027floatingip\u0027]["},{"line_number":2334,"context_line":"                            \u0027id\u0027], {\u0027floatingip\u0027: {\u0027port_id\u0027: port_id}},"},{"line_number":2335,"context_line":"                                    expected_code\u003dexc.HTTPBadRequest.code)"},{"line_number":2336,"context_line":"                        self.assertIn(\"NeutronError\", res)"},{"line_number":2337,"context_line":""},{"line_number":2338,"context_line":"    def test_floatingip_create_different_fixed_ip_same_port(self):"},{"line_number":2339,"context_line":"        \u0027\u0027\u0027This tests that it is possible to delete a port that has"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_74e3963b","line":2336,"range":{"start_line":2336,"start_character":24,"end_line":2336,"end_character":58},"in_reply_to":"3f79a3b5_514c8574","updated":"2018-10-21 07:11:53.000000000","message":"removing.","commit_id":"eac8a333aa9ccae3ada0bab77fde5db50f3a47d3"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"cc48b68ca74c0b221034a4c2fd6046cd58b67cea","unresolved":false,"context_lines":[{"line_number":2889,"context_line":"                    private_sub \u003d {\u0027subnet\u0027: {\u0027id\u0027: sid}}"},{"line_number":2890,"context_line":"                    self._router_interface_action(\u0027add\u0027, r[\u0027router\u0027][\u0027id\u0027],"},{"line_number":2891,"context_line":"                                                  private_sub[\u0027subnet\u0027][\u0027id\u0027],"},{"line_number":2892,"context_line":"                                                  None)"},{"line_number":2893,"context_line":"                    res \u003d self._create_floatingip("},{"line_number":2894,"context_line":"                        self.fmt,"},{"line_number":2895,"context_line":"                        public_network[\u0027network\u0027][\u0027id\u0027],"},{"line_number":2896,"context_line":"                        port_id\u003dprivate_port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":2897,"context_line":"                    self.assertEqual(400, res.status_int)"},{"line_number":2898,"context_line":""},{"line_number":2899,"context_line":"    def test_create_floatingip_invalid_floating_network_id_returns_400(self):"},{"line_number":2900,"context_line":"        # API-level test - no need to create all objects for l3 plugin"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_17efc4b2","line":2897,"range":{"start_line":2892,"start_character":55,"end_line":2897,"end_character":57},"updated":"2018-10-21 14:36:41.000000000","message":"This is not related to this patch.","commit_id":"31a4d2f940aaa36dc2f00393df4a86e61944f4d5"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"fe5fa184b2ec5d5cf3b4f9fa902a7bb41003a374","unresolved":false,"context_lines":[{"line_number":2894,"context_line":"                        self.fmt,"},{"line_number":2895,"context_line":"                        public_network[\u0027network\u0027][\u0027id\u0027],"},{"line_number":2896,"context_line":"                        port_id\u003dprivate_port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":2897,"context_line":"                    self.assertEqual(400, res.status_int)"},{"line_number":2898,"context_line":""},{"line_number":2899,"context_line":"    def test_create_floatingip_invalid_floating_network_id_returns_400(self):"},{"line_number":2900,"context_line":"        # API-level test - no need to create all objects for l3 plugin"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_e40fbf88","line":2897,"range":{"start_line":2897,"start_character":37,"end_line":2897,"end_character":40},"updated":"2018-10-24 00:16:16.000000000","message":"Why do you change here? The exc.HTTPBadRequest.code means 400.","commit_id":"9ee9b76475161bf2332d08d15f5796b5c02309a8"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"8ebfb73c3daa0978ed2cb41f5526b31324121d5c","unresolved":false,"context_lines":[{"line_number":2894,"context_line":"                        self.fmt,"},{"line_number":2895,"context_line":"                        public_network[\u0027network\u0027][\u0027id\u0027],"},{"line_number":2896,"context_line":"                        port_id\u003dprivate_port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":2897,"context_line":"                    self.assertEqual(400, res.status_int)"},{"line_number":2898,"context_line":""},{"line_number":2899,"context_line":"    def test_create_floatingip_invalid_floating_network_id_returns_400(self):"},{"line_number":2900,"context_line":"        # API-level test - no need to create all objects for l3 plugin"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_16978a9e","line":2897,"range":{"start_line":2897,"start_character":37,"end_line":2897,"end_character":40},"in_reply_to":"3f79a3b5_e40fbf88","updated":"2018-10-24 06:40:02.000000000","message":"will revert to original code.","commit_id":"9ee9b76475161bf2332d08d15f5796b5c02309a8"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"fe5fa184b2ec5d5cf3b4f9fa902a7bb41003a374","unresolved":false,"context_lines":[{"line_number":2918,"context_line":"        # API-level test - no need to create all objects for l3 plugin"},{"line_number":2919,"context_line":"        res \u003d self._create_floatingip(self.fmt, uuidutils.generate_uuid(),"},{"line_number":2920,"context_line":"                                      uuidutils.generate_uuid(), \u00272001:db8::a\u0027)"},{"line_number":2921,"context_line":"        self.assertEqual(exc.HTTPBadRequest.code, res.status_int)"},{"line_number":2922,"context_line":""},{"line_number":2923,"context_line":"    def test_floatingip_list_with_sort(self):"},{"line_number":2924,"context_line":"        with self.subnet(cidr\u003d\"10.0.0.0/24\") as s1,\\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_e4749f06","line":2921,"range":{"start_line":2921,"start_character":25,"end_line":2921,"end_character":48},"updated":"2018-10-24 00:16:16.000000000","message":"So let\u0027s not change the original code here, if you wants to change, you can submit another patch, it seems lots of 400 and exc.HTTPBadRequest.code here.","commit_id":"9ee9b76475161bf2332d08d15f5796b5c02309a8"},{"author":{"_account_id":27546,"name":"Michal Kelner Mishali","email":"mkelnermishal@vmware.com","username":"mkelnermishal"},"change_message_id":"8ebfb73c3daa0978ed2cb41f5526b31324121d5c","unresolved":false,"context_lines":[{"line_number":2918,"context_line":"        # API-level test - no need to create all objects for l3 plugin"},{"line_number":2919,"context_line":"        res \u003d self._create_floatingip(self.fmt, uuidutils.generate_uuid(),"},{"line_number":2920,"context_line":"                                      uuidutils.generate_uuid(), \u00272001:db8::a\u0027)"},{"line_number":2921,"context_line":"        self.assertEqual(exc.HTTPBadRequest.code, res.status_int)"},{"line_number":2922,"context_line":""},{"line_number":2923,"context_line":"    def test_floatingip_list_with_sort(self):"},{"line_number":2924,"context_line":"        with self.subnet(cidr\u003d\"10.0.0.0/24\") as s1,\\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_f6a1aef7","line":2921,"range":{"start_line":2921,"start_character":25,"end_line":2921,"end_character":48},"in_reply_to":"3f79a3b5_e4749f06","updated":"2018-10-24 06:40:02.000000000","message":"will revert to original code.","commit_id":"9ee9b76475161bf2332d08d15f5796b5c02309a8"}]}
