)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"767995ef34d99385fe314ceece83b56181ac7677","unresolved":false,"context_lines":[{"line_number":12,"context_line":" 1. get a microverison from request."},{"line_number":13,"context_line":" 2. create instance of class APIVersionRequest"},{"line_number":14,"context_line":"    with requested microversion."},{"line_number":15,"context_line":" 3. compare this two objects."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This check takes at least 2 lines and looks ugly."},{"line_number":18,"context_line":"Sometimes developers create unnecessary class fields"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a26ad4f_87500460","line":15,"updated":"2015-10-29 15:50:39.000000000","message":"/s/this/these","commit_id":"c5349cf153ca7df09c8cfc5b99b4a503e3fcc66e"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"6238a31552357372533965b94e4773c8acf2991d","unresolved":false,"context_lines":[{"line_number":12,"context_line":" 1. get a microverison from request."},{"line_number":13,"context_line":" 2. create instance of class APIVersionRequest"},{"line_number":14,"context_line":"    with requested microversion."},{"line_number":15,"context_line":" 3. compare this two objects."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"This check takes at least 2 lines and looks ugly."},{"line_number":18,"context_line":"Sometimes developers create unnecessary class fields"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a26ad4f_99e864e4","line":15,"in_reply_to":"1a26ad4f_87500460","updated":"2015-10-29 16:55:38.000000000","message":"Done","commit_id":"c5349cf153ca7df09c8cfc5b99b4a503e3fcc66e"},{"author":{"_account_id":15359,"name":"Erickson Filipe Guedes dos Santos","email":"erickson@lsd.ufcg.edu.br","username":"ericksonfilipe"},"change_message_id":"5323714612e0b87e298a916b006b79d9f20f8a30","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Right now to check if some part of code supports"},{"line_number":10,"context_line":"requested microversion developer usually:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":" 1. get a microverison from request."},{"line_number":13,"context_line":" 2. create instance of class APIVersionRequest"},{"line_number":14,"context_line":"    with requested microversion."},{"line_number":15,"context_line":" 3. compare these two objects."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da85f559_b225da09","line":12,"updated":"2015-11-11 13:38:15.000000000","message":"typo: microversion","commit_id":"e699fcc2f66ed76e3053fabc2d03be863d17083a"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0b7aaff832d3a1a949631cb7c427410e3823d96f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    return APIVersionRequest(_MAX_API_VERSION)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def is_supported(req, required_api_version):"},{"line_number":80,"context_line":"    \"\"\"Check if API request version is greater than required API version."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    :param req: request object"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_d723b056","line":79,"updated":"2015-11-11 13:01:52.000000000","message":"Now we have just implemented minimum microversion as required, but I am imaging we need maximum microversion also for changing API behavior.\n\nSo how about defining this method like:\n\n def is_supported(req, min_api_version\u003dNone, max_microversion\u003dNone):\n\n?","commit_id":"e699fcc2f66ed76e3053fabc2d03be863d17083a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"23d3ce39d78d8d56e18990246970cc8de01c3576","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    return APIVersionRequest(_MAX_API_VERSION)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def is_supported(req, required_api_version):"},{"line_number":80,"context_line":"    \"\"\"Check if API request version is greater than required API version."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    :param req: request object"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_b76cec35","line":79,"in_reply_to":"da85f559_5747c0bb","updated":"2015-11-11 13:10:40.000000000","message":"Thanks! I am looking forward :-)","commit_id":"e699fcc2f66ed76e3053fabc2d03be863d17083a"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"0ed3b94169ad918e53eff45305476eeda08eec6a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    return APIVersionRequest(_MAX_API_VERSION)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def is_supported(req, required_api_version):"},{"line_number":80,"context_line":"    \"\"\"Check if API request version is greater than required API version."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    :param req: request object"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_5747c0bb","line":79,"in_reply_to":"da85f559_d723b056","updated":"2015-11-11 13:09:09.000000000","message":"good idea! I will add","commit_id":"e699fcc2f66ed76e3053fabc2d03be863d17083a"}],"nova/api/openstack/compute/extended_server_attributes.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c17f8aff8137c64180a3a91e7d7c9e3da502f4cb","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":28,"context_line":"        super(ExtendedServerAttributesController, self).__init__(*args,"},{"line_number":29,"context_line":"                                                                 **kwargs)"},{"line_number":30,"context_line":"        self.api_version_2_3 \u003d api_version_request.APIVersionRequest(\u00272.3\u0027)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def _extend_server(self, context, server, instance, requested_version):"},{"line_number":33,"context_line":"        key \u003d \"OS-EXT-SRV-ATTR:hypervisor_hostname\""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_05875610","side":"PARENT","line":30,"updated":"2015-11-16 14:43:13.000000000","message":"Nit: its tempting to pass APIVersionRequest objects rather than the strings, but I like how well the strings read, so I will ignore that urge.","commit_id":"95019f9786943bacacfd6e97fe5d949bbd0f95dc"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"fd30af9c0cea434a5e51a958ebe0b60323dcf955","unresolved":false,"context_lines":[{"line_number":1106,"context_line":"        \"\"\"Return server search options allowed by non-admin.\"\"\""},{"line_number":1107,"context_line":"        opt_list \u003d (\u0027reservation_id\u0027, \u0027name\u0027, \u0027status\u0027, \u0027image\u0027, \u0027flavor\u0027,"},{"line_number":1108,"context_line":"                    \u0027ip\u0027, \u0027changes-since\u0027, \u0027all_tenants\u0027)"},{"line_number":1109,"context_line":"        if api_version_request.is_supported(req, \u00272.5\u0027):"},{"line_number":1110,"context_line":"            opt_list +\u003d (\u0027ip6\u0027,)"},{"line_number":1111,"context_line":"        return opt_list"},{"line_number":1112,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_e71218b4","line":1109,"updated":"2015-10-29 15:49:06.000000000","message":"this should be 2.4","commit_id":"c5349cf153ca7df09c8cfc5b99b4a503e3fcc66e"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"6238a31552357372533965b94e4773c8acf2991d","unresolved":false,"context_lines":[{"line_number":1106,"context_line":"        \"\"\"Return server search options allowed by non-admin.\"\"\""},{"line_number":1107,"context_line":"        opt_list \u003d (\u0027reservation_id\u0027, \u0027name\u0027, \u0027status\u0027, \u0027image\u0027, \u0027flavor\u0027,"},{"line_number":1108,"context_line":"                    \u0027ip\u0027, \u0027changes-since\u0027, \u0027all_tenants\u0027)"},{"line_number":1109,"context_line":"        if api_version_request.is_supported(req, \u00272.5\u0027):"},{"line_number":1110,"context_line":"            opt_list +\u003d (\u0027ip6\u0027,)"},{"line_number":1111,"context_line":"        return opt_list"},{"line_number":1112,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_f9e078fc","line":1109,"in_reply_to":"1a26ad4f_e71218b4","updated":"2015-10-29 16:55:38.000000000","message":"Nope. as you see here we have\n\n req_ver \u003e 2.4\n\nit means that we need 2.5 version greater. \n\nin method is_supported() we use \u003e\u003d . it means here must be 2.5","commit_id":"c5349cf153ca7df09c8cfc5b99b4a503e3fcc66e"}],"nova/api/openstack/compute/services.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"27bfe56ab4f1ba7efb1cb0d68cca4e7696b48340","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        name"},{"line_number":183,"context_line":"        \"\"\""},{"line_number":184,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.11\u0027):"},{"line_number":185,"context_line":"            _services \u003d self._get_services_list(req, [\u0027forced_down\u0027])"},{"line_number":186,"context_line":"        else:"},{"line_number":187,"context_line":"            _services \u003d self._get_services_list(req)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_ea7fbd12","line":185,"updated":"2015-11-12 05:19:59.000000000","message":"Tempest doesn\u0027t test microversion, so I confirmed this patch works by hands like\n\n2.10 response doesn\u0027t contain forced_down:\n\n $ curl -g -i -X GET http://192.168.11.65:8774/v2.1/6dd2eee0502f4c91aad0d501c6893c08/os-services -H \"X-OpenStack-Nova-API-Version: 2.10\" -H \"X-Auth-Token: 1aeab29483ae4e869cda2ad0b6741f85\"\n HTTP/1.1 200 OK\n Content-Type: application/json\n Content-Length: 925\n X-Openstack-Nova-Api-Version: 2.10\n [..]\n\n {\"services\": [\n     {\"status\": \"enabled\", \"binary\": \"nova-conductor\", \"host\": \"devstack\", \"zone\": \"internal\",\n      \"state\": \"up\", \"disabled_reason\": null, \"id\": 1, \"updated_at\": \"2015-11-12T05:13:54.000000\"},\n     {\"status\": \"enabled\", \"binary\": \"nova-cert\", \"host\": \"devstack\", \"zone\": \"internal\",\n      \"state\": \"up\", \"disabled_reason\": null, \"id\": 2, \"updated_at\": \"2015-11-12T05:13:59.000000\"},\n     [..]\n ]}\n\n2.11 response contains forced_down:\n\n $ curl -g -i -X GET http://192.168.11.65:8774/v2.1/6dd2eee0502f4c91aad0d501c6893c08/os-services -H \"X-OpenStack-Nova-API-Version: 2.11\" -H \"X-Auth-Token: 1aeab29483ae4e869cda2ad0b6741f85\"\n HTTP/1.1 200 OK\n Content-Type: application/json\n Content-Length: 1035\n X-Openstack-Nova-Api-Version: 2.11\n [..]\n\n {\"services\": [\n     {\"status\": \"enabled\", \"binary\": \"nova-conductor\", \"host\": \"devstack\", \"zone\": \"internal\",\n      \"state\": \"up\", \"forced_down\": false, \"disabled_reason\": null, \"id\": 1,\n      \"updated_at\": \"2015-11-12T05:14:04.000000\"\n     },\n     {\"status\": \"enabled\", \"binary\": \"nova-cert\", \"host\": \"devstack\", \"zone\": \"internal\",\n      \"state\": \"up\", \"forced_down\": false, \"disabled_reason\": null, \"id\": 2,\n      \"updated_at\": \"2015-11-12T05:14:09.000000\"\n     },\n     [..]\n ]}","commit_id":"891ac11429ea9640b434932518d574d205d5dceb"}],"nova/tests/unit/api/openstack/test_api_version_request.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c17f8aff8137c64180a3a91e7d7c9e3da502f4cb","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            req, min_version\u003d\u00272.4\u0027))"},{"line_number":133,"context_line":"        self.assertTrue(api_version_request.is_supported("},{"line_number":134,"context_line":"            req, min_version\u003d\u00272.5\u0027))"},{"line_number":135,"context_line":"        self.assertFalse(api_version_request.is_supported("},{"line_number":136,"context_line":"            req, min_version\u003d\u00272.6\u0027))"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def test_is_supported_max_version(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_85c10631","line":135,"updated":"2015-11-16 14:43:13.000000000","message":"Nit: I really want to add the descriptions in here, or have each one in a separate test, so its clear which assert has failed.","commit_id":"2002120c459561d995eac4273befb42b3809d5bb"}]}
