)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"58abef0074c5315d24c8ea94f7cc5d51a15d3975","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Set router_id if floating IP has port_forwardings"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Check if port_forwarding is enabled, and set floating IP\u0027s router_id"},{"line_number":10,"context_line":"when it has port_forwardings during the upate API."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: chenguobin \u003cchengb@chinatelecom.cn\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_9fb442d5","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":35},"updated":"2018-11-02 22:17:59.000000000","message":"I guess this is changed in the latest patchset? It seems you are not checking the port_forwarding extension anymore.","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a7c8d5f33afa3fb23fc28224c0c6f312ef18047c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Set router_id if floating IP has port_forwardings"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Check if port_forwarding is enabled, and set floating IP\u0027s router_id"},{"line_number":10,"context_line":"when it has port_forwardings during the upate API."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: chenguobin \u003cchengb@chinatelecom.cn\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_2dce0558","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":35},"in_reply_to":"3f79a3b5_9fb442d5","updated":"2018-11-06 01:50:25.000000000","message":"Done","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"3a8997e5fc09783b56bad842bcf84d940115ef5d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Set router_id if floating IP has port_forwardings"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Check if port_forwarding is enabled, and set floating IP\u0027s router_id"},{"line_number":10,"context_line":"when it has port_forwardings during the upate API."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: chenguobin \u003cchengb@chinatelecom.cn\u003e"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_993794fe","line":10,"updated":"2018-11-02 11:26:50.000000000","message":"nit: s/upate/update/","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a7c8d5f33afa3fb23fc28224c0c6f312ef18047c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Set router_id if floating IP has port_forwardings"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Check if port_forwarding is enabled, and set floating IP\u0027s router_id"},{"line_number":10,"context_line":"when it has port_forwardings during the upate API."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: chenguobin \u003cchengb@chinatelecom.cn\u003e"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_ed056d7a","line":10,"in_reply_to":"3f79a3b5_993794fe","updated":"2018-11-06 01:50:25.000000000","message":"Done","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"}],"neutron/db/l3_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cd7e0632cadfc8091034d10240b33db0df0a3beb","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":"from neutron_lib.api.definitions import external_net as extnet_apidef"},{"line_number":20,"context_line":"from neutron_lib.api.definitions import floating_ip_port_forwarding as apidef"},{"line_number":21,"context_line":"from neutron_lib.api.definitions import l3 as l3_apidef"},{"line_number":22,"context_line":"from neutron_lib.api import extensions"},{"line_number":23,"context_line":"from neutron_lib.api import validators"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_385d96eb","line":20,"range":{"start_line":20,"start_character":71,"end_line":20,"end_character":77},"updated":"2018-10-26 14:11:39.000000000","message":"Hmmm maybe a more representative name could be useful. Something like forwarding_apidef, for example.","commit_id":"83999df6f8a55465ff4b07ef6f8f1f384ee42cae"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9499d04c7c3fb55f53dc3393cf72581b5dc2a408","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import netaddr"},{"line_number":19,"context_line":"from neutron_lib.api.definitions import external_net as extnet_apidef"},{"line_number":20,"context_line":"from neutron_lib.api.definitions import floating_ip_port_forwarding as apidef"},{"line_number":21,"context_line":"from neutron_lib.api.definitions import l3 as l3_apidef"},{"line_number":22,"context_line":"from neutron_lib.api import extensions"},{"line_number":23,"context_line":"from neutron_lib.api import validators"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_41573ef6","line":20,"range":{"start_line":20,"start_character":71,"end_line":20,"end_character":77},"in_reply_to":"3f79a3b5_385d96eb","updated":"2018-10-26 15:19:15.000000000","message":"Will rename it next upload.","commit_id":"83999df6f8a55465ff4b07ef6f8f1f384ee42cae"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cd7e0632cadfc8091034d10240b33db0df0a3beb","unresolved":false,"context_lines":[{"line_number":1278,"context_line":"            port_id, internal_ip_address, router_id \u003d self._get_assoc_data("},{"line_number":1279,"context_line":"                context, fip, floatingip_obj)"},{"line_number":1280,"context_line":""},{"line_number":1281,"context_line":"        if fip and \u0027router_id\u0027 in fip:"},{"line_number":1282,"context_line":"            router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":1283,"context_line":""},{"line_number":1284,"context_line":"        # After all upper conditions, if updating API dict is submitted with"},{"line_number":1285,"context_line":"        # {\u0027port_id\u0027: null}, then the floating IP cloud also be dissociated."}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f8915e46","line":1282,"range":{"start_line":1281,"start_character":8,"end_line":1282,"end_character":40},"updated":"2018-10-26 14:11:39.000000000","message":"What happens if the router now is different? For example, we have assigned this FIP to other port (and other router).","commit_id":"83999df6f8a55465ff4b07ef6f8f1f384ee42cae"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9499d04c7c3fb55f53dc3393cf72581b5dc2a408","unresolved":false,"context_lines":[{"line_number":1278,"context_line":"            port_id, internal_ip_address, router_id \u003d self._get_assoc_data("},{"line_number":1279,"context_line":"                context, fip, floatingip_obj)"},{"line_number":1280,"context_line":""},{"line_number":1281,"context_line":"        if fip and \u0027router_id\u0027 in fip:"},{"line_number":1282,"context_line":"            router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":1283,"context_line":""},{"line_number":1284,"context_line":"        # After all upper conditions, if updating API dict is submitted with"},{"line_number":1285,"context_line":"        # {\u0027port_id\u0027: null}, then the floating IP cloud also be dissociated."}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5eae3b2f","line":1282,"range":{"start_line":1281,"start_character":8,"end_line":1282,"end_character":40},"in_reply_to":"3f79a3b5_f8915e46","updated":"2018-10-26 15:19:15.000000000","message":"If floating IP has port forwarding, it will not change the router_id, because the port_forwarding plugin restricted such action:\nhttps://github.com/openstack/neutron/blob/master/neutron/services/portforwarding/pf_plugin.py#L107-L135\n\nIf floating IP does not have port forwarding, then `router_id` will not set in line 1427.\n\nAnd for L3 API, the extension does not allowing the  router_id update:\nhttps://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/l3.py#L125","commit_id":"83999df6f8a55465ff4b07ef6f8f1f384ee42cae"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"cd7e0632cadfc8091034d10240b33db0df0a3beb","unresolved":false,"context_lines":[{"line_number":1424,"context_line":"            floatingip_obj \u003d self._get_floatingip(context, id)"},{"line_number":1425,"context_line":"            old_floatingip \u003d self._make_floatingip_dict(floatingip_obj)"},{"line_number":1426,"context_line":""},{"line_number":1427,"context_line":"            if self._is_port_forwarding_enabled and old_floatingip.get("},{"line_number":1428,"context_line":"                    apidef.COLLECTION_NAME):"},{"line_number":1429,"context_line":"                fip[\u0027router_id\u0027] \u003d old_floatingip[\u0027router_id\u0027]"},{"line_number":1430,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_d8190223","line":1427,"range":{"start_line":1427,"start_character":15,"end_line":1427,"end_character":47},"updated":"2018-10-26 14:11:39.000000000","message":"Do we need this? Just getting \u0027port_forwardings\u0027 is enough, old_floatingip is a dict","commit_id":"83999df6f8a55465ff4b07ef6f8f1f384ee42cae"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"9499d04c7c3fb55f53dc3393cf72581b5dc2a408","unresolved":false,"context_lines":[{"line_number":1424,"context_line":"            floatingip_obj \u003d self._get_floatingip(context, id)"},{"line_number":1425,"context_line":"            old_floatingip \u003d self._make_floatingip_dict(floatingip_obj)"},{"line_number":1426,"context_line":""},{"line_number":1427,"context_line":"            if self._is_port_forwarding_enabled and old_floatingip.get("},{"line_number":1428,"context_line":"                    apidef.COLLECTION_NAME):"},{"line_number":1429,"context_line":"                fip[\u0027router_id\u0027] \u003d old_floatingip[\u0027router_id\u0027]"},{"line_number":1430,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8161d6d6","line":1427,"range":{"start_line":1427,"start_character":15,"end_line":1427,"end_character":47},"in_reply_to":"3f79a3b5_d8190223","updated":"2018-10-26 15:19:15.000000000","message":"My original though is to check the port_forwaring plugin first. And for now, indeed this check is redundant.","commit_id":"83999df6f8a55465ff4b07ef6f8f1f384ee42cae"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"3a8997e5fc09783b56bad842bcf84d940115ef5d","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"            port_id, internal_ip_address, router_id \u003d self._get_assoc_data("},{"line_number":1294,"context_line":"                context, fip, floatingip_obj)"},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"        if fip and \u0027router_id\u0027 in fip:"},{"line_number":1297,"context_line":"            router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        # After all upper conditions, if updating API dict is submitted with"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_391e8075","line":1296,"updated":"2018-11-02 11:26:50.000000000","message":"Question, because I am not familiar with all the edge cases here: is there any circumstance where router_id might already be set to a different value that would be overwritten by this line, by L1264?  I don\u0027t see any problem with this, I am just trying to be more educated.","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"af56cd432f3b34f8566bf3852f2ff5bd494e42e9","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"            port_id, internal_ip_address, router_id \u003d self._get_assoc_data("},{"line_number":1294,"context_line":"                context, fip, floatingip_obj)"},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"        if fip and \u0027router_id\u0027 in fip:"},{"line_number":1297,"context_line":"            router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        # After all upper conditions, if updating API dict is submitted with"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_fce9d6e3","line":1296,"in_reply_to":"3f79a3b5_391e8075","updated":"2018-11-02 11:46:13.000000000","message":"I think patch set 1 has the answer:\nhttps://review.openstack.org/#/c/613543/1/neutron/db/l3_db.py@1282","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"c8b4b452f8612ad934cda5215842c45b46a158d3","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"            port_id, internal_ip_address, router_id \u003d self._get_assoc_data("},{"line_number":1294,"context_line":"                context, fip, floatingip_obj)"},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"        if fip and \u0027router_id\u0027 in fip:"},{"line_number":1297,"context_line":"            router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        # After all upper conditions, if updating API dict is submitted with"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_e81d8978","line":1296,"in_reply_to":"3f79a3b5_fce9d6e3","updated":"2018-11-02 17:18:09.000000000","message":"Thanks, that helps.","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"58abef0074c5315d24c8ea94f7cc5d51a15d3975","unresolved":false,"context_lines":[{"line_number":1294,"context_line":"                context, fip, floatingip_obj)"},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"        if fip and \u0027router_id\u0027 in fip:"},{"line_number":1297,"context_line":"            router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        # After all upper conditions, if updating API dict is submitted with"},{"line_number":1300,"context_line":"        # {\u0027port_id\u0027: null}, then the floating IP cloud also be dissociated."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_5fa78abc","line":1297,"updated":"2018-11-02 22:17:59.000000000","message":"IMO, it is better to do this instead:\n\n\n        if not floatingip_obj.fixed_port_id and floatingip_obj.router_id:\n            router_id \u003d floatingip_obj.router_id\n\nThis should achieve the same but saving us to set \u0027router_id\u0027 in fip in line #1442.\n\nA even better approach is to introduce a \u0027port_forwarding\u0027 field in the OVO which allows us to check if a floating ip has any port forwarding (but this doesn\u0027t have to be addressed in this patch):\n\n        if floatingip_obj.port_forwarding:\n            router_id \u003d floatingip_obj.router_id","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a7c8d5f33afa3fb23fc28224c0c6f312ef18047c","unresolved":false,"context_lines":[{"line_number":1294,"context_line":"                context, fip, floatingip_obj)"},{"line_number":1295,"context_line":""},{"line_number":1296,"context_line":"        if fip and \u0027router_id\u0027 in fip:"},{"line_number":1297,"context_line":"            router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        # After all upper conditions, if updating API dict is submitted with"},{"line_number":1300,"context_line":"        # {\u0027port_id\u0027: null}, then the floating IP cloud also be dissociated."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_2db925c4","line":1297,"in_reply_to":"3f79a3b5_5fa78abc","updated":"2018-11-06 01:50:25.000000000","message":"Done","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"58abef0074c5315d24c8ea94f7cc5d51a15d3975","unresolved":false,"context_lines":[{"line_number":1297,"context_line":"            router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        # After all upper conditions, if updating API dict is submitted with"},{"line_number":1300,"context_line":"        # {\u0027port_id\u0027: null}, then the floating IP cloud also be dissociated."},{"line_number":1301,"context_line":"        return port_id, internal_ip_address, router_id"},{"line_number":1302,"context_line":""},{"line_number":1303,"context_line":"    def _update_fip_assoc(self, context, fip, floatingip_obj, external_port):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_bfd33e02","line":1300,"range":{"start_line":1300,"start_character":10,"end_line":1300,"end_character":27},"updated":"2018-11-02 22:17:59.000000000","message":"I think we have one more thing to check now. If users request to disassociate floating ip and the floating ip has port forwarding, we should raise a 4xx exception instead of silently passing the request. What do you think?","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a7c8d5f33afa3fb23fc28224c0c6f312ef18047c","unresolved":false,"context_lines":[{"line_number":1297,"context_line":"            router_id \u003d fip[\u0027router_id\u0027]"},{"line_number":1298,"context_line":""},{"line_number":1299,"context_line":"        # After all upper conditions, if updating API dict is submitted with"},{"line_number":1300,"context_line":"        # {\u0027port_id\u0027: null}, then the floating IP cloud also be dissociated."},{"line_number":1301,"context_line":"        return port_id, internal_ip_address, router_id"},{"line_number":1302,"context_line":""},{"line_number":1303,"context_line":"    def _update_fip_assoc(self, context, fip, floatingip_obj, external_port):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_4dcb414a","line":1300,"range":{"start_line":1300,"start_character":10,"end_line":1300,"end_character":27},"in_reply_to":"3f79a3b5_bfd33e02","updated":"2018-11-06 01:50:25.000000000","message":"IMO, this issue can be another bug.","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"58abef0074c5315d24c8ea94f7cc5d51a15d3975","unresolved":false,"context_lines":[{"line_number":1439,"context_line":"            floatingip_obj \u003d self._get_floatingip(context, id)"},{"line_number":1440,"context_line":"            old_floatingip \u003d self._make_floatingip_dict(floatingip_obj)"},{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":"            if old_floatingip.get(fip_pf_apidef.COLLECTION_NAME):"},{"line_number":1443,"context_line":"                fip[\u0027router_id\u0027] \u003d old_floatingip[\u0027router_id\u0027]"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":"            fip_port_id \u003d floatingip_obj.floating_port_id"},{"line_number":1446,"context_line":"            assoc_result \u003d self._update_fip_assoc("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_9f020271","line":1443,"range":{"start_line":1442,"start_character":0,"end_line":1443,"end_character":62},"updated":"2018-11-02 22:17:59.000000000","message":"If you agree on my comment in line #1297, this can be removed.","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a7c8d5f33afa3fb23fc28224c0c6f312ef18047c","unresolved":false,"context_lines":[{"line_number":1439,"context_line":"            floatingip_obj \u003d self._get_floatingip(context, id)"},{"line_number":1440,"context_line":"            old_floatingip \u003d self._make_floatingip_dict(floatingip_obj)"},{"line_number":1441,"context_line":""},{"line_number":1442,"context_line":"            if old_floatingip.get(fip_pf_apidef.COLLECTION_NAME):"},{"line_number":1443,"context_line":"                fip[\u0027router_id\u0027] \u003d old_floatingip[\u0027router_id\u0027]"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":"            fip_port_id \u003d floatingip_obj.floating_port_id"},{"line_number":1446,"context_line":"            assoc_result \u003d self._update_fip_assoc("}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_6dc87d4c","line":1443,"range":{"start_line":1442,"start_character":0,"end_line":1443,"end_character":62},"in_reply_to":"3f79a3b5_9f020271","updated":"2018-11-06 01:50:25.000000000","message":"Done","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"}],"neutron/tests/unit/extensions/test_expose_port_forwarding_in_fip.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"dee0e33225ea6c88fd61ad1bc654d5495bc7afca","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                    self.assertIsNotNone(router_id)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"                    self.l3_plugin.update_floatingip("},{"line_number":131,"context_line":"                        ctx, fip[\u0027floatingip\u0027][\u0027id\u0027], {\u0027floatingip\u0027: {}})"},{"line_number":132,"context_line":"                    body \u003d self._show(\u0027floatingips\u0027, fip[\u0027floatingip\u0027][\u0027id\u0027])"},{"line_number":133,"context_line":"                    self.assertEqual(router_id,"},{"line_number":134,"context_line":"                                     body[\u0027floatingip\u0027][\u0027router_id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_5f0a2a78","line":131,"range":{"start_line":131,"start_character":69,"end_line":131,"end_character":73},"updated":"2018-11-02 22:24:00.000000000","message":"The bug said updating the qos_policy_id only will have the same problem so it is better to cover this scenario in unit test as well.","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a7c8d5f33afa3fb23fc28224c0c6f312ef18047c","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                    self.assertIsNotNone(router_id)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"                    self.l3_plugin.update_floatingip("},{"line_number":131,"context_line":"                        ctx, fip[\u0027floatingip\u0027][\u0027id\u0027], {\u0027floatingip\u0027: {}})"},{"line_number":132,"context_line":"                    body \u003d self._show(\u0027floatingips\u0027, fip[\u0027floatingip\u0027][\u0027id\u0027])"},{"line_number":133,"context_line":"                    self.assertEqual(router_id,"},{"line_number":134,"context_line":"                                     body[\u0027floatingip\u0027][\u0027router_id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_0dd1c9f9","line":131,"range":{"start_line":131,"start_character":69,"end_line":131,"end_character":73},"in_reply_to":"3f79a3b5_5f0a2a78","updated":"2018-11-06 01:50:25.000000000","message":"Done","commit_id":"5d5151a061320642432ebfc880806004d533e6f1"}]}
