)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"2c04a52c484e02eeb0b32c2c2e1df0777b607ffb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     liyingjun \u003cyingjun.li@kylin-cloud.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-06-21 14:48:09 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Pagination for hypervisors"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When there are thousands of compute nodes, it would be slow to get the"},{"line_number":10,"context_line":"whole hypervisor list, and it is bad for user experience to display"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3aaa91ec_112ee6a4","line":7,"updated":"2016-06-23 16:07:34.000000000","message":"I think here should be said smth like:\n\"Microversion 2.31 adds pagination support for hypervisors\"","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1ec82489bfe6073b17c36301d829b8429b69d63c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     liyingjun \u003cyingjun.li@kylin-cloud.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-06-21 14:48:09 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Pagination for hypervisors"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When there are thousands of compute nodes, it would be slow to get the"},{"line_number":10,"context_line":"whole hypervisor list, and it is bad for user experience to display"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3aaa91ec_53af6f7c","line":7,"in_reply_to":"3aaa91ec_112ee6a4","updated":"2016-06-27 06:27:39.000000000","message":"Done","commit_id":"511377310e415645b752778d3e900fbe9fc171af"}],"api-ref/source/os-hypervisors.inc":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"  - limit: limit"},{"line_number":32,"context_line":"  - marker: marker"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Response"},{"line_number":35,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":6,"id":"7aa08908_7d7e0ae5","line":32,"range":{"start_line":31,"start_character":2,"end_line":32,"end_character":18},"updated":"2016-06-17 19:29:58.000000000","message":"These aren\u0027t valid on this API until your microversion, so you\u0027re going to have to create separate parameters for these in nova/api-ref/parameters.yaml and use min_version on the new parameter types. You could simply start by copying the limit and marker parameters but name them something like hypervisor_limit and hypervisor_marker, then the rest is the same except the min_version on them would be 2.31. Then you use those parameter types here for the docs.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"  - limit: limit"},{"line_number":32,"context_line":"  - marker: marker"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Response"},{"line_number":35,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":6,"id":"5a9d85d2_6aafeee3","line":32,"range":{"start_line":31,"start_character":2,"end_line":32,"end_character":18},"in_reply_to":"7aa08908_7d7e0ae5","updated":"2016-06-20 07:03:44.000000000","message":"Done","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dd7214c3d3e92609ae02024db0912bf3e70f48a2","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"  - limit: hypervisor_limit"},{"line_number":32,"context_line":"  - marker: hypervisor_marker"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Response"},{"line_number":35,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5a9d85d2_b7e8f17d","line":32,"range":{"start_line":31,"start_character":2,"end_line":32,"end_character":29},"updated":"2016-06-21 00:05:10.000000000","message":"Looks good:\n\nhttp://docs-draft.openstack.org/40/326940/9/check/gate-nova-api-ref/c5979ca//api-ref/build/html/?expanded\u003dlist-hypervisors-detail#list-hypervisors","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3eefcd5aacafd84f6afa9d0e9de070bffc75c09c","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"  - limit: hypervisor_limit"},{"line_number":32,"context_line":"  - marker: hypervisor_marker"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Response"},{"line_number":35,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5a9d85d2_d222ebb8","line":32,"range":{"start_line":31,"start_character":2,"end_line":32,"end_character":29},"in_reply_to":"5a9d85d2_b7e8f17d","updated":"2016-06-21 01:49:14.000000000","message":":)","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dd7214c3d3e92609ae02024db0912bf3e70f48a2","unresolved":false,"context_lines":[{"line_number":59,"context_line":"Normal response codes: 200"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Error response codes: unauthorized(401), forbidden(403)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Response"},{"line_number":64,"context_line":"--------"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5a9d85d2_d7ff7d32","line":62,"updated":"2016-06-21 00:05:10.000000000","message":"Missing the limit/marker request parameters like above.","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3eefcd5aacafd84f6afa9d0e9de070bffc75c09c","unresolved":false,"context_lines":[{"line_number":59,"context_line":"Normal response codes: 200"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Error response codes: unauthorized(401), forbidden(403)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Response"},{"line_number":64,"context_line":"--------"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5a9d85d2_92406358","line":62,"in_reply_to":"5a9d85d2_d7ff7d32","updated":"2016-06-21 01:49:14.000000000","message":"Done","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"e8a70ccdde10281415ff94cc28d6d4e28742a4e1","unresolved":false,"context_lines":[{"line_number":402,"context_line":"  required: false"},{"line_number":403,"context_line":"  type: string"},{"line_number":404,"context_line":"hypervisor_limit:"},{"line_number":405,"context_line":"  description: |"},{"line_number":406,"context_line":"    Requests a page size of items. Returns a number of items up to a limit value."},{"line_number":407,"context_line":"    Use the ``limit`` parameter to make an initial limited request and use the ID"},{"line_number":408,"context_line":"    of the last-seen item from the response as the ``marker`` parameter value in a"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_5f2f0d88","line":405,"updated":"2016-06-28 16:25:44.000000000","message":"the description is the same as for \u0027limit\u0027, why not to use it, because of min_version? (maybe if it is not so important we can use \u0027limit\u0027 param but I am not sure, this is a question)","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164db2e306d97b777f8e165a04efd6f36bc1ba7","unresolved":false,"context_lines":[{"line_number":402,"context_line":"  required: false"},{"line_number":403,"context_line":"  type: string"},{"line_number":404,"context_line":"hypervisor_limit:"},{"line_number":405,"context_line":"  description: |"},{"line_number":406,"context_line":"    Requests a page size of items. Returns a number of items up to a limit value."},{"line_number":407,"context_line":"    Use the ``limit`` parameter to make an initial limited request and use the ID"},{"line_number":408,"context_line":"    of the last-seen item from the response as the ``marker`` parameter value in a"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_2b47594c","line":405,"in_reply_to":"3aaa91ec_5f2f0d88","updated":"2016-06-28 21:36:35.000000000","message":"Yes, because of min_version, it\u0027s rendered in the docs differently:\n\nhttp://docs-draft.openstack.org/40/326940/14/check/gate-nova-api-ref/76ff4c7//api-ref/build/html/?expanded\u003dlist-hypervisors-detail#list-hypervisors\n\nSee the \"New in version 2.31\" part.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"e8a70ccdde10281415ff94cc28d6d4e28742a4e1","unresolved":false,"context_lines":[{"line_number":410,"context_line":"  in: query"},{"line_number":411,"context_line":"  required: false"},{"line_number":412,"context_line":"  type: integer"},{"line_number":413,"context_line":"  min_version: 2.31"},{"line_number":414,"context_line":"hypervisor_marker:"},{"line_number":415,"context_line":"  description: |"},{"line_number":416,"context_line":"    The ID of the last-seen item. Use the ``limit`` parameter to make an initial limited"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_1f3c65be","line":413,"range":{"start_line":413,"start_character":15,"end_line":413,"end_character":19},"updated":"2016-06-28 16:25:44.000000000","message":"this should be 2.32","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164db2e306d97b777f8e165a04efd6f36bc1ba7","unresolved":false,"context_lines":[{"line_number":410,"context_line":"  in: query"},{"line_number":411,"context_line":"  required: false"},{"line_number":412,"context_line":"  type: integer"},{"line_number":413,"context_line":"  min_version: 2.31"},{"line_number":414,"context_line":"hypervisor_marker:"},{"line_number":415,"context_line":"  description: |"},{"line_number":416,"context_line":"    The ID of the last-seen item. Use the ``limit`` parameter to make an initial limited"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_eb3c31c1","line":413,"range":{"start_line":413,"start_character":15,"end_line":413,"end_character":19},"in_reply_to":"3aaa91ec_1f3c65be","updated":"2016-06-28 21:36:35.000000000","message":"Good catch, -1 for this.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a419f53d38ffcc5d440d92b311ed8c9eb2cdd2f4","unresolved":false,"context_lines":[{"line_number":410,"context_line":"  in: query"},{"line_number":411,"context_line":"  required: false"},{"line_number":412,"context_line":"  type: integer"},{"line_number":413,"context_line":"  min_version: 2.31"},{"line_number":414,"context_line":"hypervisor_marker:"},{"line_number":415,"context_line":"  description: |"},{"line_number":416,"context_line":"    The ID of the last-seen item. Use the ``limit`` parameter to make an initial limited"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_dde773e2","line":413,"range":{"start_line":413,"start_character":15,"end_line":413,"end_character":19},"in_reply_to":"3aaa91ec_eb3c31c1","updated":"2016-06-29 01:28:57.000000000","message":"Done","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164db2e306d97b777f8e165a04efd6f36bc1ba7","unresolved":false,"context_lines":[{"line_number":419,"context_line":"  in: query"},{"line_number":420,"context_line":"  required: false"},{"line_number":421,"context_line":"  type: string"},{"line_number":422,"context_line":"  min_version: 2.31"},{"line_number":423,"context_line":"hypervisor_query:"},{"line_number":424,"context_line":"  description: |"},{"line_number":425,"context_line":"    Filters the response by a hypervisor type."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_0bb09d42","line":422,"range":{"start_line":422,"start_character":15,"end_line":422,"end_character":19},"updated":"2016-06-28 21:36:35.000000000","message":"2.32","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a419f53d38ffcc5d440d92b311ed8c9eb2cdd2f4","unresolved":false,"context_lines":[{"line_number":419,"context_line":"  in: query"},{"line_number":420,"context_line":"  required: false"},{"line_number":421,"context_line":"  type: string"},{"line_number":422,"context_line":"  min_version: 2.31"},{"line_number":423,"context_line":"hypervisor_query:"},{"line_number":424,"context_line":"  description: |"},{"line_number":425,"context_line":"    Filters the response by a hypervisor type."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_bdea67aa","line":422,"range":{"start_line":422,"start_character":15,"end_line":422,"end_character":19},"in_reply_to":"3aaa91ec_0bb09d42","updated":"2016-06-29 01:28:57.000000000","message":"Done","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"}],"doc/api_samples/os-hypervisors/v2.31/hypervisors-show-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisor\": {"},{"line_number":3,"context_line":"        \"cpu_info\": {"},{"line_number":4,"context_line":"            \"arch\": \"x86_64\","}],"source_content_type":"application/json","patch_set":6,"id":"7aa08908_7dcc4a35","line":1,"updated":"2016-06-17 19:29:58.000000000","message":"Do we really need a \u0027show\u0027 response API sample for this microversion? We\u0027re not adding limit/marker to show.\n\nI guess it\u0027s because the way the tests are stacked up in:\n\nhttps://review.openstack.org/#/c/326940/6/nova/tests/functional/api_sample_tests/test_hypervisors.py\n\nBut really we only have one method changing for this REST API controller, so it seems like a waste to be running these other functional API sample tests for something that won\u0027t change in this microversion.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisor\": {"},{"line_number":3,"context_line":"        \"cpu_info\": {"},{"line_number":4,"context_line":"            \"arch\": \"x86_64\","}],"source_content_type":"application/json","patch_set":6,"id":"5a9d85d2_1b14bdf3","line":1,"in_reply_to":"7aa08908_7dcc4a35","updated":"2016-06-20 07:03:44.000000000","message":"Yes, after changing the functional test, this can be removed now.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"}],"doc/api_samples/os-hypervisors/v2.31/hypervisors-statistics-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisor_statistics\": {"},{"line_number":3,"context_line":"        \"count\": 1,"},{"line_number":4,"context_line":"        \"current_workload\": 0,"}],"source_content_type":"application/json","patch_set":6,"id":"7aa08908_3ddf62d7","line":1,"updated":"2016-06-17 19:29:58.000000000","message":"Same, not sure we need an API sample for this.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisor_statistics\": {"},{"line_number":3,"context_line":"        \"count\": 1,"},{"line_number":4,"context_line":"        \"current_workload\": 0,"}],"source_content_type":"application/json","patch_set":6,"id":"5a9d85d2_5bce455b","line":1,"in_reply_to":"7aa08908_3ddf62d7","updated":"2016-06-20 07:03:44.000000000","message":"Removed","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"}],"doc/api_samples/os-hypervisors/v2.31/hypervisors-uptime-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisor\": {"},{"line_number":3,"context_line":"        \"hypervisor_hostname\": \"fake-mini\","},{"line_number":4,"context_line":"        \"id\": 1,"}],"source_content_type":"application/json","patch_set":6,"id":"7aa08908_9dee5689","line":1,"updated":"2016-06-17 19:29:58.000000000","message":"And this.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisor\": {"},{"line_number":3,"context_line":"        \"hypervisor_hostname\": \"fake-mini\","},{"line_number":4,"context_line":"        \"id\": 1,"}],"source_content_type":"application/json","patch_set":6,"id":"5a9d85d2_fb03b174","line":1,"in_reply_to":"7aa08908_9dee5689","updated":"2016-06-20 07:03:44.000000000","message":"Done","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"}],"doc/api_samples/os-hypervisors/v2.31/hypervisors-with-servers-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisors\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"hypervisor_hostname\": \"fake-mini\","}],"source_content_type":"application/json","patch_set":6,"id":"7aa08908_fd095a32","line":1,"updated":"2016-06-17 19:29:58.000000000","message":"Nor this.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisors\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"hypervisor_hostname\": \"fake-mini\","}],"source_content_type":"application/json","patch_set":6,"id":"5a9d85d2_db087594","line":1,"in_reply_to":"7aa08908_fd095a32","updated":"2016-06-20 07:03:44.000000000","message":"Done","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"}],"doc/api_samples/os-hypervisors/v2.31/hypervisors-without-servers-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisors\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"hypervisor_hostname\": \"fake-mini\","}],"source_content_type":"application/json","patch_set":6,"id":"7aa08908_5d034e10","line":1,"updated":"2016-06-17 19:29:58.000000000","message":"Nor this.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisors\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"hypervisor_hostname\": \"fake-mini\","}],"source_content_type":"application/json","patch_set":6,"id":"5a9d85d2_1b031d75","line":1,"in_reply_to":"7aa08908_5d034e10","updated":"2016-06-20 07:03:44.000000000","message":"Done","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"}],"doc/api_samples/os-hypervisors/v2.32/hypervisors-detail-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164db2e306d97b777f8e165a04efd6f36bc1ba7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            \"vcpus_used\": 0"},{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"    ],"},{"line_number":43,"context_line":"    \"hypervisors_links\": ["},{"line_number":44,"context_line":"        {\"href\": \"http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit\u003d1\u0026marker\u003d2\","},{"line_number":45,"context_line":"         \"rel\": \"next\"}"},{"line_number":46,"context_line":"    ]"}],"source_content_type":"application/json","patch_set":14,"id":"3aaa91ec_2bc0f929","line":43,"updated":"2016-06-28 21:36:35.000000000","message":"At first this looked odd being on the same level as \u0027hypervisors\u0027 but we don\u0027t have any other api samples to compare against with next links for servers/flavors/images. I tested with servers though, booted 3 and listed with a limit of 1 and it\u0027s the same format, so this look correct.\n\nhttp://paste.openstack.org/show/523835/","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a419f53d38ffcc5d440d92b311ed8c9eb2cdd2f4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            \"vcpus_used\": 0"},{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"    ],"},{"line_number":43,"context_line":"    \"hypervisors_links\": ["},{"line_number":44,"context_line":"        {\"href\": \"http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit\u003d1\u0026marker\u003d2\","},{"line_number":45,"context_line":"         \"rel\": \"next\"}"},{"line_number":46,"context_line":"    ]"}],"source_content_type":"application/json","patch_set":14,"id":"3aaa91ec_1d273b13","line":43,"in_reply_to":"3aaa91ec_2bc0f929","updated":"2016-06-29 01:28:57.000000000","message":":) thanks for confirming that.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"07ff441ea649f083a4afa546a750dc669269a8d4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    \"hypervisors_links\": ["},{"line_number":44,"context_line":"        {\"href\": \"http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit\u003d1\u0026marker\u003d2\","},{"line_number":45,"context_line":"         \"rel\": \"next\"}"},{"line_number":46,"context_line":"    ]"},{"line_number":47,"context_line":"}"}],"source_content_type":"application/json","patch_set":16,"id":"3aaa91ec_f2deb56b","line":46,"updated":"2016-06-29 16:46:36.000000000","message":"minor style comment: maybe add two extra lines to the dict and make it (and in other places) \n\n        {\n            \"href\": \"....\", \n            \"rel\": \"next\"\n        }","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"11a18f1aff1955bccd82193047884f42e027c587","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    \"hypervisors_links\": ["},{"line_number":44,"context_line":"        {\"href\": \"http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit\u003d1\u0026marker\u003d2\","},{"line_number":45,"context_line":"         \"rel\": \"next\"}"},{"line_number":46,"context_line":"    ]"},{"line_number":47,"context_line":"}"}],"source_content_type":"application/json","patch_set":16,"id":"3aaa91ec_9a4f7133","line":46,"in_reply_to":"3aaa91ec_f2deb56b","updated":"2016-06-30 02:04:19.000000000","message":"Done","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"}],"nova/api/openstack/compute/hypervisors.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cde94a9a40c344ee66563063f45f5dccf5915959","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":86,"context_line":"        authorize(context)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.31\u0027):"},{"line_number":89,"context_line":"            limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":90,"context_line":"        else:"},{"line_number":91,"context_line":"            limit \u003d marker \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_b53f0d24","line":88,"updated":"2016-06-12 03:38:40.000000000","message":"I don\u0027t see any unit test for this.","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f6b0ec52398596bef0d81bff685edd472df5cf2a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":86,"context_line":"        authorize(context)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.31\u0027):"},{"line_number":89,"context_line":"            limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":90,"context_line":"        else:"},{"line_number":91,"context_line":"            limit \u003d marker \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_b3b0c58c","line":88,"in_reply_to":"7aa08908_b53f0d24","updated":"2016-06-12 07:21:28.000000000","message":"Done","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    def detail(self, req):"},{"line_number":105,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":106,"context_line":"        authorize(context)"},{"line_number":107,"context_line":"        compute_nodes \u003d self.host_api.compute_node_get_all(context)"},{"line_number":108,"context_line":"        req.cache_db_compute_nodes(compute_nodes)"},{"line_number":109,"context_line":"        return dict(hypervisors\u003d[self._view_hypervisor("},{"line_number":110,"context_line":"            hyp, self.host_api.service_get_by_compute_host(context, hyp.host),"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_7d68caf5","line":107,"updated":"2016-06-17 19:29:58.000000000","message":"Why aren\u0027t we adding paging support for the detailed list?","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    def detail(self, req):"},{"line_number":105,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":106,"context_line":"        authorize(context)"},{"line_number":107,"context_line":"        compute_nodes \u003d self.host_api.compute_node_get_all(context)"},{"line_number":108,"context_line":"        req.cache_db_compute_nodes(compute_nodes)"},{"line_number":109,"context_line":"        return dict(hypervisors\u003d[self._view_hypervisor("},{"line_number":110,"context_line":"            hyp, self.host_api.service_get_by_compute_host(context, hyp.host),"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_ea811e4f","line":107,"in_reply_to":"7aa08908_7d68caf5","updated":"2016-06-20 07:03:44.000000000","message":"Done","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"41df72626acecb9635ee743cdf5bfd8b8e28338c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    def detail(self, req):"},{"line_number":105,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":106,"context_line":"        authorize(context)"},{"line_number":107,"context_line":"        compute_nodes \u003d self.host_api.compute_node_get_all(context)"},{"line_number":108,"context_line":"        req.cache_db_compute_nodes(compute_nodes)"},{"line_number":109,"context_line":"        return dict(hypervisors\u003d[self._view_hypervisor("},{"line_number":110,"context_line":"            hyp, self.host_api.service_get_by_compute_host(context, hyp.host),"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_aa9f165e","line":107,"in_reply_to":"7aa08908_7d68caf5","updated":"2016-06-20 01:47:47.000000000","message":"nice catch. we should do for this too.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39103a6f7cccfc81b81ae44563afd4c6b5a7c452","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        return hyp_dict"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @extensions.expected_errors((400))"},{"line_number":84,"context_line":"    def index(self, req):"},{"line_number":85,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":86,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_11ea5cdb","line":83,"updated":"2016-06-23 19:02:16.000000000","message":"Pavel pointed this out in the keypairs pagination change, but we should do this in a separate index method, maybe we have a private _index method that handles the rest of this code, and the top level ones have their own microversion checks and expected_errors.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1ec82489bfe6073b17c36301d829b8429b69d63c","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        return hyp_dict"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @extensions.expected_errors((400))"},{"line_number":84,"context_line":"    def index(self, req):"},{"line_number":85,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":86,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_f3681bf7","line":83,"in_reply_to":"3aaa91ec_11ea5cdb","updated":"2016-06-27 06:27:39.000000000","message":"Done","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"39103a6f7cccfc81b81ae44563afd4c6b5a7c452","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                 False, req)"},{"line_number":105,"context_line":"                                 for hyp in compute_nodes])"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @extensions.expected_errors((400))"},{"line_number":108,"context_line":"    def detail(self, req):"},{"line_number":109,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":110,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_91bc8cdd","line":107,"updated":"2016-06-23 19:02:16.000000000","message":"Same as above.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1ec82489bfe6073b17c36301d829b8429b69d63c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                                 False, req)"},{"line_number":105,"context_line":"                                 for hyp in compute_nodes])"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    @extensions.expected_errors((400))"},{"line_number":108,"context_line":"    def detail(self, req):"},{"line_number":109,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":110,"context_line":"        authorize(context)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_336f43fd","line":107,"in_reply_to":"3aaa91ec_91bc8cdd","updated":"2016-06-27 06:27:39.000000000","message":"Done","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ceffc2e1a199ba570e48a4dc2f7d153f1622d125","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            msg \u003d _(\u0027marker [%s] not found\u0027) % marker"},{"line_number":103,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":104,"context_line":"        req.cache_db_compute_nodes(compute_nodes)"},{"line_number":105,"context_line":"        return dict(hypervisors\u003d[self._view_hypervisor("},{"line_number":106,"context_line":"                                 hyp,"},{"line_number":107,"context_line":"                                 self.host_api.service_get_by_compute_host("},{"line_number":108,"context_line":"                                     context, hyp.host),"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_fe027408","line":105,"range":{"start_line":105,"start_character":38,"end_line":105,"end_character":54},"updated":"2016-06-27 19:00:21.000000000","message":"As Alex pointed out before, this doesn\u0027t provide a next link like we have for servers, images and flavors, built here:\n\nhttps://github.com/openstack/nova/blob/6e8c84d0cd7651b465cf9bb7ad68a9b24b3658c9/nova/api/openstack/common.py#L448\n\nI assume we want that for paging on any other resource, but I\u0027m not totally sure if we have a policy about this - I\u0027d need to ask Sean Dague.","commit_id":"7a80fcf6488dde2765ccbe2870a6be73514dcd78"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"20ddd313c14598b505a456baa34fa35dc276c938","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            msg \u003d _(\u0027marker [%s] not found\u0027) % marker"},{"line_number":103,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":104,"context_line":"        req.cache_db_compute_nodes(compute_nodes)"},{"line_number":105,"context_line":"        return dict(hypervisors\u003d[self._view_hypervisor("},{"line_number":106,"context_line":"                                 hyp,"},{"line_number":107,"context_line":"                                 self.host_api.service_get_by_compute_host("},{"line_number":108,"context_line":"                                     context, hyp.host),"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_ef6120aa","line":105,"range":{"start_line":105,"start_character":38,"end_line":105,"end_character":54},"in_reply_to":"3aaa91ec_fe027408","updated":"2016-06-27 20:14:46.000000000","message":"http://lists.openstack.org/pipermail/openstack-dev/2016-June/098263.html","commit_id":"7a80fcf6488dde2765ccbe2870a6be73514dcd78"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164db2e306d97b777f8e165a04efd6f36bc1ba7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.servicegroup_api \u003d servicegroup.API()"},{"line_number":44,"context_line":"        super(HypervisorsController, self).__init__()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _view_hypervisor(self, hypervisor, service, detail, req, servers\u003dNone,"},{"line_number":47,"context_line":"                         **kwargs):"},{"line_number":48,"context_line":"        alive \u003d self.servicegroup_api.service_is_up(service)"},{"line_number":49,"context_line":"        hyp_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_cb8335cb","line":46,"updated":"2016-06-28 21:36:35.000000000","message":"If we\u0027re going to have a view builder for hypervisors, at some point I\u0027d think we\u0027d move this method into that and use it for show/detail/index, but that could be a later cleanup.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a419f53d38ffcc5d440d92b311ed8c9eb2cdd2f4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.servicegroup_api \u003d servicegroup.API()"},{"line_number":44,"context_line":"        super(HypervisorsController, self).__init__()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _view_hypervisor(self, hypervisor, service, detail, req, servers\u003dNone,"},{"line_number":47,"context_line":"                         **kwargs):"},{"line_number":48,"context_line":"        alive \u003d self.servicegroup_api.service_is_up(service)"},{"line_number":49,"context_line":"        hyp_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_1d557b4f","line":46,"in_reply_to":"3aaa91ec_cb8335cb","updated":"2016-06-29 01:28:57.000000000","message":"Okay, will cleanup this in a follow up patch.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"e8a70ccdde10281415ff94cc28d6d4e28742a4e1","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                context, limit\u003dlimit, marker\u003dmarker)"},{"line_number":104,"context_line":"        except exception.MarkerNotFound:"},{"line_number":105,"context_line":"            msg \u003d _(\u0027marker [%s] not found\u0027) % marker"},{"line_number":106,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":107,"context_line":"        req.cache_db_compute_nodes(compute_nodes)"},{"line_number":108,"context_line":"        hypervisors_list \u003d [self._view_hypervisor("},{"line_number":109,"context_line":"                            hyp,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_1fc5853c","line":106,"updated":"2016-06-28 16:25:44.000000000","message":"Alex Xu in my patch asked to write it as:\n\n    raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164db2e306d97b777f8e165a04efd6f36bc1ba7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                context, limit\u003dlimit, marker\u003dmarker)"},{"line_number":104,"context_line":"        except exception.MarkerNotFound:"},{"line_number":105,"context_line":"            msg \u003d _(\u0027marker [%s] not found\u0027) % marker"},{"line_number":106,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":107,"context_line":"        req.cache_db_compute_nodes(compute_nodes)"},{"line_number":108,"context_line":"        hypervisors_list \u003d [self._view_hypervisor("},{"line_number":109,"context_line":"                            hyp,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_8e5e5be7","line":106,"in_reply_to":"3aaa91ec_1fc5853c","updated":"2016-06-28 21:36:35.000000000","message":"This doesn\u0027t bother me, we do this for flavors and servers. I\u0027m fine either way.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164db2e306d97b777f8e165a04efd6f36bc1ba7","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        hypervisors_links \u003d self._view_builder.get_links(req, hypervisors_list)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        hypervisors_dict \u003d dict(hypervisors\u003dhypervisors_list)"},{"line_number":117,"context_line":"        if hypervisors_links:"},{"line_number":118,"context_line":"            hypervisors_dict[\u0027hypervisors_links\u0027] \u003d hypervisors_links"},{"line_number":119,"context_line":"        return hypervisors_dict"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_6bbfa160","line":117,"range":{"start_line":117,"start_character":11,"end_line":117,"end_character":28},"updated":"2016-06-28 21:36:35.000000000","message":"Don\u0027t we need to only add links if limit is not None? I see that _get_collection_links has some logic for checking of we\u0027ve hit the max limit which defaults to CONF.osapi_max_limit if limit isn\u0027t specific on the request, but if we do have CONF.osapi_max_limit hypervisors, then it will give us the next link which would be an API change for microversions \u003c 2.32.\n\nIt might just be easiest to pass a links\u003dFalse kwarg to _index and for the 2.32 microversion you pass links\u003dTrue. Then only get collection links if that\u0027s True.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a419f53d38ffcc5d440d92b311ed8c9eb2cdd2f4","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        hypervisors_links \u003d self._view_builder.get_links(req, hypervisors_list)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        hypervisors_dict \u003d dict(hypervisors\u003dhypervisors_list)"},{"line_number":117,"context_line":"        if hypervisors_links:"},{"line_number":118,"context_line":"            hypervisors_dict[\u0027hypervisors_links\u0027] \u003d hypervisors_links"},{"line_number":119,"context_line":"        return hypervisors_dict"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_bdb9c77b","line":117,"range":{"start_line":117,"start_character":11,"end_line":117,"end_character":28},"in_reply_to":"3aaa91ec_6bbfa160","updated":"2016-06-29 01:28:57.000000000","message":"Done","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164db2e306d97b777f8e165a04efd6f36bc1ba7","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        hypervisors_links \u003d self._view_builder.get_links("},{"line_number":148,"context_line":"            req, hypervisors_list, detail\u003dTrue)"},{"line_number":149,"context_line":"        hypervisors_dict \u003d dict(hypervisors\u003dhypervisors_list)"},{"line_number":150,"context_line":"        if hypervisors_links:"},{"line_number":151,"context_line":"            hypervisors_dict[\u0027hypervisors_links\u0027] \u003d hypervisors_links"},{"line_number":152,"context_line":"        return hypervisors_dict"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_2ba63953","line":150,"range":{"start_line":150,"start_character":11,"end_line":150,"end_character":28},"updated":"2016-06-28 21:36:35.000000000","message":"Same question as above, seems this would add the links for all microversions.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a419f53d38ffcc5d440d92b311ed8c9eb2cdd2f4","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        hypervisors_links \u003d self._view_builder.get_links("},{"line_number":148,"context_line":"            req, hypervisors_list, detail\u003dTrue)"},{"line_number":149,"context_line":"        hypervisors_dict \u003d dict(hypervisors\u003dhypervisors_list)"},{"line_number":150,"context_line":"        if hypervisors_links:"},{"line_number":151,"context_line":"            hypervisors_dict[\u0027hypervisors_links\u0027] \u003d hypervisors_links"},{"line_number":152,"context_line":"        return hypervisors_dict"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_7d663f2a","line":150,"range":{"start_line":150,"start_character":11,"end_line":150,"end_character":28},"in_reply_to":"3aaa91ec_2ba63953","updated":"2016-06-29 01:28:57.000000000","message":"Done","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"07ff441ea649f083a4afa546a750dc669269a8d4","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return hyp_dict"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @wsgi.Controller.api_version(\"2.32\")  # noqa"},{"line_number":87,"context_line":"    @extensions.expected_errors((400))"},{"line_number":88,"context_line":"    def index(self, req):"},{"line_number":89,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_d4da824a","line":86,"range":{"start_line":86,"start_character":42,"end_line":86,"end_character":48},"updated":"2016-06-29 16:46:36.000000000","message":"seems that this is not needed","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"11a18f1aff1955bccd82193047884f42e027c587","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        return hyp_dict"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @wsgi.Controller.api_version(\"2.32\")  # noqa"},{"line_number":87,"context_line":"    @extensions.expected_errors((400))"},{"line_number":88,"context_line":"    def index(self, req):"},{"line_number":89,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_1a37014e","line":86,"range":{"start_line":86,"start_character":42,"end_line":86,"end_character":48},"in_reply_to":"3aaa91ec_d4da824a","updated":"2016-06-30 02:04:19.000000000","message":"Yes, we need it, there two index method with different api version, otherwise pep8 will fail","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"7ace5abe7f8c224d6730a14806000a3a1b3c31f4","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":90,"context_line":"        return self._index(req, limit\u003dlimit, marker\u003dmarker, links\u003dTrue)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @wsgi.Controller.api_version(\"2.1\", \"2.31\")  # noqa"},{"line_number":93,"context_line":"    @extensions.expected_errors(())"},{"line_number":94,"context_line":"    def index(self, req):"},{"line_number":95,"context_line":"        return self._index(req)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_e1551e1e","line":92,"range":{"start_line":92,"start_character":49,"end_line":92,"end_character":55},"updated":"2016-06-30 10:05:42.000000000","message":"as for my patch this is needed and line 86 not","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"07ff441ea649f083a4afa546a750dc669269a8d4","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            hypervisors_dict[\u0027hypervisors_links\u0027] \u003d hypervisors_links"},{"line_number":119,"context_line":"        return hypervisors_dict"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    @wsgi.Controller.api_version(\"2.32\")  # noqa"},{"line_number":122,"context_line":"    @extensions.expected_errors((400))"},{"line_number":123,"context_line":"    def detail(self, req):"},{"line_number":124,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_f4e5fe08","line":121,"range":{"start_line":121,"start_character":42,"end_line":121,"end_character":48},"updated":"2016-06-29 16:46:36.000000000","message":"the same","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"58f71b3323945dab539b5552f2af58292f89ebb7","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                                context, hyp.host),"},{"line_number":112,"context_line":"                            False, req)"},{"line_number":113,"context_line":"                            for hyp in compute_nodes]"},{"line_number":114,"context_line":"        hypervisors_links \u003d self._view_builder.get_links(req, hypervisors_list)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        hypervisors_dict \u003d dict(hypervisors\u003dhypervisors_list)"},{"line_number":117,"context_line":"        if links and hypervisors_links:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3aaa91ec_46c181e3","line":114,"updated":"2016-06-30 21:25:21.000000000","message":"Why even call this if links is False?","commit_id":"073704956aede7eeebdcce97eabd538b3f85bf0d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"8919ac49007ed66eac03784d151edbe9a1edbe7d","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                                context, hyp.host),"},{"line_number":112,"context_line":"                            False, req)"},{"line_number":113,"context_line":"                            for hyp in compute_nodes]"},{"line_number":114,"context_line":"        hypervisors_links \u003d self._view_builder.get_links(req, hypervisors_list)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        hypervisors_dict \u003d dict(hypervisors\u003dhypervisors_list)"},{"line_number":117,"context_line":"        if links and hypervisors_links:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3aaa91ec_fbd75f20","line":114,"in_reply_to":"3aaa91ec_46c181e3","updated":"2016-07-01 00:49:02.000000000","message":"Right, done!","commit_id":"073704956aede7eeebdcce97eabd538b3f85bf0d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"58f71b3323945dab539b5552f2af58292f89ebb7","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self._view_hypervisor("},{"line_number":145,"context_line":"            hyp, self.host_api.service_get_by_compute_host(context, hyp.host),"},{"line_number":146,"context_line":"            True, req) for hyp in compute_nodes]"},{"line_number":147,"context_line":"        hypervisors_links \u003d self._view_builder.get_links("},{"line_number":148,"context_line":"            req, hypervisors_list, detail\u003dTrue)"},{"line_number":149,"context_line":"        hypervisors_dict \u003d dict(hypervisors\u003dhypervisors_list)"},{"line_number":150,"context_line":"        if links and hypervisors_links:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3aaa91ec_26a9d524","line":147,"updated":"2016-06-30 21:25:21.000000000","message":"same","commit_id":"073704956aede7eeebdcce97eabd538b3f85bf0d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"8919ac49007ed66eac03784d151edbe9a1edbe7d","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self._view_hypervisor("},{"line_number":145,"context_line":"            hyp, self.host_api.service_get_by_compute_host(context, hyp.host),"},{"line_number":146,"context_line":"            True, req) for hyp in compute_nodes]"},{"line_number":147,"context_line":"        hypervisors_links \u003d self._view_builder.get_links("},{"line_number":148,"context_line":"            req, hypervisors_list, detail\u003dTrue)"},{"line_number":149,"context_line":"        hypervisors_dict \u003d dict(hypervisors\u003dhypervisors_list)"},{"line_number":150,"context_line":"        if links and hypervisors_links:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3aaa91ec_fb991f20","line":147,"in_reply_to":"3aaa91ec_26a9d524","updated":"2016-07-01 00:49:02.000000000","message":"Done","commit_id":"073704956aede7eeebdcce97eabd538b3f85bf0d"}],"nova/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cde94a9a40c344ee66563063f45f5dccf5915959","unresolved":false,"context_lines":[{"line_number":325,"context_line":"  Support pagination for hypervisor by accepting limit and marker from the GET"},{"line_number":326,"context_line":"  API request::"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    GET /v2.1/{tenant_id}/os-hypervisors?marker\u003d2\u0026limit\u003d1 "}],"source_content_type":"text/x-rst","patch_set":4,"id":"7aa08908_f5c4f540","line":328,"range":{"start_line":328,"start_character":57,"end_line":328,"end_character":58},"updated":"2016-06-12 03:38:40.000000000","message":"Please fix the whitespace.","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f6b0ec52398596bef0d81bff685edd472df5cf2a","unresolved":false,"context_lines":[{"line_number":325,"context_line":"  Support pagination for hypervisor by accepting limit and marker from the GET"},{"line_number":326,"context_line":"  API request::"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    GET /v2.1/{tenant_id}/os-hypervisors?marker\u003d2\u0026limit\u003d1 "}],"source_content_type":"text/x-rst","patch_set":4,"id":"7aa08908_936dc99b","line":328,"range":{"start_line":328,"start_character":57,"end_line":328,"end_character":58},"in_reply_to":"7aa08908_f5c4f540","updated":"2016-06-12 07:21:28.000000000","message":"Done","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"2c04a52c484e02eeb0b32c2c2e1df0777b607ffb","unresolved":false,"context_lines":[{"line_number":325,"context_line":"  Support pagination for hypervisor by accepting limit and marker from the GET"},{"line_number":326,"context_line":"  API request::"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    GET /v2.1/{tenant_id}/os-hypervisors?marker\u003d2\u0026limit\u003d1"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_918016f9","line":328,"range":{"start_line":328,"start_character":41,"end_line":328,"end_character":57},"updated":"2016-06-23 16:07:34.000000000","message":"I think here should be some generic like:\n    marker\u003d{hypervisor_id}\u0026limit\u003d{limit}","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1ec82489bfe6073b17c36301d829b8429b69d63c","unresolved":false,"context_lines":[{"line_number":325,"context_line":"  Support pagination for hypervisor by accepting limit and marker from the GET"},{"line_number":326,"context_line":"  API request::"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    GET /v2.1/{tenant_id}/os-hypervisors?marker\u003d2\u0026limit\u003d1"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_b37b33bd","line":328,"range":{"start_line":328,"start_character":41,"end_line":328,"end_character":57},"in_reply_to":"3aaa91ec_918016f9","updated":"2016-06-27 06:27:39.000000000","message":"Done","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"e8a70ccdde10281415ff94cc28d6d4e28742a4e1","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"2.32"},{"line_number":329,"context_line":"----"},{"line_number":330,"context_line":"  Support pagination for hypervisor by accepting limit and marker from the GET"},{"line_number":331,"context_line":"  API request::"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    GET /v2.1/{tenant_id}/os-hypervisors?marker\u003d{hypervisor_id}\u0026limit\u003d{limit}"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3aaa91ec_1f462521","line":330,"updated":"2016-06-28 16:25:44.000000000","message":"extra line between","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a419f53d38ffcc5d440d92b311ed8c9eb2cdd2f4","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"2.32"},{"line_number":329,"context_line":"----"},{"line_number":330,"context_line":"  Support pagination for hypervisor by accepting limit and marker from the GET"},{"line_number":331,"context_line":"  API request::"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    GET /v2.1/{tenant_id}/os-hypervisors?marker\u003d{hypervisor_id}\u0026limit\u003d{limit}"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3aaa91ec_fd722fe2","line":330,"in_reply_to":"3aaa91ec_1f462521","updated":"2016-06-29 01:28:57.000000000","message":"Done","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"}],"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cde94a9a40c344ee66563063f45f5dccf5915959","unresolved":false,"context_lines":[{"line_number":3675,"context_line":"        return objects.ComputeNode.get_by_id(context, int(compute_id))"},{"line_number":3676,"context_line":""},{"line_number":3677,"context_line":"    def compute_node_get_all(self, context,"},{"line_number":3678,"context_line":"                             filters\u003dNone, limit\u003dNone, marker\u003dNone):"},{"line_number":3679,"context_line":"        return objects.ComputeNodeList.get_by_filters("},{"line_number":3680,"context_line":"            context, filters\u003dfilters, limit\u003dlimit, marker\u003dmarker)"},{"line_number":3681,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_b5d1cdfd","line":3678,"range":{"start_line":3678,"start_character":29,"end_line":3678,"end_character":36},"updated":"2016-06-12 03:38:40.000000000","message":"Why are filters here? We\u0027re not adding filtering / query parameters support are we?","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f6b0ec52398596bef0d81bff685edd472df5cf2a","unresolved":false,"context_lines":[{"line_number":3675,"context_line":"        return objects.ComputeNode.get_by_id(context, int(compute_id))"},{"line_number":3676,"context_line":""},{"line_number":3677,"context_line":"    def compute_node_get_all(self, context,"},{"line_number":3678,"context_line":"                             filters\u003dNone, limit\u003dNone, marker\u003dNone):"},{"line_number":3679,"context_line":"        return objects.ComputeNodeList.get_by_filters("},{"line_number":3680,"context_line":"            context, filters\u003dfilters, limit\u003dlimit, marker\u003dmarker)"},{"line_number":3681,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_730f7de1","line":3678,"range":{"start_line":3678,"start_character":29,"end_line":3678,"end_character":36},"in_reply_to":"7aa08908_b5d1cdfd","updated":"2016-06-12 07:21:28.000000000","message":"Removed","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"2c04a52c484e02eeb0b32c2c2e1df0777b607ffb","unresolved":false,"context_lines":[{"line_number":3675,"context_line":"        return objects.ComputeNode.get_by_id(context, int(compute_id))"},{"line_number":3676,"context_line":""},{"line_number":3677,"context_line":"    def compute_node_get_all(self, context, limit\u003dNone, marker\u003dNone):"},{"line_number":3678,"context_line":"        return objects.ComputeNodeList.get_by_pagination("},{"line_number":3679,"context_line":"            context, limit\u003dlimit, marker\u003dmarker)"},{"line_number":3680,"context_line":""},{"line_number":3681,"context_line":"    def compute_node_search_by_hypervisor(self, context, hypervisor_match):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_71b3eae9","line":3678,"range":{"start_line":3678,"start_character":39,"end_line":3678,"end_character":56},"updated":"2016-06-23 16:07:34.000000000","message":"why don\u0027t you leave that function?","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34d6bf679dc8cd43867b6f57c71a24b76559b0c5","unresolved":false,"context_lines":[{"line_number":3675,"context_line":"        return objects.ComputeNode.get_by_id(context, int(compute_id))"},{"line_number":3676,"context_line":""},{"line_number":3677,"context_line":"    def compute_node_get_all(self, context, limit\u003dNone, marker\u003dNone):"},{"line_number":3678,"context_line":"        return objects.ComputeNodeList.get_by_pagination("},{"line_number":3679,"context_line":"            context, limit\u003dlimit, marker\u003dmarker)"},{"line_number":3680,"context_line":""},{"line_number":3681,"context_line":"    def compute_node_search_by_hypervisor(self, context, hypervisor_match):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_cefcb574","line":3678,"range":{"start_line":3678,"start_character":39,"end_line":3678,"end_character":56},"in_reply_to":"3aaa91ec_71b3eae9","updated":"2016-06-23 18:50:40.000000000","message":"We\u0027d have to add parameters to the object\u0027s remotable method which is not backward compatible, so a new method is probably justified. We could ask Dan Smith to confirm though.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"}],"nova/compute/cells_api.py":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"07ff441ea649f083a4afa546a750dc669269a8d4","unresolved":false,"context_lines":[{"line_number":602,"context_line":"            raise exception.ComputeHostNotFound(host\u003dcompute_id)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def compute_node_get_all(self, context, limit\u003dNone, marker\u003dNone):"},{"line_number":605,"context_line":"        # NOTE: No pagination for cells, just make sure the arguments for the"},{"line_number":606,"context_line":"        #       method are the same with the compute.api for now."},{"line_number":607,"context_line":"        return self.cells_rpcapi.compute_node_get_all(context)"},{"line_number":608,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_b4ad369d","line":605,"range":{"start_line":605,"start_character":10,"end_line":605,"end_character":14},"updated":"2016-06-29 16:46:36.000000000","message":"NOTE(name)? :)","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"11a18f1aff1955bccd82193047884f42e027c587","unresolved":false,"context_lines":[{"line_number":602,"context_line":"            raise exception.ComputeHostNotFound(host\u003dcompute_id)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def compute_node_get_all(self, context, limit\u003dNone, marker\u003dNone):"},{"line_number":605,"context_line":"        # NOTE: No pagination for cells, just make sure the arguments for the"},{"line_number":606,"context_line":"        #       method are the same with the compute.api for now."},{"line_number":607,"context_line":"        return self.cells_rpcapi.compute_node_get_all(context)"},{"line_number":608,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_5acce988","line":605,"range":{"start_line":605,"start_character":10,"end_line":605,"end_character":14},"in_reply_to":"3aaa91ec_b4ad369d","updated":"2016-06-30 02:04:19.000000000","message":"Done","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"}],"nova/db/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cde94a9a40c344ee66563063f45f5dccf5915959","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"def compute_node_get_all_by_filters(context,"},{"line_number":248,"context_line":"                                    filters\u003dNone, limit\u003dNone, marker\u003dNone):"},{"line_number":249,"context_line":"    \"\"\"Get compute nodes by filters."},{"line_number":250,"context_line":"    :param context: The security context (admin)"},{"line_number":251,"context_line":"    :param filters: Return compute nodes by filters"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_15070182","line":248,"range":{"start_line":248,"start_character":36,"end_line":248,"end_character":43},"updated":"2016-06-12 03:38:40.000000000","message":"Shouldn\u0027t need filters.","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f6b0ec52398596bef0d81bff685edd472df5cf2a","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"def compute_node_get_all_by_filters(context,"},{"line_number":248,"context_line":"                                    filters\u003dNone, limit\u003dNone, marker\u003dNone):"},{"line_number":249,"context_line":"    \"\"\"Get compute nodes by filters."},{"line_number":250,"context_line":"    :param context: The security context (admin)"},{"line_number":251,"context_line":"    :param filters: Return compute nodes by filters"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_93f4a9cf","line":248,"range":{"start_line":248,"start_character":36,"end_line":248,"end_character":43},"in_reply_to":"7aa08908_15070182","updated":"2016-06-12 07:21:28.000000000","message":"Done","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"def compute_node_get_all_by_pagination(context, limit\u003dNone, marker\u003dNone):"},{"line_number":248,"context_line":"    \"\"\"Get compute nodes by filters."},{"line_number":249,"context_line":"    :param context: The security context (admin)"},{"line_number":250,"context_line":"    :param limit: Maximum number of items to return"},{"line_number":251,"context_line":"    :param marker: The last item of the previous page, the next results after"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_f837a8e0","line":248,"range":{"start_line":248,"start_character":28,"end_line":248,"end_character":35},"updated":"2016-06-17 19:29:58.000000000","message":"I\u0027m not sure \u0027filters\u0027 is the correct word here.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"def compute_node_get_all_by_pagination(context, limit\u003dNone, marker\u003dNone):"},{"line_number":248,"context_line":"    \"\"\"Get compute nodes by filters."},{"line_number":249,"context_line":"    :param context: The security context (admin)"},{"line_number":250,"context_line":"    :param limit: Maximum number of items to return"},{"line_number":251,"context_line":"    :param marker: The last item of the previous page, the next results after"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_0a810a4b","line":248,"range":{"start_line":248,"start_character":28,"end_line":248,"end_character":35},"in_reply_to":"7aa08908_f837a8e0","updated":"2016-06-20 07:03:44.000000000","message":"Yes, changed to pagination","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"def compute_node_get_all_by_pagination(context, limit\u003dNone, marker\u003dNone):"},{"line_number":248,"context_line":"    \"\"\"Get compute nodes by filters."},{"line_number":249,"context_line":"    :param context: The security context (admin)"},{"line_number":250,"context_line":"    :param limit: Maximum number of items to return"},{"line_number":251,"context_line":"    :param marker: The last item of the previous page, the next results after"},{"line_number":252,"context_line":"                   this value will be returned"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_1842743e","line":249,"range":{"start_line":249,"start_character":41,"end_line":249,"end_character":48},"updated":"2016-06-17 19:29:58.000000000","message":"I\u0027d remove this, it\u0027s really dependent on policy which might not be an admin.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"def compute_node_get_all_by_pagination(context, limit\u003dNone, marker\u003dNone):"},{"line_number":248,"context_line":"    \"\"\"Get compute nodes by filters."},{"line_number":249,"context_line":"    :param context: The security context (admin)"},{"line_number":250,"context_line":"    :param limit: Maximum number of items to return"},{"line_number":251,"context_line":"    :param marker: The last item of the previous page, the next results after"},{"line_number":252,"context_line":"                   this value will be returned"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_6a96ce95","line":249,"range":{"start_line":249,"start_character":41,"end_line":249,"end_character":48},"in_reply_to":"7aa08908_1842743e","updated":"2016-06-20 07:03:44.000000000","message":"Done","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dd7214c3d3e92609ae02024db0912bf3e70f48a2","unresolved":false,"context_lines":[{"line_number":582,"context_line":"    if \"hypervisor_hostname\" in filters:"},{"line_number":583,"context_line":"        hyp_hostname \u003d filters[\"hypervisor_hostname\"]"},{"line_number":584,"context_line":"        select \u003d select.where(cn_tbl.c.hypervisor_hostname \u003d\u003d hyp_hostname)"},{"line_number":585,"context_line":"    if marker is not None:"},{"line_number":586,"context_line":"        select \u003d select.where(cn_tbl.c.id \u003e marker)"},{"line_number":587,"context_line":"    if limit is not None:"},{"line_number":588,"context_line":"        select \u003d select.limit(limit)"},{"line_number":589,"context_line":"    return select"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_b73bd1ea","line":588,"range":{"start_line":585,"start_character":4,"end_line":588,"end_character":36},"updated":"2016-06-21 00:05:10.000000000","message":"Why aren\u0027t we using sqlalchemyutils.paginate_query like we do for instance and flavor?","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"77c6b736d074f9697fb2b356a488d4170e4b62fe","unresolved":false,"context_lines":[{"line_number":582,"context_line":"    if \"hypervisor_hostname\" in filters:"},{"line_number":583,"context_line":"        hyp_hostname \u003d filters[\"hypervisor_hostname\"]"},{"line_number":584,"context_line":"        select \u003d select.where(cn_tbl.c.hypervisor_hostname \u003d\u003d hyp_hostname)"},{"line_number":585,"context_line":"    if marker is not None:"},{"line_number":586,"context_line":"        select \u003d select.where(cn_tbl.c.id \u003e marker)"},{"line_number":587,"context_line":"    if limit is not None:"},{"line_number":588,"context_line":"        select \u003d select.limit(limit)"},{"line_number":589,"context_line":"    return select"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_0e987d77","line":588,"range":{"start_line":585,"start_character":4,"end_line":588,"end_character":36},"in_reply_to":"5a9d85d2_0dd9f221","updated":"2016-06-23 18:41:20.000000000","message":"Good question, and I\u0027m not really sure.","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3eefcd5aacafd84f6afa9d0e9de070bffc75c09c","unresolved":false,"context_lines":[{"line_number":582,"context_line":"    if \"hypervisor_hostname\" in filters:"},{"line_number":583,"context_line":"        hyp_hostname \u003d filters[\"hypervisor_hostname\"]"},{"line_number":584,"context_line":"        select \u003d select.where(cn_tbl.c.hypervisor_hostname \u003d\u003d hyp_hostname)"},{"line_number":585,"context_line":"    if marker is not None:"},{"line_number":586,"context_line":"        select \u003d select.where(cn_tbl.c.id \u003e marker)"},{"line_number":587,"context_line":"    if limit is not None:"},{"line_number":588,"context_line":"        select \u003d select.limit(limit)"},{"line_number":589,"context_line":"    return select"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_0dd9f221","line":588,"range":{"start_line":585,"start_character":4,"end_line":588,"end_character":36},"in_reply_to":"5a9d85d2_b73bd1ea","updated":"2016-06-21 01:49:14.000000000","message":"compute_node_statistics is calling _compute_node_select, it should return a select object. Should i use paginate_query in _compute_node_fetchall and leave _compute_node_select as it was ?","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"37c649e5fc9242ee5dd40f2182025e24a047157b","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        select \u003d select.where(cn_tbl.c.id \u003e marker)"},{"line_number":591,"context_line":"    if limit is not None:"},{"line_number":592,"context_line":"        select \u003d select.limit(limit)"},{"line_number":593,"context_line":"    return select"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"def _compute_node_fetchall(context, filters\u003dNone, limit\u003dNone, marker\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_d4b44283","line":593,"updated":"2016-06-23 19:33:15.000000000","message":"Another thing here, what\u0027s the default sort on the results? Is it id? Because if we don\u0027t have a deterministic ordering on the results, the marker doesn\u0027t really help us.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1ec82489bfe6073b17c36301d829b8429b69d63c","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        select \u003d select.where(cn_tbl.c.id \u003e marker)"},{"line_number":591,"context_line":"    if limit is not None:"},{"line_number":592,"context_line":"        select \u003d select.limit(limit)"},{"line_number":593,"context_line":"    return select"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"def _compute_node_fetchall(context, filters\u003dNone, limit\u003dNone, marker\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_ee795494","line":593,"in_reply_to":"3aaa91ec_a2b7b8f3","updated":"2016-06-27 06:27:39.000000000","message":"Done","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"59a3043b74f65c168172209c0230b006689016ec","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        select \u003d select.where(cn_tbl.c.id \u003e marker)"},{"line_number":591,"context_line":"    if limit is not None:"},{"line_number":592,"context_line":"        select \u003d select.limit(limit)"},{"line_number":593,"context_line":"    return select"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"def _compute_node_fetchall(context, filters\u003dNone, limit\u003dNone, marker\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_847fcf13","line":593,"in_reply_to":"3aaa91ec_a2b7b8f3","updated":"2016-06-27 05:38:29.000000000","message":"agree, we need a default order key.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"89d63a0df3162556bff03dd7405fe36f246f1b36","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        select \u003d select.where(cn_tbl.c.id \u003e marker)"},{"line_number":591,"context_line":"    if limit is not None:"},{"line_number":592,"context_line":"        select \u003d select.limit(limit)"},{"line_number":593,"context_line":"    return select"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"def _compute_node_fetchall(context, filters\u003dNone, limit\u003dNone, marker\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_a2b7b8f3","line":593,"in_reply_to":"3aaa91ec_d4b44283","updated":"2016-06-23 20:08:01.000000000","message":"To be clear, I think we need to order by id if that\u0027s our marker, so we\u0027re not dependent on the native sort order of the underlying DB.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164db2e306d97b777f8e165a04efd6f36bc1ba7","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        select \u003d select.where(cn_tbl.c.id \u003e marker)"},{"line_number":591,"context_line":"        # Explictly order by id, so we\u0027re not dependent on the native sort"},{"line_number":592,"context_line":"        # order of the underlying DB."},{"line_number":593,"context_line":"        select \u003d select.order_by(asc(\"id\"))"},{"line_number":594,"context_line":"    if limit is not None:"},{"line_number":595,"context_line":"        select \u003d select.limit(limit)"},{"line_number":596,"context_line":"    return select"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_0e426b3e","line":593,"range":{"start_line":593,"start_character":17,"end_line":593,"end_character":43},"updated":"2016-06-28 21:36:35.000000000","message":"Don\u0027t we also want to do this when there isn\u0027t a marker? e.g. I have 20 compute nodes and my first query is limit\u003d10, those should come back sorted by id, then my 2nd query is marker\u003d10 with no limit.\n\nI realize that if sort by id even when marker/limit aren\u0027t specified it changes any potential natural ordering before this microversion, but id should be the default natural sort order in most cases anyway, and I think since we don\u0027t advertise anything about this in our API today it\u0027s probably fine to start enforcing a sort order always.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"dbbdcc1abaa42c258c435ee6d01a0ca9e2b94f91","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        select \u003d select.where(cn_tbl.c.id \u003e marker)"},{"line_number":591,"context_line":"        # Explictly order by id, so we\u0027re not dependent on the native sort"},{"line_number":592,"context_line":"        # order of the underlying DB."},{"line_number":593,"context_line":"        select \u003d select.order_by(asc(\"id\"))"},{"line_number":594,"context_line":"    if limit is not None:"},{"line_number":595,"context_line":"        select \u003d select.limit(limit)"},{"line_number":596,"context_line":"    return select"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_8e2bfbea","line":593,"range":{"start_line":593,"start_character":17,"end_line":593,"end_character":43},"in_reply_to":"3aaa91ec_0e426b3e","updated":"2016-06-28 21:48:35.000000000","message":"I agree that it\u0027s okay to change the sort order even if marker is not specified and therefore before this microversion. The consistency of sort order between specifying a marker and not is of more benefit to a user than keeping the old sort order IMO.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a419f53d38ffcc5d440d92b311ed8c9eb2cdd2f4","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        select \u003d select.where(cn_tbl.c.id \u003e marker)"},{"line_number":591,"context_line":"        # Explictly order by id, so we\u0027re not dependent on the native sort"},{"line_number":592,"context_line":"        # order of the underlying DB."},{"line_number":593,"context_line":"        select \u003d select.order_by(asc(\"id\"))"},{"line_number":594,"context_line":"    if limit is not None:"},{"line_number":595,"context_line":"        select \u003d select.limit(limit)"},{"line_number":596,"context_line":"    return select"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_af206e9c","line":593,"range":{"start_line":593,"start_character":17,"end_line":593,"end_character":43},"in_reply_to":"3aaa91ec_0e426b3e","updated":"2016-06-29 01:28:57.000000000","message":"Moved out from if","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"}],"nova/objects/compute_node.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cde94a9a40c344ee66563063f45f5dccf5915959","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                                  db_computes)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    @base.remotable_classmethod"},{"line_number":468,"context_line":"    def get_by_filters(cls, context, filters\u003dNone, limit\u003dNone, marker\u003dNone):"},{"line_number":469,"context_line":"        db_computes \u003d db.compute_node_get_all_by_filters("},{"line_number":470,"context_line":"            context, filters\u003dfilters, limit\u003dlimit, marker\u003dmarker)"},{"line_number":471,"context_line":"        return base.obj_make_list(context, cls(context), objects.ComputeNode,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_b5f8ad7d","line":468,"range":{"start_line":468,"start_character":8,"end_line":468,"end_character":22},"updated":"2016-06-12 03:38:40.000000000","message":"I think we\u0027re going to need to rename this since the REST API isn\u0027t passing down filter parameters.\n\nYou should also have a unit test for this method which mocks out the db API call.","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f6b0ec52398596bef0d81bff685edd472df5cf2a","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                                  db_computes)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    @base.remotable_classmethod"},{"line_number":468,"context_line":"    def get_by_filters(cls, context, filters\u003dNone, limit\u003dNone, marker\u003dNone):"},{"line_number":469,"context_line":"        db_computes \u003d db.compute_node_get_all_by_filters("},{"line_number":470,"context_line":"            context, filters\u003dfilters, limit\u003dlimit, marker\u003dmarker)"},{"line_number":471,"context_line":"        return base.obj_make_list(context, cls(context), objects.ComputeNode,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_f3036db6","line":468,"range":{"start_line":468,"start_character":8,"end_line":468,"end_character":22},"in_reply_to":"7aa08908_b5f8ad7d","updated":"2016-06-12 07:21:28.000000000","message":"Done","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                                  db_computes)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    @base.remotable_classmethod"},{"line_number":468,"context_line":"    def get_by_pagination(cls, context, limit\u003dNone, marker\u003dNone):"},{"line_number":469,"context_line":"        db_computes \u003d db.compute_node_get_all_by_pagination("},{"line_number":470,"context_line":"            context, limit\u003dlimit, marker\u003dmarker)"},{"line_number":471,"context_line":"        return base.obj_make_list(context, cls(context), objects.ComputeNode,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_38df70d7","line":468,"updated":"2016-06-17 19:29:58.000000000","message":"We should probably have a unit test for this.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                                  db_computes)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    @base.remotable_classmethod"},{"line_number":468,"context_line":"    def get_by_pagination(cls, context, limit\u003dNone, marker\u003dNone):"},{"line_number":469,"context_line":"        db_computes \u003d db.compute_node_get_all_by_pagination("},{"line_number":470,"context_line":"            context, limit\u003dlimit, marker\u003dmarker)"},{"line_number":471,"context_line":"        return base.obj_make_list(context, cls(context), objects.ComputeNode,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_4a48322e","line":468,"in_reply_to":"7aa08908_38df70d7","updated":"2016-06-20 07:03:44.000000000","message":"Done","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"2c04a52c484e02eeb0b32c2c2e1df0777b607ffb","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    # Version 1.12 ComputeNode version 1.12"},{"line_number":453,"context_line":"    # Version 1.13 ComputeNode version 1.13"},{"line_number":454,"context_line":"    # Version 1.14 ComputeNode version 1.14"},{"line_number":455,"context_line":"    # Version 1.15 ComputeNode version 1.15"},{"line_number":456,"context_line":"    VERSION \u003d \u00271.15\u0027"},{"line_number":457,"context_line":"    fields \u003d {"},{"line_number":458,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027ComputeNode\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_910ad677","line":455,"updated":"2016-06-23 16:07:34.000000000","message":"maybe without new function we can leave the same version?","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34d6bf679dc8cd43867b6f57c71a24b76559b0c5","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    # Version 1.12 ComputeNode version 1.12"},{"line_number":453,"context_line":"    # Version 1.13 ComputeNode version 1.13"},{"line_number":454,"context_line":"    # Version 1.14 ComputeNode version 1.14"},{"line_number":455,"context_line":"    # Version 1.15 ComputeNode version 1.15"},{"line_number":456,"context_line":"    VERSION \u003d \u00271.15\u0027"},{"line_number":457,"context_line":"    fields \u003d {"},{"line_number":458,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027ComputeNode\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_4e1f25b7","line":455,"in_reply_to":"3aaa91ec_910ad677","updated":"2016-06-23 18:50:40.000000000","message":"No I don\u0027t think so because get_all is a remotable method so changing it\u0027s signature would also require a new version.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1ea402f95953ee99ec0d4d038ee71314f51238d9","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    # Version 1.12 ComputeNode version 1.12"},{"line_number":453,"context_line":"    # Version 1.13 ComputeNode version 1.13"},{"line_number":454,"context_line":"    # Version 1.14 ComputeNode version 1.14"},{"line_number":455,"context_line":"    # Version 1.15 ComputeNode version 1.15"},{"line_number":456,"context_line":"    VERSION \u003d \u00271.15\u0027"},{"line_number":457,"context_line":"    fields \u003d {"},{"line_number":458,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027ComputeNode\u0027),"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_1ed5f91a","line":455,"updated":"2016-07-01 01:14:09.000000000","message":"This should be \"added get_by_pagination()\". ComputeNodeList 1.15 was not added because of ComputeNode 1.15.","commit_id":"ec53c6c0ec283a4c179bd2845cf0356c27fa5301"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"459669919362c986da7a9ad58d161e701a79519b","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    # Version 1.12 ComputeNode version 1.12"},{"line_number":453,"context_line":"    # Version 1.13 ComputeNode version 1.13"},{"line_number":454,"context_line":"    # Version 1.14 ComputeNode version 1.14"},{"line_number":455,"context_line":"    # Version 1.15 ComputeNode version 1.15"},{"line_number":456,"context_line":"    VERSION \u003d \u00271.15\u0027"},{"line_number":457,"context_line":"    fields \u003d {"},{"line_number":458,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027ComputeNode\u0027),"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_3e9a7562","line":455,"in_reply_to":"3aaa91ec_1ed5f91a","updated":"2016-07-01 01:16:26.000000000","message":"oops, we can clean this up in a follow on change.","commit_id":"ec53c6c0ec283a4c179bd2845cf0356c27fa5301"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"e9670264b88123039d5268c7acc8d4a2de13445f","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    # Version 1.12 ComputeNode version 1.12"},{"line_number":453,"context_line":"    # Version 1.13 ComputeNode version 1.13"},{"line_number":454,"context_line":"    # Version 1.14 ComputeNode version 1.14"},{"line_number":455,"context_line":"    # Version 1.15 ComputeNode version 1.15"},{"line_number":456,"context_line":"    VERSION \u003d \u00271.15\u0027"},{"line_number":457,"context_line":"    fields \u003d {"},{"line_number":458,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027ComputeNode\u0027),"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_4c36bb51","line":455,"in_reply_to":"3aaa91ec_3e9a7562","updated":"2016-07-01 02:37:21.000000000","message":"here: https://review.openstack.org/#/c/336341/","commit_id":"ec53c6c0ec283a4c179bd2845cf0356c27fa5301"}],"nova/tests/functional/api_sample_tests/api_samples/os-hypervisors/v2.31/hypervisors-detail-resp.json.tpl":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"59a3043b74f65c168172209c0230b006689016ec","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisors\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"cpu_info\": {"},{"line_number":5,"context_line":"                \"arch\": \"x86_64\","},{"line_number":6,"context_line":"                \"model\": \"Nehalem\","}],"source_content_type":"text/x-smarty","patch_set":11,"id":"3aaa91ec_c4ac378e","line":3,"updated":"2016-06-27 05:38:29.000000000","message":"I\u0027m thinking whether we need next page link at here. So we have next page links for servers and flavor api.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1ec82489bfe6073b17c36301d829b8429b69d63c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"hypervisors\": ["},{"line_number":3,"context_line":"        {"},{"line_number":4,"context_line":"            \"cpu_info\": {"},{"line_number":5,"context_line":"                \"arch\": \"x86_64\","},{"line_number":6,"context_line":"                \"model\": \"Nehalem\","}],"source_content_type":"text/x-smarty","patch_set":11,"id":"3aaa91ec_0a0e498b","line":3,"in_reply_to":"3aaa91ec_c4ac378e","updated":"2016-06-27 06:27:39.000000000","message":"not sure about that, if needed, i\u0027ll add a viewbuilder for that.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"}],"nova/tests/functional/api_sample_tests/api_samples/os-hypervisors/v2.32/hypervisors-detail-resp.json.tpl":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"07ff441ea649f083a4afa546a750dc669269a8d4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"    ],"},{"line_number":43,"context_line":"    \"hypervisors_links\": ["},{"line_number":44,"context_line":"        {\"href\": \"http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit\u003d1\u0026marker\u003d2\","},{"line_number":45,"context_line":"         \"rel\": \"next\"}"},{"line_number":46,"context_line":"    ]"},{"line_number":47,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":16,"id":"3aaa91ec_74bc6ebb","line":44,"range":{"start_line":44,"start_character":18,"end_line":44,"end_character":84},"updated":"2016-06-29 16:46:36.000000000","message":"shouldn\u0027t here be %(versioned_compute_endpoint)s instead","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"11a18f1aff1955bccd82193047884f42e027c587","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"    ],"},{"line_number":43,"context_line":"    \"hypervisors_links\": ["},{"line_number":44,"context_line":"        {\"href\": \"http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit\u003d1\u0026marker\u003d2\","},{"line_number":45,"context_line":"         \"rel\": \"next\"}"},{"line_number":46,"context_line":"    ]"},{"line_number":47,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":16,"id":"3aaa91ec_daf3b971","line":44,"range":{"start_line":44,"start_character":18,"end_line":44,"end_character":84},"in_reply_to":"3aaa91ec_74bc6ebb","updated":"2016-06-30 02:04:19.000000000","message":"Can\u0027t make it work after change it. ^$ will be added to the string after rendering. And i think it\u0027s ok to use string directly here, since it only used once.","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"7ace5abe7f8c224d6730a14806000a3a1b3c31f4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        }"},{"line_number":42,"context_line":"    ],"},{"line_number":43,"context_line":"    \"hypervisors_links\": ["},{"line_number":44,"context_line":"        {\"href\": \"http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit\u003d1\u0026marker\u003d2\","},{"line_number":45,"context_line":"         \"rel\": \"next\"}"},{"line_number":46,"context_line":"    ]"},{"line_number":47,"context_line":"}"}],"source_content_type":"text/x-smarty","patch_set":16,"id":"3aaa91ec_4114f24b","line":44,"range":{"start_line":44,"start_character":18,"end_line":44,"end_character":84},"in_reply_to":"3aaa91ec_daf3b971","updated":"2016-06-30 10:05:42.000000000","message":"that\u0027s work in my patch )","commit_id":"4cf47e7b7d078316f9d79599e00a4e8366737ed4"}],"nova/tests/functional/api_sample_tests/test_hypervisors.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def setUp(self):"},{"line_number":150,"context_line":"        super(HypervisorsSampleJson231Tests, self).setUp()"},{"line_number":151,"context_line":"        self.api.microversion \u003d self.microversion"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_9805c4c3","line":151,"updated":"2016-06-17 19:29:58.000000000","message":"I don\u0027t think this is actually necessary anymore.\n\nAll this microversion really needs for functional API samples testing, at least right now, is this:\n\n    ADMIN_API \u003d True\n    sample_dir \u003d \"os-hypervisors\"\n\n    def test_hypervisors_list(self):\n        response \u003d self._do_get(\u0027os-hypervisors\u0027)\n        self._verify_response(\u0027hypervisors-list-resp\u0027, {}, response, 200)\n\nAnd then extending api_sample_base.ApiSampleTestBaseV21 instead of HypervisorsSampleJsonTests, but maybe others like it all tested this way. I might ask on the openstack-dev mailing list.\n\n--\n\nAlso, the functional test doesn\u0027t even really seem helpful except for making sure the request/response body doesn\u0027t regress, since the functional test isn\u0027t passing in limit or marker, but I\u0027m not sure we do that anywhere else in functional tests either, and it is tested in the REST API unit test.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def setUp(self):"},{"line_number":150,"context_line":"        super(HypervisorsSampleJson231Tests, self).setUp()"},{"line_number":151,"context_line":"        self.api.microversion \u003d self.microversion"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_5bdac579","line":151,"in_reply_to":"7aa08908_9805c4c3","updated":"2016-06-20 07:03:44.000000000","message":"Done, added test by start new compute service and passing limit marker to test the functionality.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"41df72626acecb9635ee743cdf5bfd8b8e28338c","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def setUp(self):"},{"line_number":150,"context_line":"        super(HypervisorsSampleJson231Tests, self).setUp()"},{"line_number":151,"context_line":"        self.api.microversion \u003d self.microversion"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_ca93824e","line":151,"in_reply_to":"7aa08908_9805c4c3","updated":"2016-06-20 01:47:47.000000000","message":"Yes, in functional tests if we will tests paging or limits in GET then, there will be redundant sample files as included in this patch. I feel unit tests and then in Tempest are good place to cover those.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dd7214c3d3e92609ae02024db0912bf3e70f48a2","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        super(HypervisorsSampleJson231Tests, self).setUp()"},{"line_number":153,"context_line":"        self.api.microversion \u003d self.microversion"},{"line_number":154,"context_line":"        # Start a new compute service for pagination test"},{"line_number":155,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test_hypervisors_list(self):"},{"line_number":158,"context_line":"        response \u003d self._do_get(\u0027os-hypervisors?limit\u003d1\u0026marker\u003d1\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_12491360","line":155,"updated":"2016-06-21 00:05:10.000000000","message":"Why is this needed? To fake out the database since the tests are using marker\u003d1? If so, we should maybe explain that in the comment.","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3eefcd5aacafd84f6afa9d0e9de070bffc75c09c","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        super(HypervisorsSampleJson231Tests, self).setUp()"},{"line_number":153,"context_line":"        self.api.microversion \u003d self.microversion"},{"line_number":154,"context_line":"        # Start a new compute service for pagination test"},{"line_number":155,"context_line":"        self.start_service(\u0027compute\u0027, host\u003d\u0027host1\u0027)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test_hypervisors_list(self):"},{"line_number":158,"context_line":"        response \u003d self._do_get(\u0027os-hypervisors?limit\u003d1\u0026marker\u003d1\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_521d5b72","line":155,"in_reply_to":"5a9d85d2_12491360","updated":"2016-06-21 01:49:14.000000000","message":"Yes, fake a record with id\u003d2, comment added.","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"2c04a52c484e02eeb0b32c2c2e1df0777b607ffb","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class HypervisorsSampleJson231Tests(api_sample_base.ApiSampleTestBaseV21):"},{"line_number":146,"context_line":"    ADMIN_API \u003d True"},{"line_number":147,"context_line":"    sample_dir \u003d \"os-hypervisors\""},{"line_number":148,"context_line":"    microversion \u003d \u00272.31\u0027"},{"line_number":149,"context_line":"    scenarios \u003d [(\u0027v2_31\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_31ce822e","line":147,"range":{"start_line":146,"start_character":4,"end_line":147,"end_character":33},"updated":"2016-06-23 16:07:34.000000000","message":"is it needed?","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34d6bf679dc8cd43867b6f57c71a24b76559b0c5","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"class HypervisorsSampleJson231Tests(api_sample_base.ApiSampleTestBaseV21):"},{"line_number":146,"context_line":"    ADMIN_API \u003d True"},{"line_number":147,"context_line":"    sample_dir \u003d \"os-hypervisors\""},{"line_number":148,"context_line":"    microversion \u003d \u00272.31\u0027"},{"line_number":149,"context_line":"    scenarios \u003d [(\u0027v2_31\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_2ee1f99a","line":147,"range":{"start_line":146,"start_character":4,"end_line":147,"end_character":33},"in_reply_to":"3aaa91ec_31ce822e","updated":"2016-06-23 18:50:40.000000000","message":"Yes self._verify_response(\u0027hypervisors-list-resp\u0027, {}, response, 200) needs them to find the response template/sample.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"}],"nova/tests/unit/api/openstack/compute/test_hypervisors.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":537,"context_line":"class HypervisorsTestV231(HypervisorsTestV228):"},{"line_number":538,"context_line":"    api_version \u003d \u00272.31\u0027"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"    def _get_request(self, use_admin_context, url\u003d\u0027\u0027):"},{"line_number":541,"context_line":"        return fakes.HTTPRequest.blank(url,"},{"line_number":542,"context_line":"                                       use_admin_context\u003duse_admin_context,"},{"line_number":543,"context_line":"                                       version\u003dself.api_version)"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"    def test_index_pagination(self):"},{"line_number":546,"context_line":"        req \u003d self._get_request(True,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_d87e2c1a","line":543,"range":{"start_line":540,"start_character":4,"end_line":543,"end_character":64},"updated":"2016-06-17 19:29:58.000000000","message":"I don\u0027t think you actually need this, the parent class will work.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":537,"context_line":"class HypervisorsTestV231(HypervisorsTestV228):"},{"line_number":538,"context_line":"    api_version \u003d \u00272.31\u0027"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"    def _get_request(self, use_admin_context, url\u003d\u0027\u0027):"},{"line_number":541,"context_line":"        return fakes.HTTPRequest.blank(url,"},{"line_number":542,"context_line":"                                       use_admin_context\u003duse_admin_context,"},{"line_number":543,"context_line":"                                       version\u003dself.api_version)"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"    def test_index_pagination(self):"},{"line_number":546,"context_line":"        req \u003d self._get_request(True,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_e0813f4f","line":543,"range":{"start_line":540,"start_character":4,"end_line":543,"end_character":64},"in_reply_to":"7aa08908_d87e2c1a","updated":"2016-06-20 07:03:44.000000000","message":"The parent class doesn\u0027t have url param, i\u0027ll change the parent instead.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"41df72626acecb9635ee743cdf5bfd8b8e28338c","unresolved":false,"context_lines":[{"line_number":547,"context_line":"                                \u0027/v2/1234/os-hypervisors?limit\u003d1\u0026marker\u003d1\u0027)"},{"line_number":548,"context_line":"        result \u003d self.controller.index(req)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"        self.assertEqual(result, dict(hypervisors\u003dself.INDEX_HYPER_DICTS))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_ea03de74","line":550,"range":{"start_line":550,"start_character":8,"end_line":550,"end_character":73},"updated":"2016-06-20 01:47:47.000000000","message":"it just tests response without limit. we should tests by applying limit/marker here. something like in flavor tests-\n\nhttps://github.com/openstack/nova/blob/master/nova/tests/unit/api/openstack/compute/test_flavors.py#L246\n\nand also some negative tests with over limit invalid marker etc.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"684f4826ce076917750428d1566b3ac0b964bf5d","unresolved":false,"context_lines":[{"line_number":547,"context_line":"                                \u0027/v2/1234/os-hypervisors?limit\u003d1\u0026marker\u003d1\u0027)"},{"line_number":548,"context_line":"        result \u003d self.controller.index(req)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"        self.assertEqual(result, dict(hypervisors\u003dself.INDEX_HYPER_DICTS))"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_988f8422","line":550,"updated":"2016-06-17 19:29:58.000000000","message":"nit: the arguments here should be assertEqual(expected, observed) so you\u0027d swap them.","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":547,"context_line":"                                \u0027/v2/1234/os-hypervisors?limit\u003d1\u0026marker\u003d1\u0027)"},{"line_number":548,"context_line":"        result \u003d self.controller.index(req)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"        self.assertEqual(result, dict(hypervisors\u003dself.INDEX_HYPER_DICTS))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_0081eb4a","line":550,"range":{"start_line":550,"start_character":8,"end_line":550,"end_character":73},"in_reply_to":"5a9d85d2_ea03de74","updated":"2016-06-20 07:03:44.000000000","message":"Done","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"9ed3d88b6b873e3c91e599213505c62164022968","unresolved":false,"context_lines":[{"line_number":547,"context_line":"                                \u0027/v2/1234/os-hypervisors?limit\u003d1\u0026marker\u003d1\u0027)"},{"line_number":548,"context_line":"        result \u003d self.controller.index(req)"},{"line_number":549,"context_line":""},{"line_number":550,"context_line":"        self.assertEqual(result, dict(hypervisors\u003dself.INDEX_HYPER_DICTS))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_80483b5d","line":550,"in_reply_to":"7aa08908_988f8422","updated":"2016-06-20 07:03:44.000000000","message":"Done","commit_id":"242f433c47402ff6d6c7547f3ab447449492c989"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dd7214c3d3e92609ae02024db0912bf3e70f48a2","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"def fake_compute_node_get_all(context, limit\u003dNone, marker\u003dNone):"},{"line_number":112,"context_line":"    if marker in [\u002799999\u0027]:"},{"line_number":113,"context_line":"        raise exception.MarkerNotFound(marker)"},{"line_number":114,"context_line":"    marker_found \u003d True if marker is None else False"},{"line_number":115,"context_line":"    output \u003d []"},{"line_number":116,"context_line":"    for hyper in TEST_HYPERS_OBJ:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_f2960793","line":113,"range":{"start_line":113,"start_character":24,"end_line":113,"end_character":38},"updated":"2016-06-21 00:05:10.000000000","message":"The DB API doesn\u0027t even return this does it? You seem to be building some fake logic into the DB API to make the REST API test work, but I don\u0027t think this is how it would actually work.","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3eefcd5aacafd84f6afa9d0e9de070bffc75c09c","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"def fake_compute_node_get_all(context, limit\u003dNone, marker\u003dNone):"},{"line_number":112,"context_line":"    if marker in [\u002799999\u0027]:"},{"line_number":113,"context_line":"        raise exception.MarkerNotFound(marker)"},{"line_number":114,"context_line":"    marker_found \u003d True if marker is None else False"},{"line_number":115,"context_line":"    output \u003d []"},{"line_number":116,"context_line":"    for hyper in TEST_HYPERS_OBJ:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_cd51aa64","line":113,"range":{"start_line":113,"start_character":24,"end_line":113,"end_character":38},"in_reply_to":"5a9d85d2_f2960793","updated":"2016-06-21 01:49:14.000000000","message":"Oops, right, Forgot to add check in db api. Added.","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cde94a9a40c344ee66563063f45f5dccf5915959","unresolved":false,"context_lines":[{"line_number":7417,"context_line":"    def setUp(self):"},{"line_number":7418,"context_line":"        super(ComputeNodeTestCase, self).setUp()"},{"line_number":7419,"context_line":"        self.ctxt \u003d context.get_admin_context()"},{"line_number":7420,"context_line":""},{"line_number":7421,"context_line":"        self.service_dict \u003d dict(host\u003d\u0027host1\u0027, binary\u003d\u0027nova-compute\u0027,"},{"line_number":7422,"context_line":"                            topic\u003dCONF.compute_topic, report_count\u003d1,"},{"line_number":7423,"context_line":"                            disabled\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_d5ed79b8","line":7420,"updated":"2016-06-12 03:38:40.000000000","message":"Remove the unrelated whitespace change.","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"f6b0ec52398596bef0d81bff685edd472df5cf2a","unresolved":false,"context_lines":[{"line_number":7417,"context_line":"    def setUp(self):"},{"line_number":7418,"context_line":"        super(ComputeNodeTestCase, self).setUp()"},{"line_number":7419,"context_line":"        self.ctxt \u003d context.get_admin_context()"},{"line_number":7420,"context_line":""},{"line_number":7421,"context_line":"        self.service_dict \u003d dict(host\u003d\u0027host1\u0027, binary\u003d\u0027nova-compute\u0027,"},{"line_number":7422,"context_line":"                            topic\u003dCONF.compute_topic, report_count\u003d1,"},{"line_number":7423,"context_line":"                            disabled\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_132f193f","line":7420,"in_reply_to":"7aa08908_d5ed79b8","updated":"2016-06-12 07:21:28.000000000","message":"Done","commit_id":"4d6a6590efc401efa54862fcc68515ce532779af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dd7214c3d3e92609ae02024db0912bf3e70f48a2","unresolved":false,"context_lines":[{"line_number":7465,"context_line":"        new_stats \u003d jsonutils.loads(node[\u0027stats\u0027])"},{"line_number":7466,"context_line":"        self.assertEqual(self.stats, new_stats)"},{"line_number":7467,"context_line":""},{"line_number":7468,"context_line":"    def test_compute_node_get_all_by_pagination(self):"},{"line_number":7469,"context_line":"        service_dict \u003d dict(host\u003d\u0027host2\u0027, binary\u003d\u0027nova-compute\u0027,"},{"line_number":7470,"context_line":"                            topic\u003dCONF.compute_topic, report_count\u003d1,"},{"line_number":7471,"context_line":"                            disabled\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_128e3378","line":7468,"updated":"2016-06-21 00:05:10.000000000","message":"We should have a MarkerNotFound test in here.","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dd7214c3d3e92609ae02024db0912bf3e70f48a2","unresolved":false,"context_lines":[{"line_number":7465,"context_line":"        new_stats \u003d jsonutils.loads(node[\u0027stats\u0027])"},{"line_number":7466,"context_line":"        self.assertEqual(self.stats, new_stats)"},{"line_number":7467,"context_line":""},{"line_number":7468,"context_line":"    def test_compute_node_get_all_by_pagination(self):"},{"line_number":7469,"context_line":"        service_dict \u003d dict(host\u003d\u0027host2\u0027, binary\u003d\u0027nova-compute\u0027,"},{"line_number":7470,"context_line":"                            topic\u003dCONF.compute_topic, report_count\u003d1,"},{"line_number":7471,"context_line":"                            disabled\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_d2930ba2","line":7468,"updated":"2016-06-21 00:05:10.000000000","message":"We should have some kind of MarkerNotFound test in here.","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3eefcd5aacafd84f6afa9d0e9de070bffc75c09c","unresolved":false,"context_lines":[{"line_number":7465,"context_line":"        new_stats \u003d jsonutils.loads(node[\u0027stats\u0027])"},{"line_number":7466,"context_line":"        self.assertEqual(self.stats, new_stats)"},{"line_number":7467,"context_line":""},{"line_number":7468,"context_line":"    def test_compute_node_get_all_by_pagination(self):"},{"line_number":7469,"context_line":"        service_dict \u003d dict(host\u003d\u0027host2\u0027, binary\u003d\u0027nova-compute\u0027,"},{"line_number":7470,"context_line":"                            topic\u003dCONF.compute_topic, report_count\u003d1,"},{"line_number":7471,"context_line":"                            disabled\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_0580aa45","line":7468,"in_reply_to":"5a9d85d2_d2930ba2","updated":"2016-06-21 01:49:14.000000000","message":"Done","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"}],"nova/tests/unit/objects/test_compute_node.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dd7214c3d3e92609ae02024db0912bf3e70f48a2","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                         comparators\u003dself.comparators())"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def test_get_by_pagination(self):"},{"line_number":386,"context_line":"        self.mox.StubOutWithMock(db, \u0027compute_node_get_all_by_pagination\u0027)"},{"line_number":387,"context_line":"        db.compute_node_get_all_by_pagination(self.context,"},{"line_number":388,"context_line":"                                              limit\u003d1, marker\u003d1).AndReturn("},{"line_number":389,"context_line":"            [fake_compute_node])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_d26f8b90","line":386,"updated":"2016-06-21 00:05:10.000000000","message":"Please use mock for new tests.","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"3eefcd5aacafd84f6afa9d0e9de070bffc75c09c","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                         comparators\u003dself.comparators())"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def test_get_by_pagination(self):"},{"line_number":386,"context_line":"        self.mox.StubOutWithMock(db, \u0027compute_node_get_all_by_pagination\u0027)"},{"line_number":387,"context_line":"        db.compute_node_get_all_by_pagination(self.context,"},{"line_number":388,"context_line":"                                              limit\u003d1, marker\u003d1).AndReturn("},{"line_number":389,"context_line":"            [fake_compute_node])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a9d85d2_65fa4ebf","line":386,"in_reply_to":"5a9d85d2_d26f8b90","updated":"2016-06-21 01:49:14.000000000","message":"Done","commit_id":"ca49e8fd9caf26e5485226c0b95585299c270543"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34d6bf679dc8cd43867b6f57c71a24b76559b0c5","unresolved":false,"context_lines":[{"line_number":385,"context_line":"    @mock.patch(\u0027nova.db.compute_node_get_all_by_pagination\u0027,"},{"line_number":386,"context_line":"                return_value\u003d[fake_compute_node])"},{"line_number":387,"context_line":"    def test_get_by_pagination(self, fake_get_by_pagination):"},{"line_number":388,"context_line":"        self.mox.ReplayAll()"},{"line_number":389,"context_line":"        computes \u003d compute_node.ComputeNodeList.get_by_pagination("},{"line_number":390,"context_line":"            self.context, limit\u003d1, marker\u003d1)"},{"line_number":391,"context_line":"        self.assertEqual(1, len(computes))"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_0e8cfdd8","line":388,"range":{"start_line":388,"start_character":8,"end_line":388,"end_character":28},"updated":"2016-06-23 18:50:40.000000000","message":"You don\u0027t need this if you\u0027re just using mock.","commit_id":"511377310e415645b752778d3e900fbe9fc171af"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1ec82489bfe6073b17c36301d829b8429b69d63c","unresolved":false,"context_lines":[{"line_number":385,"context_line":"    @mock.patch(\u0027nova.db.compute_node_get_all_by_pagination\u0027,"},{"line_number":386,"context_line":"                return_value\u003d[fake_compute_node])"},{"line_number":387,"context_line":"    def test_get_by_pagination(self, fake_get_by_pagination):"},{"line_number":388,"context_line":"        self.mox.ReplayAll()"},{"line_number":389,"context_line":"        computes \u003d compute_node.ComputeNodeList.get_by_pagination("},{"line_number":390,"context_line":"            self.context, limit\u003d1, marker\u003d1)"},{"line_number":391,"context_line":"        self.assertEqual(1, len(computes))"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_4498476a","line":388,"range":{"start_line":388,"start_character":8,"end_line":388,"end_character":28},"in_reply_to":"3aaa91ec_0e8cfdd8","updated":"2016-06-27 06:27:39.000000000","message":"Done","commit_id":"511377310e415645b752778d3e900fbe9fc171af"}],"releasenotes/notes/pagination-for-hypervisor-9c3393cd58149791.yaml":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"e8a70ccdde10281415ff94cc28d6d4e28742a4e1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Support pagination for hypervisors, the admin is able to perform"},{"line_number":4,"context_line":"    paginate query by using limit and marker to get a list of hypervisors."},{"line_number":5,"context_line":"    The result will be sorted by compute node id default."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_df7e5d69","line":3,"updated":"2016-06-28 16:25:44.000000000","message":"I think we should write smth like \u0027Added microversion v2.32 adds ...\u0027","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a419f53d38ffcc5d440d92b311ed8c9eb2cdd2f4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Support pagination for hypervisors, the admin is able to perform"},{"line_number":4,"context_line":"    paginate query by using limit and marker to get a list of hypervisors."},{"line_number":5,"context_line":"    The result will be sorted by compute node id default."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_af6eaec6","line":3,"in_reply_to":"3aaa91ec_df7e5d69","updated":"2016-06-29 01:28:57.000000000","message":"Done","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6164db2e306d97b777f8e165a04efd6f36bc1ba7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Support pagination for hypervisors, the admin is able to perform"},{"line_number":4,"context_line":"    paginate query by using limit and marker to get a list of hypervisors."},{"line_number":5,"context_line":"    The result will be sorted by compute node id default."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_0e4c2b41","line":5,"range":{"start_line":5,"start_character":49,"end_line":5,"end_character":56},"updated":"2016-06-28 21:36:35.000000000","message":"You probably don\u0027t need to have \u0027default\u0027 in here, it makes it sound like there is an option for sort order, which there isn\u0027t.","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"a419f53d38ffcc5d440d92b311ed8c9eb2cdd2f4","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Support pagination for hypervisors, the admin is able to perform"},{"line_number":4,"context_line":"    paginate query by using limit and marker to get a list of hypervisors."},{"line_number":5,"context_line":"    The result will be sorted by compute node id default."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3aaa91ec_8f7132ab","line":5,"range":{"start_line":5,"start_character":49,"end_line":5,"end_character":56},"in_reply_to":"3aaa91ec_0e4c2b41","updated":"2016-06-29 01:28:57.000000000","message":"Done","commit_id":"7e19b5502d53a5b50c1655c9cea690bed36d93fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"58f71b3323945dab539b5552f2af58292f89ebb7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added microversion v2.32 adds pagination for hypervisors, the admin is"},{"line_number":4,"context_line":"    able to perform paginate query by using limit and marker to get a list"},{"line_number":5,"context_line":"    of hypervisors. The result will be sorted by compute node id."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"3aaa91ec_810a331e","line":3,"range":{"start_line":3,"start_character":29,"end_line":3,"end_character":44},"updated":"2016-06-30 21:25:21.000000000","message":"which adds paging support","commit_id":"073704956aede7eeebdcce97eabd538b3f85bf0d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"8919ac49007ed66eac03784d151edbe9a1edbe7d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added microversion v2.32 adds pagination for hypervisors, the admin is"},{"line_number":4,"context_line":"    able to perform paginate query by using limit and marker to get a list"},{"line_number":5,"context_line":"    of hypervisors. The result will be sorted by compute node id."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"3aaa91ec_9b745b68","line":3,"range":{"start_line":3,"start_character":29,"end_line":3,"end_character":44},"in_reply_to":"3aaa91ec_810a331e","updated":"2016-07-01 00:49:02.000000000","message":"Done","commit_id":"073704956aede7eeebdcce97eabd538b3f85bf0d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"58f71b3323945dab539b5552f2af58292f89ebb7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added microversion v2.32 adds pagination for hypervisors, the admin is"},{"line_number":4,"context_line":"    able to perform paginate query by using limit and marker to get a list"},{"line_number":5,"context_line":"    of hypervisors. The result will be sorted by compute node id."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"3aaa91ec_e13cd7c9","line":5,"range":{"start_line":5,"start_character":49,"end_line":5,"end_character":61},"updated":"2016-06-30 21:25:21.000000000","message":"hypervisor\n\n\u0027compute node\u0027 is an internal detail, hypervisor is the element in the REST API response.","commit_id":"073704956aede7eeebdcce97eabd538b3f85bf0d"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"8919ac49007ed66eac03784d151edbe9a1edbe7d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added microversion v2.32 adds pagination for hypervisors, the admin is"},{"line_number":4,"context_line":"    able to perform paginate query by using limit and marker to get a list"},{"line_number":5,"context_line":"    of hypervisors. The result will be sorted by compute node id."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"3aaa91ec_9bfbbbc0","line":5,"range":{"start_line":5,"start_character":49,"end_line":5,"end_character":61},"in_reply_to":"3aaa91ec_e13cd7c9","updated":"2016-07-01 00:49:02.000000000","message":"Done","commit_id":"073704956aede7eeebdcce97eabd538b3f85bf0d"}]}
