)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"008b2fc9c7728d1b23593185ec0427aba275fdd7","unresolved":false,"context_lines":[{"line_number":9,"context_line":"There are lots of resources left after tempest tests finished,"},{"line_number":10,"context_line":"we should cleanup."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch cleanup the legacy resources with default DevStack"},{"line_number":13,"context_line":"config, we still keeps working on in the other patches."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I8dad97fdebd91f824a043dc60381b3a8ea29d5ed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f79a3b5_eb16e049","line":12,"range":{"start_line":12,"start_character":23,"end_line":12,"end_character":39},"updated":"2018-08-21 10:35:45.000000000","message":"what are those \"legacy resources\" exactly?","commit_id":"9aadce85e9cb6ab70ffa15f37805dea349d81daf"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"7b4c33100e962dcf61ba4a0d7e2b63f469f07b48","unresolved":false,"context_lines":[{"line_number":9,"context_line":"There are lots of resources left after tempest tests finished,"},{"line_number":10,"context_line":"we should cleanup."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch cleanup the legacy resources with default DevStack"},{"line_number":13,"context_line":"config, we still keeps working on in the other patches."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I8dad97fdebd91f824a043dc60381b3a8ea29d5ed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3f79a3b5_9f2a027c","line":12,"range":{"start_line":12,"start_character":23,"end_line":12,"end_character":39},"in_reply_to":"3f79a3b5_eb16e049","updated":"2018-08-21 13:25:27.000000000","message":"I will make it clearly.","commit_id":"9aadce85e9cb6ab70ffa15f37805dea349d81daf"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4694174c306104c3885c121f54c1cd2e08227ac8","unresolved":false,"context_lines":[{"line_number":14,"context_line":"working on in the other patches."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I8dad97fdebd91f824a043dc60381b3a8ea29d5ed"},{"line_number":17,"context_line":"Partial-Bug: #1759321"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3f79a3b5_8a55ad52","line":17,"updated":"2018-09-04 18:25:12.000000000","message":"Before I approve this, is there more work to do or does this close the bug?","commit_id":"2de722ef0af284b4f68e952df53ad4f0d9d452be"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"2e9c7d98376e3983364b13a2ae7c43c23680b9ff","unresolved":false,"context_lines":[{"line_number":14,"context_line":"working on in the other patches."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I8dad97fdebd91f824a043dc60381b3a8ea29d5ed"},{"line_number":17,"context_line":"Partial-Bug: #1759321"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3f79a3b5_655c0219","line":17,"in_reply_to":"3f79a3b5_8a55ad52","updated":"2018-09-04 18:39:08.000000000","message":"Yes, I will land another patch to cleanup other resources. This one cleanup devstack default.","commit_id":"2de722ef0af284b4f68e952df53ad4f0d9d452be"}],"neutron_tempest_plugin/api/admin/test_quotas.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"07d993c3a3cedcf5ebc8c732713864daa5bbb8e3","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":118,"context_line":"        for sg in sg_list:"},{"line_number":119,"context_line":"            self.addCleanup(self.admin_client.delete_security_group,"},{"line_number":120,"context_line":"                            sg[\u0027id\u0027])"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @decorators.attr(type\u003d\u0027gate\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_3a96d995","line":120,"updated":"2018-07-09 20:48:43.000000000","message":"I\u0027m not sure this will cleanup if there is a test failure above.  So is the problem that neutron can create a \"default\" SG for the tenant and it gets left around?","commit_id":"769aa712e35c07967149c3c87c926fe199924e2d"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"bc19621093ba30a2cb56f37c3f544a33fbdc5ab2","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":118,"context_line":"        for sg in sg_list:"},{"line_number":119,"context_line":"            self.addCleanup(self.admin_client.delete_security_group,"},{"line_number":120,"context_line":"                            sg[\u0027id\u0027])"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @decorators.attr(type\u003d\u0027gate\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_86a554b6","line":120,"in_reply_to":"5f7c97a3_3a96d995","updated":"2018-07-10 01:12:40.000000000","message":"Yes, after execute the quota tests, there is default SG per project.","commit_id":"769aa712e35c07967149c3c87c926fe199924e2d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e5c0f0cecd0482837bb9889a51720773afdf6ee6","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":118,"context_line":"        for sg in sg_list:"},{"line_number":119,"context_line":"            self.addCleanup(self.admin_client.delete_security_group,"},{"line_number":120,"context_line":"                            sg[\u0027id\u0027])"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @decorators.attr(type\u003d\u0027gate\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_f0c73010","line":120,"updated":"2018-07-19 19:16:36.000000000","message":"These lines should probably be right after L88, assuming the create_project() call creates them?  That\u0027s what you did below.  That way any test failure will clean them.","commit_id":"3a3ebdfb8bc418e3c7ef47ecff893b63f8c5ab88"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"18b59578bb9230776979291d75b8538be65df9be","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":118,"context_line":"        for sg in sg_list:"},{"line_number":119,"context_line":"            self.addCleanup(self.admin_client.delete_security_group,"},{"line_number":120,"context_line":"                            sg[\u0027id\u0027])"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    @decorators.idempotent_id(\u0027e974b5ba-090a-452c-a578-f9710151d9fc\u0027)"},{"line_number":123,"context_line":"    @decorators.attr(type\u003d\u0027gate\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_34c91259","line":120,"in_reply_to":"5f7c97a3_f0c73010","updated":"2018-07-20 03:04:44.000000000","message":"Thanks.","commit_id":"3a3ebdfb8bc418e3c7ef47ecff893b63f8c5ab88"}],"neutron_tempest_plugin/api/admin/test_quotas_negative.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e5c0f0cecd0482837bb9889a51720773afdf6ee6","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":39,"context_line":"        for sg in sg_list:"},{"line_number":40,"context_line":"            self.addCleanup(self.admin_client.delete_security_group,"},{"line_number":41,"context_line":"                            sg[\u0027id\u0027])"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.assertRaises(lib_exc.Conflict,"},{"line_number":44,"context_line":"                          self.admin_client.create_network, **net_args)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_30d928f0","line":41,"updated":"2018-07-19 19:16:36.000000000","message":"These too, should move up if created by create_project()","commit_id":"3a3ebdfb8bc418e3c7ef47ecff893b63f8c5ab88"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"18b59578bb9230776979291d75b8538be65df9be","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":39,"context_line":"        for sg in sg_list:"},{"line_number":40,"context_line":"            self.addCleanup(self.admin_client.delete_security_group,"},{"line_number":41,"context_line":"                            sg[\u0027id\u0027])"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.assertRaises(lib_exc.Conflict,"},{"line_number":44,"context_line":"                          self.admin_client.create_network, **net_args)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_f4be3aad","line":41,"in_reply_to":"5f7c97a3_30d928f0","updated":"2018-07-20 03:04:44.000000000","message":"Done","commit_id":"3a3ebdfb8bc418e3c7ef47ecff893b63f8c5ab88"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e5c0f0cecd0482837bb9889a51720773afdf6ee6","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":66,"context_line":"        for sg in sg_list:"},{"line_number":67,"context_line":"            self.addCleanup(self.admin_client.delete_security_group,"},{"line_number":68,"context_line":"                            sg[\u0027id\u0027])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        subnet_args[\u0027cidr\u0027] \u003d \u002710.1.0.0/24\u0027"},{"line_number":71,"context_line":"        self.assertRaises(lib_exc.Conflict,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_f0f09068","line":68,"updated":"2018-07-19 19:16:36.000000000","message":"Same here and throughout.","commit_id":"3a3ebdfb8bc418e3c7ef47ecff893b63f8c5ab88"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"18b59578bb9230776979291d75b8538be65df9be","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":66,"context_line":"        for sg in sg_list:"},{"line_number":67,"context_line":"            self.addCleanup(self.admin_client.delete_security_group,"},{"line_number":68,"context_line":"                            sg[\u0027id\u0027])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        subnet_args[\u0027cidr\u0027] \u003d \u002710.1.0.0/24\u0027"},{"line_number":71,"context_line":"        self.assertRaises(lib_exc.Conflict,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_14bad6b8","line":68,"in_reply_to":"5f7c97a3_f0f09068","updated":"2018-07-20 03:04:44.000000000","message":"Done","commit_id":"3a3ebdfb8bc418e3c7ef47ecff893b63f8c5ab88"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5f4b11433b19989a20c8b1f7fef9edab702f13f2","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        sg_args \u003d {\u0027tenant_id\u0027: tenant_id}"},{"line_number":139,"context_line":"        # avoid a number that is made by default"},{"line_number":140,"context_line":"        sg_list \u003d self.admin_client.list_security_groups("},{"line_number":141,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":142,"context_line":"        num \u003d len(sg_list) + 1"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        new_quotas \u003d {\u0027security_group\u0027: num}"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_8b6e0f2d","line":141,"updated":"2018-08-10 19:50:19.000000000","message":"Fwiw, you could have added the addCleanup() here and not made a second call to list_security_groups().","commit_id":"c8c91e3482f8d939345581503111755f8ded82ba"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"04da45214d3100685e2aa72a514c99314bba80ce","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        sg_args \u003d {\u0027tenant_id\u0027: tenant_id}"},{"line_number":139,"context_line":"        # avoid a number that is made by default"},{"line_number":140,"context_line":"        sg_list \u003d self.admin_client.list_security_groups("},{"line_number":141,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":142,"context_line":"        num \u003d len(sg_list) + 1"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        new_quotas \u003d {\u0027security_group\u0027: num}"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_e2a6b6ab","line":141,"in_reply_to":"3f79a3b5_8b6e0f2d","updated":"2018-08-13 03:41:23.000000000","message":"Line 147 will create a new sg, so cleanup method should be added after the second list security_groups.","commit_id":"c8c91e3482f8d939345581503111755f8ded82ba"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5f4b11433b19989a20c8b1f7fef9edab702f13f2","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":152,"context_line":"        for sg in new_sg_list:"},{"line_number":153,"context_line":"            self.addCleanup(self.admin_client.delete_security_group,"},{"line_number":154,"context_line":"                            sg[\u0027id\u0027])"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        self.assertRaises(lib_exc.Conflict,"},{"line_number":157,"context_line":"                          self.admin_client.create_security_group, **sg_args)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_cbfde76e","line":154,"updated":"2018-08-10 19:50:19.000000000","message":"After looking at these changes again, is it better to add to the security groups in create_project() ?  cls.security_groups.append(...)\n\nIt would mean an update in a single place, and would cover some other calls to create_project() that were missed - test_floating_ips_admin_actions.py, test_qos.py, etc.","commit_id":"c8c91e3482f8d939345581503111755f8ded82ba"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"04da45214d3100685e2aa72a514c99314bba80ce","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            tenant_id\u003dtenant_id)[\u0027security_groups\u0027]"},{"line_number":152,"context_line":"        for sg in new_sg_list:"},{"line_number":153,"context_line":"            self.addCleanup(self.admin_client.delete_security_group,"},{"line_number":154,"context_line":"                            sg[\u0027id\u0027])"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        self.assertRaises(lib_exc.Conflict,"},{"line_number":157,"context_line":"                          self.admin_client.create_security_group, **sg_args)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_82b902cd","line":154,"in_reply_to":"3f79a3b5_cbfde76e","updated":"2018-08-13 03:41:23.000000000","message":"Good idea, I will try to make it simple.","commit_id":"c8c91e3482f8d939345581503111755f8ded82ba"}],"neutron_tempest_plugin/api/admin/test_routers_ha.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"07d993c3a3cedcf5ebc8c732713864daa5bbb8e3","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        name \u003d data_utils.rand_name(\u0027router\u0027)"},{"line_number":51,"context_line":"        router \u003d self._create_admin_router(name, ha\u003dTrue)"},{"line_number":52,"context_line":"        self.addCleanup(self.admin_client.delete_router,"},{"line_number":53,"context_line":"                        router[\u0027id\u0027])"},{"line_number":54,"context_line":"        self.assertTrue(router[\u0027ha\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @decorators.idempotent_id(\u002797b5f7ef-2192-4fa3-901e-979cd5c1097a\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_1af8bdbe","line":53,"updated":"2018-07-09 20:48:43.000000000","message":"I think _create_admin_router() already did this?","commit_id":"769aa712e35c07967149c3c87c926fe199924e2d"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"bc19621093ba30a2cb56f37c3f544a33fbdc5ab2","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        name \u003d data_utils.rand_name(\u0027router\u0027)"},{"line_number":51,"context_line":"        router \u003d self._create_admin_router(name, ha\u003dTrue)"},{"line_number":52,"context_line":"        self.addCleanup(self.admin_client.delete_router,"},{"line_number":53,"context_line":"                        router[\u0027id\u0027])"},{"line_number":54,"context_line":"        self.assertTrue(router[\u0027ha\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @decorators.idempotent_id(\u002797b5f7ef-2192-4fa3-901e-979cd5c1097a\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_06fdc4b0","line":53,"in_reply_to":"5f7c97a3_1af8bdbe","updated":"2018-07-10 01:12:40.000000000","message":"Done, I\u0027m missing that.","commit_id":"769aa712e35c07967149c3c87c926fe199924e2d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"07d993c3a3cedcf5ebc8c732713864daa5bbb8e3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        name \u003d data_utils.rand_name(\u0027router\u0027)"},{"line_number":68,"context_line":"        router \u003d self.create_admin_router(name, ha\u003dFalse)"},{"line_number":69,"context_line":"        self.addCleanup(self.admin_client.delete_router,"},{"line_number":70,"context_line":"                        router[\u0027id\u0027])"},{"line_number":71,"context_line":"        self.assertFalse(router[\u0027ha\u0027])"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @decorators.idempotent_id(\u00275a6bfe82-5b23-45a4-b027-5160997d4753\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_1a63ddac","line":70,"updated":"2018-07-09 20:48:43.000000000","message":"Maybe something like this is better:\n\nhttps://review.openstack.org/#/c/579875/5/neutron_tempest_plugin/api/base.py\n\nIt will use the correct creds when trying to delete a router created by the admin.","commit_id":"769aa712e35c07967149c3c87c926fe199924e2d"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"bc19621093ba30a2cb56f37c3f544a33fbdc5ab2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        name \u003d data_utils.rand_name(\u0027router\u0027)"},{"line_number":68,"context_line":"        router \u003d self.create_admin_router(name, ha\u003dFalse)"},{"line_number":69,"context_line":"        self.addCleanup(self.admin_client.delete_router,"},{"line_number":70,"context_line":"                        router[\u0027id\u0027])"},{"line_number":71,"context_line":"        self.assertFalse(router[\u0027ha\u0027])"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @decorators.idempotent_id(\u00275a6bfe82-5b23-45a4-b027-5160997d4753\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_c6ba6cdf","line":70,"in_reply_to":"5f7c97a3_1a63ddac","updated":"2018-07-10 01:12:40.000000000","message":"Done, we can also use _create_admin_router here. I will update.","commit_id":"769aa712e35c07967149c3c87c926fe199924e2d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"07d993c3a3cedcf5ebc8c732713864daa5bbb8e3","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        router \u003d self._create_admin_router(name, ha\u003dFalse,"},{"line_number":88,"context_line":"                                           admin_state_up\u003dFalse)"},{"line_number":89,"context_line":"        self.addCleanup(self.admin_client.delete_router,"},{"line_number":90,"context_line":"                        router[\u0027id\u0027])"},{"line_number":91,"context_line":"        self.assertFalse(router[\u0027ha\u0027])"},{"line_number":92,"context_line":"        router \u003d self.admin_client.update_router(router[\u0027id\u0027],"},{"line_number":93,"context_line":"                                                 ha\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_5af2b5e4","line":90,"updated":"2018-07-09 20:48:43.000000000","message":"I think _create_admin_router() already did this?","commit_id":"769aa712e35c07967149c3c87c926fe199924e2d"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"bc19621093ba30a2cb56f37c3f544a33fbdc5ab2","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        router \u003d self._create_admin_router(name, ha\u003dFalse,"},{"line_number":88,"context_line":"                                           admin_state_up\u003dFalse)"},{"line_number":89,"context_line":"        self.addCleanup(self.admin_client.delete_router,"},{"line_number":90,"context_line":"                        router[\u0027id\u0027])"},{"line_number":91,"context_line":"        self.assertFalse(router[\u0027ha\u0027])"},{"line_number":92,"context_line":"        router \u003d self.admin_client.update_router(router[\u0027id\u0027],"},{"line_number":93,"context_line":"                                                 ha\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_e6d44821","line":90,"in_reply_to":"5f7c97a3_5af2b5e4","updated":"2018-07-10 01:12:40.000000000","message":"Done","commit_id":"769aa712e35c07967149c3c87c926fe199924e2d"}]}
