)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"12be118d188f60802cc155f585193e13ee809f6f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     LIU Yulong \u003cliuyulong@le.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-08 18:05:03 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Provent unnecessary floating IP dissociate during updating extra attirbutes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If try to updating extra attirbutes, such as description, the floating"},{"line_number":10,"context_line":"IP nat rules will be removed from ovn dbs once, which is unnecessary"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa31d9ce_1dd56eb8","line":7,"updated":"2017-02-13 07:00:36.000000000","message":"nit: Few Typos\n - s/Provent/Prevent\n - s/attirbutes/attributes","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"48183b8cdab033116c36bbcf6fc1137204fc538a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     LIU Yulong \u003cliuyulong@le.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-08 18:05:03 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Provent unnecessary floating IP dissociate during updating extra attirbutes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If try to updating extra attirbutes, such as description, the floating"},{"line_number":10,"context_line":"IP nat rules will be removed from ovn dbs once, which is unnecessary"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa31d9ce_c07929fe","line":7,"in_reply_to":"fa31d9ce_1dd56eb8","updated":"2017-02-13 08:14:53.000000000","message":"Done","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"12be118d188f60802cc155f585193e13ee809f6f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Provent unnecessary floating IP dissociate during updating extra attirbutes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If try to updating extra attirbutes, such as description, the floating"},{"line_number":10,"context_line":"IP nat rules will be removed from ovn dbs once, which is unnecessary"},{"line_number":11,"context_line":"and causing connection lose."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa31d9ce_3ddcf2e3","line":9,"updated":"2017-02-13 07:00:36.000000000","message":"s/attirbutes/attributes","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"48183b8cdab033116c36bbcf6fc1137204fc538a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Provent unnecessary floating IP dissociate during updating extra attirbutes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If try to updating extra attirbutes, such as description, the floating"},{"line_number":10,"context_line":"IP nat rules will be removed from ovn dbs once, which is unnecessary"},{"line_number":11,"context_line":"and causing connection lose."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa31d9ce_e07c6ded","line":9,"in_reply_to":"fa31d9ce_3ddcf2e3","updated":"2017-02-13 08:14:53.000000000","message":"Done","commit_id":"0688a48c38da752ee104116ce824003236389452"}],"networking_ovn/l3/l3_ovn.py":[{"author":{"_account_id":23458,"name":"Dong Jun","email":"dongjun.01@bytedance.com","username":"Dongj"},"change_message_id":"004e5615348f75aec88f76e3a1019c15d78e4566","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        fip \u003d super(OVNL3RouterPlugin, self).update_floatingip(context, id,"},{"line_number":844,"context_line":"                                                               floatingip)"},{"line_number":845,"context_line":"        new_router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":846,"context_line":"        if ((previous_router_id and not new_router_id)"},{"line_number":847,"context_line":"            or (previous_router_id and new_router_id"},{"line_number":848,"context_line":"                and previous_router_id !\u003d new_router_id)):"},{"line_number":849,"context_line":"            update_fip \u003d {}"},{"line_number":850,"context_line":"            router \u003d self.get_router(context.elevated(), previous_router_id)"},{"line_number":851,"context_line":"            update_fip[\u0027logical_ip\u0027] \u003d previous_fip[\u0027fixed_ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_935597fb","line":848,"range":{"start_line":846,"start_character":11,"end_line":848,"end_character":57},"updated":"2017-02-07 11:03:06.000000000","message":"I think some scenarios can not be covered with this change.\ne.g. update port_id only, the router_id does not change, but floating ip in OVN should be re-associated as following.\ncurl -g -i -X PUT http://controller:9696/v2.0/floatingips/1aef2ecc-2283-4355-997e-1d5543355442.json -d \u0027{\"floatingip\": {\"port_id\": \"408693ca-576e-434b-a68e-614ee8dd70cb\"}}\u0027 -H \"X-Auth-Token: gAAAAABYmaTQi5iFDPsLWxQm0Rd3NrIP7LfVDfU_yw1cTMXH9konvsTeYDZ4hFKwDmsKEfJwVyxEiIdCC3vVNnChOChH9dcHV0EXgY8w8FamEX9Fm_qPESkIwqjrLC1s1i5exUjAeYfmT9Bh1UsvnctZ1wCaOxwYS-q750ZC9I87WcKEiVcGwZM\"\nHTTP/1.1 200 OK\nContent-Type: application/json\nContent-Length: 535\nX-Openstack-Request-Id: req-1692e79d-6935-4037-b08a-02f5565c4d15\nDate: Tue, 07 Feb 2017 10:48:55 GMT\n\n{\"floatingip\": {\"router_id\": \"5c3c3f63-fdd0-4e9b-88f9-bfe802ab387f\", \"status\": \"ACTIVE\", \"description\": \"\", \"updated_at\": \"2017-02-07T10:48:55Z\", \"floating_network_id\": \"5fa77f77-ebc1-4bf9-8cb2-c6d02ca44192\", \"fixed_ip_address\": \"10.0.0.10\", \"floating_ip_address\": \"172.24.4.7\", \"revision_number\": 3, \"port_id\": \"408693ca-576e-434b-a68e-614ee8dd70cb\", \"id\": \"1aef2ecc-2283-4355-997e-1d5543355442\", \"tenant_id\": \"a2296324fdde4bd5aa2694e3b1e310b1\", \"created_at\": \"2017-02-07T07:56:20Z\", \"project_id\": \"a2296324fdde4bd5aa2694e3b1e310b1\"}}","commit_id":"613d65de582666cb3bc25c234a82f9b30df11c81"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7b73a03d5107223a97eb70613c5969b20606d473","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        fip \u003d super(OVNL3RouterPlugin, self).update_floatingip(context, id,"},{"line_number":844,"context_line":"                                                               floatingip)"},{"line_number":845,"context_line":"        new_router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":846,"context_line":"        if ((previous_router_id and not new_router_id)"},{"line_number":847,"context_line":"            or (previous_router_id and new_router_id"},{"line_number":848,"context_line":"                and previous_router_id !\u003d new_router_id)):"},{"line_number":849,"context_line":"            update_fip \u003d {}"},{"line_number":850,"context_line":"            router \u003d self.get_router(context.elevated(), previous_router_id)"},{"line_number":851,"context_line":"            update_fip[\u0027logical_ip\u0027] \u003d previous_fip[\u0027fixed_ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a430d35_4d454bb1","line":848,"range":{"start_line":846,"start_character":11,"end_line":848,"end_character":57},"in_reply_to":"1a430d35_935597fb","updated":"2017-02-07 12:28:39.000000000","message":"excellent, I\u0027ll update this. Thank you very much.","commit_id":"613d65de582666cb3bc25c234a82f9b30df11c81"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"aecf2a3e3cb9862e040204c2d3c771740663be10","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        fip \u003d super(OVNL3RouterPlugin, self).update_floatingip(context, id,"},{"line_number":844,"context_line":"                                                               floatingip)"},{"line_number":845,"context_line":"        new_port_id \u003d fip.get(\u0027port_id\u0027)"},{"line_number":846,"context_line":"        if (previous_port_id and ("},{"line_number":847,"context_line":"                not new_port_id or ("},{"line_number":848,"context_line":"                    new_port_id and new_port_id !\u003d previous_port_id))):"},{"line_number":849,"context_line":"            # 1. Floating IP dissociated"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_3da4f2a4","line":846,"updated":"2017-02-13 06:58:55.000000000","message":"You can simplify this if as\n\nif previous_port_id and previous_port_id !\u003d new_port_id:\n   ...\n   ...\n\n...","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"48183b8cdab033116c36bbcf6fc1137204fc538a","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        fip \u003d super(OVNL3RouterPlugin, self).update_floatingip(context, id,"},{"line_number":844,"context_line":"                                                               floatingip)"},{"line_number":845,"context_line":"        new_port_id \u003d fip.get(\u0027port_id\u0027)"},{"line_number":846,"context_line":"        if (previous_port_id and ("},{"line_number":847,"context_line":"                not new_port_id or ("},{"line_number":848,"context_line":"                    new_port_id and new_port_id !\u003d previous_port_id))):"},{"line_number":849,"context_line":"            # 1. Floating IP dissociated"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_a04a75aa","line":846,"in_reply_to":"fa31d9ce_3da4f2a4","updated":"2017-02-13 08:14:53.000000000","message":"Done","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":23458,"name":"Dong Jun","email":"dongjun.01@bytedance.com","username":"Dongj"},"change_message_id":"d90c476008eb9b4ad7045f67b2ca9579aac253f0","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        new_port_id \u003d fip.get(\u0027port_id\u0027)"},{"line_number":846,"context_line":"        if (previous_port_id and ("},{"line_number":847,"context_line":"                not new_port_id or ("},{"line_number":848,"context_line":"                    new_port_id and new_port_id !\u003d previous_port_id))):"},{"line_number":849,"context_line":"            # 1. Floating IP dissociated"},{"line_number":850,"context_line":"            # 2. Floating IP re-associated to a new port"},{"line_number":851,"context_line":"            update_fip \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_60cddd5c","line":848,"updated":"2017-02-13 07:42:13.000000000","message":"If an internal port has multiple associated IP addresses, the service chooses the first IP address unless you explicitly define a fixed IP address in the fixed_ip_address parameter.\nThe scenario for re-associating floating IP to another fixed IP in the same port missed.","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"48183b8cdab033116c36bbcf6fc1137204fc538a","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        new_port_id \u003d fip.get(\u0027port_id\u0027)"},{"line_number":846,"context_line":"        if (previous_port_id and ("},{"line_number":847,"context_line":"                not new_port_id or ("},{"line_number":848,"context_line":"                    new_port_id and new_port_id !\u003d previous_port_id))):"},{"line_number":849,"context_line":"            # 1. Floating IP dissociated"},{"line_number":850,"context_line":"            # 2. Floating IP re-associated to a new port"},{"line_number":851,"context_line":"            update_fip \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_bbdd4a16","line":848,"in_reply_to":"fa31d9ce_60cddd5c","updated":"2017-02-13 08:14:53.000000000","message":"OK, ovn needs to update the NAT rules in such scenario, I will add a new scenario:\n3. Floating IP re-associated to a new fixed_ip (same port)","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"7ab30b2f72f10140aac2c814705b33ad7be68e1b","unresolved":false,"context_lines":[{"line_number":859,"context_line":"                self._update_floating_ip_in_ovn(context,"},{"line_number":860,"context_line":"                                                previous_fip[\u0027router_id\u0027],"},{"line_number":861,"context_line":"                                                update_fip, associate\u003dFalse)"},{"line_number":862,"context_line":"                self.update_floatingip_status(context, id,"},{"line_number":863,"context_line":"                                              n_const.FLOATINGIP_STATUS_DOWN)"},{"line_number":864,"context_line":"            except Exception:"},{"line_number":865,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_0a7cc5b3","line":862,"updated":"2017-02-15 12:46:24.000000000","message":"I suggest one more change.\n\nYou can move self.update_floatingip_status(..) from here and in L880 at the end (i.e at L 886) so that we can have just one call to update floating ip status.\n\nSome thing like\n\ndef update_floatingip(...):\n   fip_status \u003d None\n\n   if previous_port_id and ..... :\n       ...\n       ...\n       fip_status \u003d n_const.FLOATINGIP_STATUS_DOWN\n       ...\n\n\n   if new_port_id:\n       ... \n       ...\n       fip_status \u003d n_const.FLOATINGIP_STATUS_UP\n       ...\n\n\n   if fip_status:\n      self.update_floatingip_status(context, id, port_status)","commit_id":"692c52126441c1f45199330d19675727f048320d"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"424621ee974d6316021c70a07f3179eea9e69306","unresolved":false,"context_lines":[{"line_number":859,"context_line":"                self._update_floating_ip_in_ovn(context,"},{"line_number":860,"context_line":"                                                previous_fip[\u0027router_id\u0027],"},{"line_number":861,"context_line":"                                                update_fip, associate\u003dFalse)"},{"line_number":862,"context_line":"                self.update_floatingip_status(context, id,"},{"line_number":863,"context_line":"                                              n_const.FLOATINGIP_STATUS_DOWN)"},{"line_number":864,"context_line":"            except Exception:"},{"line_number":865,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_e56162d4","line":862,"in_reply_to":"fa31d9ce_0a7cc5b3","updated":"2017-02-15 12:52:51.000000000","message":"Done","commit_id":"692c52126441c1f45199330d19675727f048320d"}],"networking_ovn/tests/unit/l3/test_l3_ovn.py":[{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"aecf2a3e3cb9862e040204c2d3c771740663be10","unresolved":false,"context_lines":[{"line_number":921,"context_line":"        gr.return_value \u003d {\u0027gw_port_id\u0027: \u0027gw-port-id\u0027}"},{"line_number":922,"context_line":"        self.l3_plugin.update_floatingip(self.context, \u0027id\u0027, \u0027floatingip\u0027)"},{"line_number":923,"context_line":"        self.assertEqual("},{"line_number":924,"context_line":"            0, self.l3_plugin._ovn.delete_nat_rule_in_lrouter.call_count)"},{"line_number":925,"context_line":"        self.assertEqual("},{"line_number":926,"context_line":"            0,"},{"line_number":927,"context_line":"            (self.l3_plugin._ovn."}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_bd12a2b2","line":924,"updated":"2017-02-13 06:58:55.000000000","message":"Instead of assertEqual(0,...) you can use\nself.l3_plugin._ovn.delete_nat_rule_in_lrouter.assert_not_called()","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"48183b8cdab033116c36bbcf6fc1137204fc538a","unresolved":false,"context_lines":[{"line_number":921,"context_line":"        gr.return_value \u003d {\u0027gw_port_id\u0027: \u0027gw-port-id\u0027}"},{"line_number":922,"context_line":"        self.l3_plugin.update_floatingip(self.context, \u0027id\u0027, \u0027floatingip\u0027)"},{"line_number":923,"context_line":"        self.assertEqual("},{"line_number":924,"context_line":"            0, self.l3_plugin._ovn.delete_nat_rule_in_lrouter.call_count)"},{"line_number":925,"context_line":"        self.assertEqual("},{"line_number":926,"context_line":"            0,"},{"line_number":927,"context_line":"            (self.l3_plugin._ovn."}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_203f65d7","line":924,"in_reply_to":"fa31d9ce_bd12a2b2","updated":"2017-02-13 08:14:53.000000000","message":"Done","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"aecf2a3e3cb9862e040204c2d3c771740663be10","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        self.assertEqual("},{"line_number":924,"context_line":"            0, self.l3_plugin._ovn.delete_nat_rule_in_lrouter.call_count)"},{"line_number":925,"context_line":"        self.assertEqual("},{"line_number":926,"context_line":"            0,"},{"line_number":927,"context_line":"            (self.l3_plugin._ovn."},{"line_number":928,"context_line":"             delete_nat_ip_from_lrport_peer_options.call_count))"},{"line_number":929,"context_line":"        self.l3_plugin._ovn.add_nat_rule_in_lrouter.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_fd0c1a96","line":926,"updated":"2017-02-13 06:58:55.000000000","message":"Same as above","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"48183b8cdab033116c36bbcf6fc1137204fc538a","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        self.assertEqual("},{"line_number":924,"context_line":"            0, self.l3_plugin._ovn.delete_nat_rule_in_lrouter.call_count)"},{"line_number":925,"context_line":"        self.assertEqual("},{"line_number":926,"context_line":"            0,"},{"line_number":927,"context_line":"            (self.l3_plugin._ovn."},{"line_number":928,"context_line":"             delete_nat_ip_from_lrport_peer_options.call_count))"},{"line_number":929,"context_line":"        self.l3_plugin._ovn.add_nat_rule_in_lrouter.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_402619cf","line":926,"in_reply_to":"fa31d9ce_fd0c1a96","updated":"2017-02-13 08:14:53.000000000","message":"Done","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":10237,"name":"Numan Siddique","email":"nusiddiq@redhat.com","username":"numansiddique"},"change_message_id":"aecf2a3e3cb9862e040204c2d3c771740663be10","unresolved":false,"context_lines":[{"line_number":946,"context_line":"        gr.return_value \u003d {\u0027gw_port_id\u0027: \u0027gw-port-id\u0027}"},{"line_number":947,"context_line":"        self.l3_plugin.update_floatingip(self.context, \u0027id\u0027, \u0027floatingip\u0027)"},{"line_number":948,"context_line":"        self.assertEqual("},{"line_number":949,"context_line":"            0, self.l3_plugin._ovn.delete_nat_rule_in_lrouter.call_count)"},{"line_number":950,"context_line":"        self.assertEqual("},{"line_number":951,"context_line":"            0,"},{"line_number":952,"context_line":"            (self.l3_plugin._ovn."}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_9d1cfec2","line":949,"updated":"2017-02-13 06:58:55.000000000","message":"Same as L924","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"48183b8cdab033116c36bbcf6fc1137204fc538a","unresolved":false,"context_lines":[{"line_number":946,"context_line":"        gr.return_value \u003d {\u0027gw_port_id\u0027: \u0027gw-port-id\u0027}"},{"line_number":947,"context_line":"        self.l3_plugin.update_floatingip(self.context, \u0027id\u0027, \u0027floatingip\u0027)"},{"line_number":948,"context_line":"        self.assertEqual("},{"line_number":949,"context_line":"            0, self.l3_plugin._ovn.delete_nat_rule_in_lrouter.call_count)"},{"line_number":950,"context_line":"        self.assertEqual("},{"line_number":951,"context_line":"            0,"},{"line_number":952,"context_line":"            (self.l3_plugin._ovn."}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_60215db4","line":949,"in_reply_to":"fa31d9ce_9d1cfec2","updated":"2017-02-13 08:14:53.000000000","message":"Done","commit_id":"0688a48c38da752ee104116ce824003236389452"},{"author":{"_account_id":23458,"name":"Dong Jun","email":"dongjun.01@bytedance.com","username":"Dongj"},"change_message_id":"7274b728b7cf72f7aaca8a93ba9cf64512908de4","unresolved":false,"context_lines":[{"line_number":640,"context_line":"            logical_ip\u003d\u002710.10.10.10\u0027,"},{"line_number":641,"context_line":"            external_ip\u003d\u0027192.168.0.10\u0027)"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin.get_router\u0027)"},{"line_number":644,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin._get_floatingip\u0027)"},{"line_number":645,"context_line":"    @mock.patch(\u0027neutron.db.extraroute_db.ExtraRoute_dbonly_mixin.\u0027"},{"line_number":646,"context_line":"                \u0027update_floatingip\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da36d5c6_5f702172","line":643,"range":{"start_line":643,"start_character":0,"end_line":643,"end_character":66},"updated":"2017-02-27 05:25:26.000000000","message":"Could you remove this line, it\u0027s useless now.","commit_id":"d5377524badd4881be55e54b555bfaf36f5dfafd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ba34618f859605719bd2b66b7dc34d01ce7d9dbd","unresolved":false,"context_lines":[{"line_number":640,"context_line":"            logical_ip\u003d\u002710.10.10.10\u0027,"},{"line_number":641,"context_line":"            external_ip\u003d\u0027192.168.0.10\u0027)"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin.get_router\u0027)"},{"line_number":644,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin._get_floatingip\u0027)"},{"line_number":645,"context_line":"    @mock.patch(\u0027neutron.db.extraroute_db.ExtraRoute_dbonly_mixin.\u0027"},{"line_number":646,"context_line":"                \u0027update_floatingip\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba2be162_ed2f419f","line":643,"range":{"start_line":643,"start_character":0,"end_line":643,"end_character":66},"in_reply_to":"da36d5c6_5f702172","updated":"2017-03-01 06:54:14.000000000","message":"Done","commit_id":"d5377524badd4881be55e54b555bfaf36f5dfafd"},{"author":{"_account_id":23458,"name":"Dong Jun","email":"dongjun.01@bytedance.com","username":"Dongj"},"change_message_id":"7274b728b7cf72f7aaca8a93ba9cf64512908de4","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        self.fake_floating_ip.update({\u0027fixed_port_id\u0027: None})"},{"line_number":649,"context_line":"        gf.return_value \u003d self.fake_floating_ip"},{"line_number":650,"context_line":"        uf.return_value \u003d self.fake_floating_ip_new"},{"line_number":651,"context_line":"        gr.return_value \u003d {\u0027gw_port_id\u0027: \u0027gw-port-id\u0027}"},{"line_number":652,"context_line":"        self.l3_plugin.update_floatingip(self.context, \u0027id\u0027, \u0027floatingip\u0027)"},{"line_number":653,"context_line":"        self.l3_plugin._ovn.delete_nat_rule_in_lrouter.assert_not_called()"},{"line_number":654,"context_line":"        self.l3_plugin._ovn.add_nat_rule_in_lrouter.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":5,"id":"da36d5c6_9f6619b9","line":651,"range":{"start_line":651,"start_character":8,"end_line":651,"end_character":54},"updated":"2017-02-27 05:25:26.000000000","message":"Same as above","commit_id":"d5377524badd4881be55e54b555bfaf36f5dfafd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ba34618f859605719bd2b66b7dc34d01ce7d9dbd","unresolved":false,"context_lines":[{"line_number":648,"context_line":"        self.fake_floating_ip.update({\u0027fixed_port_id\u0027: None})"},{"line_number":649,"context_line":"        gf.return_value \u003d self.fake_floating_ip"},{"line_number":650,"context_line":"        uf.return_value \u003d self.fake_floating_ip_new"},{"line_number":651,"context_line":"        gr.return_value \u003d {\u0027gw_port_id\u0027: \u0027gw-port-id\u0027}"},{"line_number":652,"context_line":"        self.l3_plugin.update_floatingip(self.context, \u0027id\u0027, \u0027floatingip\u0027)"},{"line_number":653,"context_line":"        self.l3_plugin._ovn.delete_nat_rule_in_lrouter.assert_not_called()"},{"line_number":654,"context_line":"        self.l3_plugin._ovn.add_nat_rule_in_lrouter.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":5,"id":"ba2be162_4d1dad72","line":651,"range":{"start_line":651,"start_character":8,"end_line":651,"end_character":54},"in_reply_to":"da36d5c6_9f6619b9","updated":"2017-03-01 06:54:14.000000000","message":"Done","commit_id":"d5377524badd4881be55e54b555bfaf36f5dfafd"},{"author":{"_account_id":23458,"name":"Dong Jun","email":"dongjun.01@bytedance.com","username":"Dongj"},"change_message_id":"7274b728b7cf72f7aaca8a93ba9cf64512908de4","unresolved":false,"context_lines":[{"line_number":657,"context_line":"            logical_ip\u003d\u002710.10.10.10\u0027,"},{"line_number":658,"context_line":"            external_ip\u003d\u0027192.168.0.10\u0027)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin.get_router\u0027)"},{"line_number":661,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin._get_floatingip\u0027)"},{"line_number":662,"context_line":"    @mock.patch(\u0027neutron.db.extraroute_db.ExtraRoute_dbonly_mixin.\u0027"},{"line_number":663,"context_line":"                \u0027update_floatingip\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da36d5c6_bf075dc8","line":660,"range":{"start_line":660,"start_character":4,"end_line":660,"end_character":66},"updated":"2017-02-27 05:25:26.000000000","message":"Same as above","commit_id":"d5377524badd4881be55e54b555bfaf36f5dfafd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ba34618f859605719bd2b66b7dc34d01ce7d9dbd","unresolved":false,"context_lines":[{"line_number":657,"context_line":"            logical_ip\u003d\u002710.10.10.10\u0027,"},{"line_number":658,"context_line":"            external_ip\u003d\u0027192.168.0.10\u0027)"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin.get_router\u0027)"},{"line_number":661,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin._get_floatingip\u0027)"},{"line_number":662,"context_line":"    @mock.patch(\u0027neutron.db.extraroute_db.ExtraRoute_dbonly_mixin.\u0027"},{"line_number":663,"context_line":"                \u0027update_floatingip\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba2be162_6d127164","line":660,"range":{"start_line":660,"start_character":4,"end_line":660,"end_character":66},"in_reply_to":"da36d5c6_bf075dc8","updated":"2017-03-01 06:54:14.000000000","message":"Done","commit_id":"d5377524badd4881be55e54b555bfaf36f5dfafd"},{"author":{"_account_id":23458,"name":"Dong Jun","email":"dongjun.01@bytedance.com","username":"Dongj"},"change_message_id":"7274b728b7cf72f7aaca8a93ba9cf64512908de4","unresolved":false,"context_lines":[{"line_number":674,"context_line":"        self.l3_plugin._ovn. \\"},{"line_number":675,"context_line":"            add_nat_rule_in_lrouter.assert_not_called()"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin.get_router\u0027)"},{"line_number":678,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin._get_floatingip\u0027)"},{"line_number":679,"context_line":"    @mock.patch(\u0027neutron.db.extraroute_db.ExtraRoute_dbonly_mixin.\u0027"},{"line_number":680,"context_line":"                \u0027update_floatingip\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da36d5c6_df0a51d1","line":677,"range":{"start_line":677,"start_character":4,"end_line":677,"end_character":66},"updated":"2017-02-27 05:25:26.000000000","message":"Same as above","commit_id":"d5377524badd4881be55e54b555bfaf36f5dfafd"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"ba34618f859605719bd2b66b7dc34d01ce7d9dbd","unresolved":false,"context_lines":[{"line_number":674,"context_line":"        self.l3_plugin._ovn. \\"},{"line_number":675,"context_line":"            add_nat_rule_in_lrouter.assert_not_called()"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin.get_router\u0027)"},{"line_number":678,"context_line":"    @mock.patch(\u0027neutron.db.l3_db.L3_NAT_dbonly_mixin._get_floatingip\u0027)"},{"line_number":679,"context_line":"    @mock.patch(\u0027neutron.db.extraroute_db.ExtraRoute_dbonly_mixin.\u0027"},{"line_number":680,"context_line":"                \u0027update_floatingip\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba2be162_cd099d33","line":677,"range":{"start_line":677,"start_character":4,"end_line":677,"end_character":66},"in_reply_to":"da36d5c6_df0a51d1","updated":"2017-03-01 06:54:14.000000000","message":"Done","commit_id":"d5377524badd4881be55e54b555bfaf36f5dfafd"}]}
