)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11819,"name":"Chaoyi Huang","email":"joehuang@huawei.com","username":"joehuang"},"change_message_id":"7410a6e3c39a1ed8beadcfdaf06e56c4aed02005","unresolved":false,"context_lines":[{"line_number":16,"context_line":"of an application, which consists of a  group of VMs, for disaster"},{"line_number":17,"context_line":"recovery purpose from another site."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Atomic quiesce / unquiesce API will allow to make snapshot of a group of"},{"line_number":20,"context_line":"VMs in a transaction way, for example, quiesce VM1, quiesce VM2, quiesce VM3,"},{"line_number":21,"context_line":"snapshot VM1\u0027s volumes, snapshot VM2\u0027s volumes, snapshot VM3\u0027s volumes,"},{"line_number":22,"context_line":"unquiesce VM3, unquiesce VM2, unquiesce VM1. For some telecom application,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":51,"id":"fa69d971_fae90ee7","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":6},"updated":"2016-01-05 03:54:35.000000000","message":"Remove \"Atomic\", and change \"will allow to make\" to \"will allow making\"","commit_id":"5d49520e09d7e4ce2357c890fca86d40d17e29d1"}],"doc/api_samples/servers/v2.13/server-action-quiesce.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"quiesce\": \"\""},{"line_number":3,"context_line":"}"}],"source_content_type":"application/json","patch_set":24,"id":"9a8ffd7b_6225b6c0","line":2,"updated":"2015-12-01 17:11:51.000000000","message":"The empty string looks strange, I checked start and stop uses null instead.","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"}],"etc/nova/policy.json":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7d690ec61e7bb4ee8daa26996cbd7e3114390e2f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \"compute:stop\": \"rule:admin_or_owner\","},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"compute:quiesce\": \"rule:admin_or_owner\","},{"line_number":32,"context_line":"    \"compute:unquiesce\": \"rule:admin_or_owner\","},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"compute:get_lock\": \"\","},{"line_number":35,"context_line":"    \"compute:lock\": \"\","}],"source_content_type":"application/json","patch_set":36,"id":"5a710552_886eddc7","line":32,"updated":"2015-12-15 13:09:01.000000000","message":"The above 2 policies are not necessary because os_compute_authorizer which is used in v2.1 API are defined as\n\n 398 def os_compute_authorizer(extension_name):\n 399     return core_authorizer(\u0027os_compute_api\u0027, extension_name)","commit_id":"53d5dcfd5983f5d09aeed46fbad145f75903dc18"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0aad86334042328209fcf15f02a78e1423cef59b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \"compute:stop\": \"rule:admin_or_owner\","},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"compute:quiesce\": \"rule:admin_or_owner\","},{"line_number":32,"context_line":"    \"compute:unquiesce\": \"rule:admin_or_owner\","},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"compute:get_lock\": \"\","},{"line_number":35,"context_line":"    \"compute:lock\": \"\","}],"source_content_type":"application/json","patch_set":36,"id":"5a710552_bf83accb","line":32,"in_reply_to":"5a710552_886eddc7","updated":"2015-12-16 02:09:53.000000000","message":"Done","commit_id":"53d5dcfd5983f5d09aeed46fbad145f75903dc18"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a940dd490a21db5171100078d16db4d935fe5646","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"compute:get_diagnostics\": \"\","},{"line_number":26,"context_line":"    \"compute:get_instance_diagnostics\": \"\","},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    \"compute:quiesce\": \"rule:admin_or_owner\","},{"line_number":29,"context_line":"    \"compute:unquiesce\": \"rule:admin_or_owner\","},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"compute:start\": \"rule:admin_or_owner\","},{"line_number":32,"context_line":"    \"compute:stop\": \"rule:admin_or_owner\","}],"source_content_type":"application/json","patch_set":52,"id":"fa69d971_0e685d86","line":29,"range":{"start_line":28,"start_character":4,"end_line":29,"end_character":47},"updated":"2016-01-05 08:52:05.000000000","message":"I still am feeling the above policies and I did put the same comment on Patch Set 36.\n\nWhy do we need them now?","commit_id":"ba1d4c917609676f99d6d3cfc4fca923cd8fe688"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"17b18d4bbac99b40cc1e41c2323acf2d12b7ad24","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"compute:get_diagnostics\": \"\","},{"line_number":26,"context_line":"    \"compute:get_instance_diagnostics\": \"\","},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    \"compute:quiesce\": \"rule:admin_or_owner\","},{"line_number":29,"context_line":"    \"compute:unquiesce\": \"rule:admin_or_owner\","},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"compute:start\": \"rule:admin_or_owner\","}],"source_content_type":"application/json","patch_set":73,"id":"ba63e191_c299df20","line":28,"updated":"2016-01-20 10:42:26.000000000","message":"I would rather have \"\", because \"rule:admin_or_owner\" is the default.","commit_id":"07426426f03098af736710db90e8c7326bdc6c0a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"17b18d4bbac99b40cc1e41c2323acf2d12b7ad24","unresolved":false,"context_lines":[{"line_number":273,"context_line":"    \"os_compute_api:servers:start\": \"rule:admin_or_owner\","},{"line_number":274,"context_line":"    \"os_compute_api:servers:stop\": \"rule:admin_or_owner\","},{"line_number":275,"context_line":"    \"os_compute_api:servers:quiesce\": \"rule:admin_or_owner\","},{"line_number":276,"context_line":"    \"os_compute_api:servers:unquiesce\": \"rule:admin_or_owner\","},{"line_number":277,"context_line":"    \"os_compute_api:os-access-ips:discoverable\": \"\","},{"line_number":278,"context_line":"    \"os_compute_api:os-access-ips\": \"\","},{"line_number":279,"context_line":"    \"os_compute_api:os-admin-actions\": \"rule:admin_api\","}],"source_content_type":"application/json","patch_set":73,"id":"ba63e191_228b1bc5","line":276,"updated":"2016-01-20 10:42:26.000000000","message":"as above.","commit_id":"07426426f03098af736710db90e8c7326bdc6c0a"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"68d1220ace83738d8cfaa689b9b9aeba03f0d5a9","unresolved":false,"context_lines":[{"line_number":67,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":68,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":69,"context_line":"_MIN_API_VERSION \u003d \"2.1\""},{"line_number":70,"context_line":"_MAX_API_VERSION \u003d \"2.16\""},{"line_number":71,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":63,"id":"ba63e191_a310d14f","line":70,"range":{"start_line":70,"start_character":22,"end_line":70,"end_character":24},"updated":"2016-01-18 20:52:19.000000000","message":"this not update ..","commit_id":"c8dc369cffa173e79221ff6aebe37f9473abf03f"}],"nova/api/openstack/common.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"17b18d4bbac99b40cc1e41c2323acf2d12b7ad24","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        task_states.RESIZE_MIGRATING: \u0027RESIZE\u0027,"},{"line_number":78,"context_line":"        task_states.RESIZE_MIGRATED: \u0027RESIZE\u0027,"},{"line_number":79,"context_line":"        task_states.RESIZE_FINISH: \u0027RESIZE\u0027,"},{"line_number":80,"context_line":"        task_states.QUIESCING: \u0027QUIESCE\u0027,"},{"line_number":81,"context_line":"    },"},{"line_number":82,"context_line":"    vm_states.BUILDING: {"},{"line_number":83,"context_line":"        \u0027default\u0027: \u0027BUILD\u0027,"}],"source_content_type":"text/x-python","patch_set":73,"id":"ba63e191_7da9b4de","line":80,"updated":"2016-01-20 10:42:26.000000000","message":"Need to hide this from older versions, maybe using \"UNKNOWN\" for the task_state too?","commit_id":"07426426f03098af736710db90e8c7326bdc6c0a"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"1dc28b9da239aed52a4403ca50db319f5ac99404","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        task_states.RESIZE_MIGRATING: \u0027RESIZE\u0027,"},{"line_number":78,"context_line":"        task_states.RESIZE_MIGRATED: \u0027RESIZE\u0027,"},{"line_number":79,"context_line":"        task_states.RESIZE_FINISH: \u0027RESIZE\u0027,"},{"line_number":80,"context_line":"        task_states.QUIESCING: \u0027QUIESCE\u0027,"},{"line_number":81,"context_line":"    },"},{"line_number":82,"context_line":"    vm_states.BUILDING: {"},{"line_number":83,"context_line":"        \u0027default\u0027: \u0027BUILD\u0027,"}],"source_content_type":"text/x-python","patch_set":73,"id":"9a68dd71_40bbeb72","line":80,"in_reply_to":"ba63e191_7da9b4de","updated":"2016-01-21 02:03:59.000000000","message":"Yes, here is just a mapping, I think we have to handle this in the outside layer.","commit_id":"07426426f03098af736710db90e8c7326bdc6c0a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                  {\u0027vm_state\u0027: vm_state, \u0027task_state\u0027: task_state})"},{"line_number":148,"context_line":"    return status"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def task_and_vm_state_from_status(statuses):"},{"line_number":152,"context_line":"    \"\"\"Map the server\u0027s multiple status strings to list of vm states and"},{"line_number":153,"context_line":"    list of task states."}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_cccff67d","line":150,"updated":"2016-01-21 14:54:19.000000000","message":"I think we could add a get task_state here, that gets used here:\nhttps://github.com/openstack/nova/blob/d8ab04ccacd4b2c7ed4fe3d400d19b6252f34446/nova/api/openstack/compute/extended_status.py#L32\n\nand in the other place we have that code.","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a7d87849460e9e5d3541e9a0c268065af8a3424f","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                  {\u0027vm_state\u0027: vm_state, \u0027task_state\u0027: task_state})"},{"line_number":148,"context_line":"    return status"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def task_and_vm_state_from_status(statuses):"},{"line_number":152,"context_line":"    \"\"\"Map the server\u0027s multiple status strings to list of vm states and"},{"line_number":153,"context_line":"    list of task states."}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_08007aa9","line":150,"in_reply_to":"9a68dd71_cccff67d","updated":"2016-01-22 03:10:20.000000000","message":"Hm, it is better, my bad, I didn\u0027t understand the codes so deeply as you are. I will modify the code.","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"}],"nova/api/openstack/compute/extended_status.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a251c8a4f31fb28deaddb9529eee36a10312a6b3","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            key \u003d \"%s:%s\" % (\u0027OS-EXT-STS\u0027, state)"},{"line_number":37,"context_line":"            server[key] \u003d instance[state]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _extend_server_V220(self, server, instance):"},{"line_number":40,"context_line":"        # Note(Kevin_Zheng): The vm_state and task_sate added in"},{"line_number":41,"context_line":"        # microversion v2.20 should be hidden for API requests in"},{"line_number":42,"context_line":"        # older microversion."}],"source_content_type":"text/x-python","patch_set":91,"id":"7a5de9d1_b7b2abe3","line":39,"updated":"2016-01-30 14:40:17.000000000","message":"I think it would be better to just have a \"backport to v220\" method, rather than this cut an paste.","commit_id":"f1149feed291347a7d0d06db4f113261da6c798f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b0c49c829480a0495e8abac005ca8270e7e1cd27","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            key \u003d \"%s:%s\" % (\u0027OS-EXT-STS\u0027, state)"},{"line_number":37,"context_line":"            server[key] \u003d instance[state]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _extend_server_V220(self, server, instance):"},{"line_number":40,"context_line":"        # Note(Kevin_Zheng): The vm_state and task_sate added in"},{"line_number":41,"context_line":"        # microversion v2.20 should be hidden for API requests in"},{"line_number":42,"context_line":"        # older microversion."}],"source_content_type":"text/x-python","patch_set":91,"id":"7a5de9d1_c5c99f5a","line":39,"in_reply_to":"7a5de9d1_b7b2abe3","updated":"2016-02-01 01:12:35.000000000","message":"Sure, I was doing this to avoid pass new req to _extend_server, but if this doesn\u0027t look nice, I will update according to your suggestion","commit_id":"f1149feed291347a7d0d06db4f113261da6c798f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5797a190fc13701dbb61695ad738ab1a45a2d4fd","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        _V220_states \u003d ("},{"line_number":37,"context_line":"            task_states.UNQUIESCING,"},{"line_number":38,"context_line":"            task_states.QUIESCING,"},{"line_number":39,"context_line":"            vm_states.QUIESCED"},{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        # Note(Kevin_Zheng): The vm_state and task_sate added in"},{"line_number":42,"context_line":"        # microversion v2.20 should be hidden for API requests in"}],"source_content_type":"text/x-python","patch_set":93,"id":"5a5ae5dd_e8ce95b3","line":39,"updated":"2016-02-03 10:33:14.000000000","message":"Nit: I don\u0027t think you need this here, because its dealt with here:\nhttps://review.openstack.org/#/c/248989/93/nova/api/openstack/common.py","commit_id":"abce0009bd3e0fc671059e953122b1b9345ac9ae"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5797a190fc13701dbb61695ad738ab1a45a2d4fd","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            key \u003d \"%s:%s\" % (\u0027OS-EXT-STS\u0027, state)"},{"line_number":46,"context_line":"            if instance[state] in _V220_states and not \\"},{"line_number":47,"context_line":"                    api_version_request.is_supported(req, min_version\u003d\"2.20\"):"},{"line_number":48,"context_line":"                instance[state] \u003d \u0027unknown\u0027"},{"line_number":49,"context_line":"            server[key] \u003d instance[state]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @wsgi.extends"}],"source_content_type":"text/x-python","patch_set":93,"id":"5a5ae5dd_a893bda2","line":48,"updated":"2016-02-03 10:33:14.000000000","message":"Nit: this should really use the task_states.unknown constant, I think.","commit_id":"abce0009bd3e0fc671059e953122b1b9345ac9ae"}],"nova/api/openstack/compute/schemas/servers.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7d690ec61e7bb4ee8daa26996cbd7e3114390e2f","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    \u0027properties\u0027: {"},{"line_number":168,"context_line":"        \u0027quiesce\u0027: {"},{"line_number":169,"context_line":"            \u0027type\u0027: \u0027null\u0027,"},{"line_number":170,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":171,"context_line":"        },"},{"line_number":172,"context_line":"    },"},{"line_number":173,"context_line":"    \u0027required\u0027: [\u0027quiesce\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a710552_45cb0054","line":170,"updated":"2015-12-15 13:09:01.000000000","message":"this additionalProperties seems unnecessary because \u0027properties\u0027 doesn\u0027t exist and type is null.","commit_id":"53d5dcfd5983f5d09aeed46fbad145f75903dc18"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0aad86334042328209fcf15f02a78e1423cef59b","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    \u0027properties\u0027: {"},{"line_number":168,"context_line":"        \u0027quiesce\u0027: {"},{"line_number":169,"context_line":"            \u0027type\u0027: \u0027null\u0027,"},{"line_number":170,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":171,"context_line":"        },"},{"line_number":172,"context_line":"    },"},{"line_number":173,"context_line":"    \u0027required\u0027: [\u0027quiesce\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a710552_9f503060","line":170,"in_reply_to":"5a710552_45cb0054","updated":"2015-12-16 02:09:53.000000000","message":"Done","commit_id":"53d5dcfd5983f5d09aeed46fbad145f75903dc18"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7d690ec61e7bb4ee8daa26996cbd7e3114390e2f","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    \u0027properties\u0027: {"},{"line_number":180,"context_line":"        \u0027unquiesce\u0027: {"},{"line_number":181,"context_line":"            \u0027type\u0027: \u0027null\u0027,"},{"line_number":182,"context_line":"            \u0027additionalProperties\u0027: False,"},{"line_number":183,"context_line":"        },"},{"line_number":184,"context_line":"    },"},{"line_number":185,"context_line":"    \u0027required\u0027: [\u0027unquiesce\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a710552_c5ddb015","line":182,"updated":"2015-12-15 13:09:01.000000000","message":"ditto","commit_id":"53d5dcfd5983f5d09aeed46fbad145f75903dc18"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"111c31c325d49670fa035dd08f6241d210009b54","unresolved":false,"context_lines":[{"line_number":858,"context_line":"    @wsgi.response(202)"},{"line_number":859,"context_line":"    @extensions.expected_errors((404, 409))"},{"line_number":860,"context_line":"    @wsgi.action(\u0027quiesce\u0027)"},{"line_number":861,"context_line":"    def _action_quiesce_instance(self, req, id, body):"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":864,"context_line":"        authorize(context, action\u003d\u0027quiesce\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a8ffd7b_eed07f21","line":861,"updated":"2015-11-26 11:07:28.000000000","message":"I think you need api microversion and body schema validation. See https://github.com/openstack/nova/blob/master/doc/source/api_microversion_dev.rst","commit_id":"954f061a99ec0216bbdb59c330f3716af4ca417d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"c72fe9b5d0a4b177783800ac202ef95371b93b53","unresolved":false,"context_lines":[{"line_number":858,"context_line":"    @wsgi.response(202)"},{"line_number":859,"context_line":"    @extensions.expected_errors((404, 409))"},{"line_number":860,"context_line":"    @wsgi.action(\u0027quiesce\u0027)"},{"line_number":861,"context_line":"    def _action_quiesce_instance(self, req, id, body):"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":864,"context_line":"        authorize(context, action\u003d\u0027quiesce\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a8ffd7b_2d9c235c","line":861,"in_reply_to":"9a8ffd7b_eed07f21","updated":"2015-11-27 09:40:29.000000000","message":"Done","commit_id":"954f061a99ec0216bbdb59c330f3716af4ca417d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"111c31c325d49670fa035dd08f6241d210009b54","unresolved":false,"context_lines":[{"line_number":875,"context_line":"    @wsgi.response(202)"},{"line_number":876,"context_line":"    @extensions.expected_errors((404, 409))"},{"line_number":877,"context_line":"    @wsgi.action(\u0027unquiesce\u0027)"},{"line_number":878,"context_line":"    def _action_unquiesce_instance(self, req, id, body):"},{"line_number":879,"context_line":""},{"line_number":880,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":881,"context_line":"        authorize(context, action\u003d\u0027unquiesce\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a8ffd7b_cec33b56","line":878,"updated":"2015-11-26 11:07:28.000000000","message":"Same as above","commit_id":"954f061a99ec0216bbdb59c330f3716af4ca417d"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7d690ec61e7bb4ee8daa26996cbd7e3114390e2f","unresolved":false,"context_lines":[{"line_number":865,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":866,"context_line":"        authorize(context, action\u003d\u0027quiesce\u0027)"},{"line_number":867,"context_line":"        instance \u003d self._get_server(context, req, id)"},{"line_number":868,"context_line":"        LOG.debug(\u0027quiesce instance\u0027, instance\u003dinstance)"},{"line_number":869,"context_line":"        try:"},{"line_number":870,"context_line":"            self.compute_api.quiesce(context, instance)"},{"line_number":871,"context_line":"        except exception.InstanceIsLocked as e:"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a710552_859fa802","line":868,"updated":"2015-12-15 13:09:01.000000000","message":"LOG.debug is not necessary for normal operation on action APIs.","commit_id":"53d5dcfd5983f5d09aeed46fbad145f75903dc18"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0aad86334042328209fcf15f02a78e1423cef59b","unresolved":false,"context_lines":[{"line_number":865,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":866,"context_line":"        authorize(context, action\u003d\u0027quiesce\u0027)"},{"line_number":867,"context_line":"        instance \u003d self._get_server(context, req, id)"},{"line_number":868,"context_line":"        LOG.debug(\u0027quiesce instance\u0027, instance\u003dinstance)"},{"line_number":869,"context_line":"        try:"},{"line_number":870,"context_line":"            self.compute_api.quiesce(context, instance)"},{"line_number":871,"context_line":"        except exception.InstanceIsLocked as e:"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a710552_7fdc64e4","line":868,"in_reply_to":"5a710552_859fa802","updated":"2015-12-16 02:09:53.000000000","message":"Done","commit_id":"53d5dcfd5983f5d09aeed46fbad145f75903dc18"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7d690ec61e7bb4ee8daa26996cbd7e3114390e2f","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":885,"context_line":"        authorize(context, action\u003d\u0027unquiesce\u0027)"},{"line_number":886,"context_line":"        instance \u003d self._get_server(context, req, id)"},{"line_number":887,"context_line":"        LOG.debug(\u0027unquiesce instance\u0027, instance\u003dinstance)"},{"line_number":888,"context_line":"        try:"},{"line_number":889,"context_line":"            self.compute_api.unquiesce(context, instance)"},{"line_number":890,"context_line":"        except exception.InstanceIsLocked as e:"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a710552_059418e0","line":887,"updated":"2015-12-15 13:09:01.000000000","message":"ditto","commit_id":"53d5dcfd5983f5d09aeed46fbad145f75903dc18"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5797a190fc13701dbb61695ad738ab1a45a2d4fd","unresolved":false,"context_lines":[{"line_number":895,"context_line":"    @extensions.expected_errors((404, 409))"},{"line_number":896,"context_line":"    @wsgi.action(\u0027quiesce\u0027)"},{"line_number":897,"context_line":"    @validation.schema(schema_servers.quiesce)"},{"line_number":898,"context_line":"    def _action_quiesce_instance(self, req, id, body):"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":901,"context_line":"        authorize(context, action\u003d\u0027quiesce\u0027)"}],"source_content_type":"text/x-python","patch_set":93,"id":"5a5ae5dd_68ef05b1","line":898,"updated":"2016-02-03 10:33:14.000000000","message":"So we are now allowing people to upgrade API nodes in a rolling way, so we probably want to actually restrict these API calls to only be allowed once the compute nodes reach the new minimum service version of 7.\n\nThis is very new, and something we are only just realising is needed.","commit_id":"abce0009bd3e0fc671059e953122b1b9345ac9ae"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0daf149303b55c09b355f246c6ebe8e67e25a608","unresolved":false,"context_lines":[{"line_number":895,"context_line":"    @extensions.expected_errors((404, 409))"},{"line_number":896,"context_line":"    @wsgi.action(\u0027quiesce\u0027)"},{"line_number":897,"context_line":"    @validation.schema(schema_servers.quiesce)"},{"line_number":898,"context_line":"    def _action_quiesce_instance(self, req, id, body):"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":901,"context_line":"        authorize(context, action\u003d\u0027quiesce\u0027)"}],"source_content_type":"text/x-python","patch_set":93,"id":"5a5ae5dd_93260ccd","line":898,"in_reply_to":"5a5ae5dd_68ef05b1","updated":"2016-02-04 01:48:53.000000000","message":"Hi, this is a very good point, but it seems not very hard to achieve, I will add checks in rpcapi to check whether we can send version 4.9 and related tests.","commit_id":"abce0009bd3e0fc671059e953122b1b9345ac9ae"}],"nova/api/openstack/compute/views/servers.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        if not api_version_request.is_supported(request, min_version\u003d\"2.17\"):"},{"line_number":147,"context_line":"            if server[\"server\"][\"status\"] in self._V217_statuses:"},{"line_number":148,"context_line":"                server[\"server\"][\"status\"] \u003d \u0027UNKNOWN\u0027"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        return server"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_e4821800","line":148,"updated":"2016-01-21 14:54:19.000000000","message":"hmm, I was expecting to see Active + Quecsing -\u003e Active + Unknown","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        # If the instance is deleted the vm and task states don\u0027t really matter"},{"line_number":195,"context_line":"        if instance.get(\"deleted\"):"},{"line_number":196,"context_line":"            return \"DELETED\""},{"line_number":197,"context_line":"        return common.status_from_state(instance.get(\"vm_state\"),"},{"line_number":198,"context_line":"                                        instance.get(\"task_state\"))"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_91b59732","line":197,"updated":"2016-01-21 14:54:19.000000000","message":"Why are the version details not dealt with in here, well, also why not in that common.status_from_state bit?","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a7d87849460e9e5d3541e9a0c268065af8a3424f","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        # If the instance is deleted the vm and task states don\u0027t really matter"},{"line_number":195,"context_line":"        if instance.get(\"deleted\"):"},{"line_number":196,"context_line":"            return \"DELETED\""},{"line_number":197,"context_line":"        return common.status_from_state(instance.get(\"vm_state\"),"},{"line_number":198,"context_line":"                                        instance.get(\"task_state\"))"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_68a01644","line":197,"in_reply_to":"9a68dd71_91b59732","updated":"2016-01-22 03:10:20.000000000","message":"Done","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            server[\"server\"][\"locked\"] \u003d (True if instance[\"locked_by\"]"},{"line_number":320,"context_line":"                                          else False)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if not api_version_request.is_supported(request, min_version\u003d\"2.17\"):"},{"line_number":323,"context_line":"            if server[\"server\"][\"status\"] in self._V217_statuses:"},{"line_number":324,"context_line":"                server[\"server\"][\"status\"] \u003d \u0027UNKNOWN\u0027"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_64ae2887","line":322,"updated":"2016-01-21 14:54:19.000000000","message":"We can\u0027t cut and paste like this, can we add a private method that we share for this logic?","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"92fab59dc4ad20f5b76e6b5fd7c1928258a9e935","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            server[\"server\"][\"locked\"] \u003d (True if instance[\"locked_by\"]"},{"line_number":320,"context_line":"                                          else False)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if not api_version_request.is_supported(request, min_version\u003d\"2.17\"):"},{"line_number":323,"context_line":"            if server[\"server\"][\"status\"] in self._V217_statuses:"},{"line_number":324,"context_line":"                server[\"server\"][\"status\"] \u003d \u0027UNKNOWN\u0027"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_4d276464","line":322,"in_reply_to":"9a68dd71_64ae2887","updated":"2016-01-22 01:52:02.000000000","message":"Done","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5797a190fc13701dbb61695ad738ab1a45a2d4fd","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \"REBUILD\","},{"line_number":43,"context_line":"        \"RESIZE\","},{"line_number":44,"context_line":"        \"VERIFY_RESIZE\","},{"line_number":45,"context_line":"        \"MIGRATING\","},{"line_number":46,"context_line":"    )"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    _fault_statuses \u003d ("}],"source_content_type":"text/x-python","patch_set":93,"id":"5a5ae5dd_e8453517","side":"PARENT","line":45,"updated":"2016-02-03 10:33:14.000000000","message":"we should remove this unrelated change.","commit_id":"5e52d3bec0956a205b222ee86c54d82403c54b42"}],"nova/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"17b18d4bbac99b40cc1e41c2323acf2d12b7ad24","unresolved":false,"context_lines":[{"line_number":162,"context_line":"----"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"  Exposes ``quiesce`` and ``unquiesce`` API."},{"line_number":165,"context_line":"  User will be able to quiesce/unquiesce instances through API."}],"source_content_type":"text/x-rst","patch_set":73,"id":"ba63e191_02037710","line":165,"updated":"2016-01-20 10:42:26.000000000","message":"Maybe worth mentioning the new vm and task states, and how they are not exposed to older versions (well exposed as UNKNOWN).","commit_id":"07426426f03098af736710db90e8c7326bdc6c0a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5797a190fc13701dbb61695ad738ab1a45a2d4fd","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"2.18"},{"line_number":168,"context_line":"----"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"  Establishes a set of routes that makes project_id an optional construct in v2.1."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"2.19"}],"source_content_type":"text/x-rst","patch_set":93,"id":"5a5ae5dd_c85719c9","line":169,"updated":"2016-02-03 10:33:14.000000000","message":"we should remove this unrelated changes.","commit_id":"abce0009bd3e0fc671059e953122b1b9345ac9ae"}],"nova/api/openstack/wsgi.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                                               item_key\u003d\u0027id\u0027):"},{"line_number":149,"context_line":"        \"\"\"This method is added to handle states thta has been"},{"line_number":150,"context_line":"        added in API microversion v2.17, those states are"},{"line_number":151,"context_line":"        hidden for API request with older microversion."},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        db_items \u003d self._extension_data[\u0027db_items\u0027].setdefault(key, {})"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_786d6897","line":151,"updated":"2016-01-21 14:54:19.000000000","message":"You can\u0027t have a single request support two versions.\n\nWhy does that happen here?","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a7d87849460e9e5d3541e9a0c268065af8a3424f","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                                               item_key\u003d\u0027id\u0027):"},{"line_number":149,"context_line":"        \"\"\"This method is added to handle states thta has been"},{"line_number":150,"context_line":"        added in API microversion v2.17, those states are"},{"line_number":151,"context_line":"        hidden for API request with older microversion."},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        db_items \u003d self._extension_data[\u0027db_items\u0027].setdefault(key, {})"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_e8c96679","line":151,"in_reply_to":"9a68dd71_2d79d02f","updated":"2016-01-22 03:10:20.000000000","message":"I think it can remove these and find a way to handling in extended_status.py","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"92fab59dc4ad20f5b76e6b5fd7c1928258a9e935","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                                               item_key\u003d\u0027id\u0027):"},{"line_number":149,"context_line":"        \"\"\"This method is added to handle states thta has been"},{"line_number":150,"context_line":"        added in API microversion v2.17, those states are"},{"line_number":151,"context_line":"        hidden for API request with older microversion."},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        db_items \u003d self._extension_data[\u0027db_items\u0027].setdefault(key, {})"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_2d79d02f","line":151,"in_reply_to":"9a68dd71_786d6897","updated":"2016-01-22 01:52:02.000000000","message":"Sorry, I didn\u0027t get your point here, this method only handles versions older than 2.17 this is called only when 2.17 is not supported.","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"}],"nova/compute/api.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"111c31c325d49670fa035dd08f6241d210009b54","unresolved":false,"context_lines":[{"line_number":2229,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":2230,"context_line":"                exception.QemuGuestAgentNotEnabled,"},{"line_number":2231,"context_line":"                exception.NovaException, NotImplementedError) as err:"},{"line_number":2232,"context_line":"            raise err"},{"line_number":2233,"context_line":""},{"line_number":2234,"context_line":"    @wrap_check_policy"},{"line_number":2235,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.QUIESCED])"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a8ffd7b_ae8ef776","line":2232,"updated":"2015-11-26 11:07:28.000000000","message":"You are setting the instance.task_state above but you are not resetting it in case of an error.","commit_id":"954f061a99ec0216bbdb59c330f3716af4ca417d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"c72fe9b5d0a4b177783800ac202ef95371b93b53","unresolved":false,"context_lines":[{"line_number":2229,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":2230,"context_line":"                exception.QemuGuestAgentNotEnabled,"},{"line_number":2231,"context_line":"                exception.NovaException, NotImplementedError) as err:"},{"line_number":2232,"context_line":"            raise err"},{"line_number":2233,"context_line":""},{"line_number":2234,"context_line":"    @wrap_check_policy"},{"line_number":2235,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.QUIESCED])"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a8ffd7b_4d916746","line":2232,"in_reply_to":"9a8ffd7b_ae8ef776","updated":"2015-11-27 09:40:29.000000000","message":"Done","commit_id":"954f061a99ec0216bbdb59c330f3716af4ca417d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"111c31c325d49670fa035dd08f6241d210009b54","unresolved":false,"context_lines":[{"line_number":2250,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":2251,"context_line":"                exception.QemuGuestAgentNotEnabled,"},{"line_number":2252,"context_line":"                exception.NovaException, NotImplementedError) as err:"},{"line_number":2253,"context_line":"            raise err"},{"line_number":2254,"context_line":""},{"line_number":2255,"context_line":"    # NOTE(melwitt): We don\u0027t check instance lock for snapshot because lock is"},{"line_number":2256,"context_line":"    #                intended to prevent accidental change/delete of instances"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a8ffd7b_6eeb2f14","line":2253,"updated":"2015-11-26 11:07:28.000000000","message":"Same as above","commit_id":"954f061a99ec0216bbdb59c330f3716af4ca417d"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a940dd490a21db5171100078d16db4d935fe5646","unresolved":false,"context_lines":[{"line_number":2243,"context_line":"    @wrap_check_policy"},{"line_number":2244,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.QUIESCED])"},{"line_number":2245,"context_line":"    def unquiesce(self, context, instance):"},{"line_number":2246,"context_line":"        \"\"\"quiesce the given instance."},{"line_number":2247,"context_line":""},{"line_number":2248,"context_line":"        :param instance: nova.objects.instance.Instance object"},{"line_number":2249,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":52,"id":"fa69d971_8e29ad39","line":2246,"range":{"start_line":2246,"start_character":11,"end_line":2246,"end_character":18},"updated":"2016-01-05 08:52:05.000000000","message":"nit: s/quiesce/unquiesce/","commit_id":"ba1d4c917609676f99d6d3cfc4fca923cd8fe688"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"349c32e22cdd95010f06561fc7a836916a96f70f","unresolved":false,"context_lines":[{"line_number":2235,"context_line":"                                                 exposed_call\u003dTrue)"},{"line_number":2236,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":2237,"context_line":"                exception.QemuGuestAgentNotEnabled,"},{"line_number":2238,"context_line":"                exception.NovaException, NotImplementedError) as err:"},{"line_number":2239,"context_line":"            instance.task_state \u003d None"},{"line_number":2240,"context_line":"            instance.save()"},{"line_number":2241,"context_line":"            raise err"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_045580f8","line":2238,"range":{"start_line":2238,"start_character":16,"end_line":2238,"end_character":25},"updated":"2016-01-05 19:32:59.000000000","message":"NovaException is the base class of all nova exceptions \nonly need to catch it if we know all exceptions can occur?","commit_id":"de3f4d24e2c08a13b9978908b407fb433534bb7b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9149e2368daa98b22399f027c99a16a9bbc0cfc5","unresolved":false,"context_lines":[{"line_number":2235,"context_line":"                                                 exposed_call\u003dTrue)"},{"line_number":2236,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":2237,"context_line":"                exception.QemuGuestAgentNotEnabled,"},{"line_number":2238,"context_line":"                exception.NovaException, NotImplementedError) as err:"},{"line_number":2239,"context_line":"            instance.task_state \u003d None"},{"line_number":2240,"context_line":"            instance.save()"},{"line_number":2241,"context_line":"            raise err"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_50e327a4","line":2238,"range":{"start_line":2238,"start_character":16,"end_line":2238,"end_character":25},"in_reply_to":"fa69d971_045580f8","updated":"2016-01-06 03:51:51.000000000","message":"hm, your are right, but I\u0027m not very sure what kind of exception will occor, and I\u0027m adding this because in snapshot_volume_backed(), it calls quiesce and this exception is expected, maybe it will be better to keep this for safety.","commit_id":"de3f4d24e2c08a13b9978908b407fb433534bb7b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"538ddc5890e4f1a5f6f00814cad520bf33d416b8","unresolved":false,"context_lines":[{"line_number":2168,"context_line":"            self.compute_rpcapi.quiesce_instance(context, instance,"},{"line_number":2169,"context_line":"                                                 do_cast\u003dTrue,"},{"line_number":2170,"context_line":"                                                 exposed_call\u003dTrue)"},{"line_number":2171,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":2172,"context_line":"                exception.QemuGuestAgentNotEnabled,"},{"line_number":2173,"context_line":"                exception.NovaException, NotImplementedError) as err:"},{"line_number":2174,"context_line":"            instance.task_state \u003d None"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_b493445a","line":2171,"updated":"2016-01-15 16:03:33.000000000","message":"Because the above is a cast, it will never actually return any of these errors.\n\nI don\u0027t think you need to have any handling of errors here, see what backup_instance does above, for example.","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3d22d4940a4da1854e0fae7b4c0f233b2c68088b","unresolved":false,"context_lines":[{"line_number":2168,"context_line":"            self.compute_rpcapi.quiesce_instance(context, instance,"},{"line_number":2169,"context_line":"                                                 do_cast\u003dTrue,"},{"line_number":2170,"context_line":"                                                 exposed_call\u003dTrue)"},{"line_number":2171,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":2172,"context_line":"                exception.QemuGuestAgentNotEnabled,"},{"line_number":2173,"context_line":"                exception.NovaException, NotImplementedError) as err:"},{"line_number":2174,"context_line":"            instance.task_state \u003d None"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_1648d85a","line":2171,"in_reply_to":"da6ed579_b493445a","updated":"2016-01-18 06:32:30.000000000","message":"Hm, you are right.","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"538ddc5890e4f1a5f6f00814cad520bf33d416b8","unresolved":false,"context_lines":[{"line_number":2173,"context_line":"                exception.NovaException, NotImplementedError) as err:"},{"line_number":2174,"context_line":"            instance.task_state \u003d None"},{"line_number":2175,"context_line":"            instance.save()"},{"line_number":2176,"context_line":"            raise err"},{"line_number":2177,"context_line":""},{"line_number":2178,"context_line":"    @wrap_check_policy"},{"line_number":2179,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.QUIESCED])"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_711abec7","line":2176,"updated":"2016-01-15 16:03:33.000000000","message":"FYI, if we were to kept this, it should be \"raise\" not \"raise errr\" so we preserve the traceback.","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"538ddc5890e4f1a5f6f00814cad520bf33d416b8","unresolved":false,"context_lines":[{"line_number":2196,"context_line":"                exception.NovaException, NotImplementedError) as err:"},{"line_number":2197,"context_line":"            instance.task_state \u003d None"},{"line_number":2198,"context_line":"            instance.save()"},{"line_number":2199,"context_line":"            raise err"},{"line_number":2200,"context_line":""},{"line_number":2201,"context_line":"    # NOTE(melwitt): We don\u0027t check instance lock for snapshot because lock is"},{"line_number":2202,"context_line":"    #                intended to prevent accidental change/delete of instances"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_117ca2ea","line":2199,"updated":"2016-01-15 16:03:33.000000000","message":"as above, we can remove the try/except","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"}],"nova/compute/instance_actions.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"349c32e22cdd95010f06561fc7a836916a96f70f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"LIVE_MIGRATION \u003d \u0027live-migration\u0027"},{"line_number":52,"context_line":"TRIGGER_CRASH_DUMP \u003d \u0027trigger_crash_dump\u0027"},{"line_number":53,"context_line":"QUIESCE \u003d \u0027quiesce\u0027"},{"line_number":54,"context_line":"UNQUIESCE \u003d \u0027unquiece\u0027"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_c4152840","line":54,"range":{"start_line":54,"start_character":13,"end_line":54,"end_character":21},"updated":"2016-01-05 19:32:59.000000000","message":"typo: unquiesce","commit_id":"de3f4d24e2c08a13b9978908b407fb433534bb7b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9149e2368daa98b22399f027c99a16a9bbc0cfc5","unresolved":false,"context_lines":[{"line_number":51,"context_line":"LIVE_MIGRATION \u003d \u0027live-migration\u0027"},{"line_number":52,"context_line":"TRIGGER_CRASH_DUMP \u003d \u0027trigger_crash_dump\u0027"},{"line_number":53,"context_line":"QUIESCE \u003d \u0027quiesce\u0027"},{"line_number":54,"context_line":"UNQUIESCE \u003d \u0027unquiece\u0027"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_d032b75d","line":54,"range":{"start_line":54,"start_character":13,"end_line":54,"end_character":21},"in_reply_to":"fa69d971_c4152840","updated":"2016-01-06 03:51:51.000000000","message":"Done","commit_id":"de3f4d24e2c08a13b9978908b407fb433534bb7b"}],"nova/compute/manager.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"4e01294c48bd2701c2fe28352319bededaa57530","unresolved":false,"context_lines":[{"line_number":6396,"context_line":"                                  task_state\u003dNone)"},{"line_number":6397,"context_line":"            raise error.inner_exception"},{"line_number":6398,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":6399,"context_line":"                exception.QemuGuestAgentNotEnabled) as error:"},{"line_number":6400,"context_line":"            LOG.info(_LI(\"Setting instance back to ACTIVE after: %s\"),"},{"line_number":6401,"context_line":"                     error, instance_uuid\u003dinstance_uuid)"},{"line_number":6402,"context_line":"            self._instance_update(context, instance,"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a710552_28ab2976","line":6399,"updated":"2015-12-15 13:14:52.000000000","message":"we shouldn\u0027t be leaking something like QemuGuestAgentNotEnabled out of the virt layer. That should be translated lower down to InstanceQuiesceNotSupported","commit_id":"53d5dcfd5983f5d09aeed46fbad145f75903dc18"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0aad86334042328209fcf15f02a78e1423cef59b","unresolved":false,"context_lines":[{"line_number":6396,"context_line":"                                  task_state\u003dNone)"},{"line_number":6397,"context_line":"            raise error.inner_exception"},{"line_number":6398,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":6399,"context_line":"                exception.QemuGuestAgentNotEnabled) as error:"},{"line_number":6400,"context_line":"            LOG.info(_LI(\"Setting instance back to ACTIVE after: %s\"),"},{"line_number":6401,"context_line":"                     error, instance_uuid\u003dinstance_uuid)"},{"line_number":6402,"context_line":"            self._instance_update(context, instance,"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a710552_b209a32e","line":6399,"in_reply_to":"5a710552_28ab2976","updated":"2015-12-16 02:09:53.000000000","message":"Done","commit_id":"53d5dcfd5983f5d09aeed46fbad145f75903dc18"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"349c32e22cdd95010f06561fc7a836916a96f70f","unresolved":false,"context_lines":[{"line_number":6418,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":6419,"context_line":"                exception.QemuGuestAgentNotEnabled) as error:"},{"line_number":6420,"context_line":"            if error \u003d\u003d exception.QemuGuestAgentNotEnabled:"},{"line_number":6421,"context_line":"                error \u003d exception.InstanceQuiesceNotSupported"},{"line_number":6422,"context_line":"            LOG.info(_LI(\"Setting instance back to ACTIVE after: %s\"),"},{"line_number":6423,"context_line":"                     error, instance_uuid\u003dinstance_uuid)"},{"line_number":6424,"context_line":"            self._instance_update(context, instance,"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_422a8b91","line":6421,"range":{"start_line":6421,"start_character":34,"end_line":6421,"end_character":61},"updated":"2016-01-05 19:32:59.000000000","message":"should we use isinstance instead of \u003d\u003d here?\n\nand according to logic, the error will always be \nexception.InstanceQuiesceNotSupported?","commit_id":"de3f4d24e2c08a13b9978908b407fb433534bb7b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9149e2368daa98b22399f027c99a16a9bbc0cfc5","unresolved":false,"context_lines":[{"line_number":6418,"context_line":"        except (exception.InstanceQuiesceNotSupported,"},{"line_number":6419,"context_line":"                exception.QemuGuestAgentNotEnabled) as error:"},{"line_number":6420,"context_line":"            if error \u003d\u003d exception.QemuGuestAgentNotEnabled:"},{"line_number":6421,"context_line":"                error \u003d exception.InstanceQuiesceNotSupported"},{"line_number":6422,"context_line":"            LOG.info(_LI(\"Setting instance back to ACTIVE after: %s\"),"},{"line_number":6423,"context_line":"                     error, instance_uuid\u003dinstance_uuid)"},{"line_number":6424,"context_line":"            self._instance_update(context, instance,"}],"source_content_type":"text/x-python","patch_set":53,"id":"fa69d971_b0f7038a","line":6421,"range":{"start_line":6421,"start_character":34,"end_line":6421,"end_character":61},"in_reply_to":"fa69d971_422a8b91","updated":"2016-01-06 03:51:51.000000000","message":"Hi, I will look into the first comment, and for the second one, as suggested by Sean in patch set 36, we should not leak errors like QemuGuestAgentNotEnabled out, so it is better we transform it to InstanceQuiesceNotSupported.","commit_id":"de3f4d24e2c08a13b9978908b407fb433534bb7b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"538ddc5890e4f1a5f6f00814cad520bf33d416b8","unresolved":false,"context_lines":[{"line_number":674,"context_line":"class ComputeManager(manager.Manager):"},{"line_number":675,"context_line":"    \"\"\"Manages the running instances from creation to destruction.\"\"\""},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    target \u003d messaging.Target(version\u003d\u00274.8\u0027)"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"    # How long to wait in seconds before re-issuing a shutdown"},{"line_number":680,"context_line":"    # signal to an instance during power off.  The overall"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_d47a7876","line":677,"updated":"2016-01-15 16:03:33.000000000","message":"Why did you skip 4.7?","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3d22d4940a4da1854e0fae7b4c0f233b2c68088b","unresolved":false,"context_lines":[{"line_number":674,"context_line":"class ComputeManager(manager.Manager):"},{"line_number":675,"context_line":"    \"\"\"Manages the running instances from creation to destruction.\"\"\""},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    target \u003d messaging.Target(version\u003d\u00274.8\u0027)"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"    # How long to wait in seconds before re-issuing a shutdown"},{"line_number":680,"context_line":"    # signal to an instance during power off.  The overall"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_186d68cc","line":677,"in_reply_to":"da6ed579_d47a7876","updated":"2016-01-18 06:32:30.000000000","message":"Hmm, After I rebase last time, the version have changed very strange, see nova/objects/service.py line 62. I thought it will be 4.7 for that change, but seems it is not correct, I will try to fix this.","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"baac2883b5d565512fdcd61aed801faba6883808","unresolved":false,"context_lines":[{"line_number":6662,"context_line":"        image_meta \u003d utils.get_image_from_system_metadata("},{"line_number":6663,"context_line":"            instance.system_metadata)"},{"line_number":6664,"context_line":""},{"line_number":6665,"context_line":"        if not exposed_call:"},{"line_number":6666,"context_line":"            self.driver.quiesce(context, instance, image_meta)"},{"line_number":6667,"context_line":"        else:"},{"line_number":6668,"context_line":"            self._notify_about_instance_usage(context, instance,"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_9f5c194c","line":6665,"updated":"2016-01-15 16:06:12.000000000","message":"This feels very messy, but I can\u0027t think of a better idea.","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"538ddc5890e4f1a5f6f00814cad520bf33d416b8","unresolved":false,"context_lines":[{"line_number":6668,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":6669,"context_line":"                                              \u0027quiesce.start\u0027)"},{"line_number":6670,"context_line":"            with self._error_out_instance_on_exception(context, instance,"},{"line_number":6671,"context_line":"             instance_state\u003dinstance.vm_state):"},{"line_number":6672,"context_line":"                self.driver.quiesce(context, instance, image_meta)"},{"line_number":6673,"context_line":"                instance.vm_state \u003d vm_states.QUIESCED"},{"line_number":6674,"context_line":"                instance.task_state \u003d None"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_9fdbb97b","line":6671,"updated":"2016-01-15 16:03:33.000000000","message":"Nit: normally we indent 8 spaces for this kind of thing, but it seems pep8 is OK with this.","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3d22d4940a4da1854e0fae7b4c0f233b2c68088b","unresolved":false,"context_lines":[{"line_number":6668,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":6669,"context_line":"                                              \u0027quiesce.start\u0027)"},{"line_number":6670,"context_line":"            with self._error_out_instance_on_exception(context, instance,"},{"line_number":6671,"context_line":"             instance_state\u003dinstance.vm_state):"},{"line_number":6672,"context_line":"                self.driver.quiesce(context, instance, image_meta)"},{"line_number":6673,"context_line":"                instance.vm_state \u003d vm_states.QUIESCED"},{"line_number":6674,"context_line":"                instance.task_state \u003d None"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_f86414e6","line":6671,"in_reply_to":"da6ed579_9fdbb97b","updated":"2016-01-18 06:32:30.000000000","message":"Done","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"17b18d4bbac99b40cc1e41c2323acf2d12b7ad24","unresolved":false,"context_lines":[{"line_number":6665,"context_line":"    @reverts_task_state"},{"line_number":6666,"context_line":"    @wrap_instance_event"},{"line_number":6667,"context_line":"    @wrap_instance_fault"},{"line_number":6668,"context_line":"    def quiesce_instance(self, context, instance, exposed_call\u003dFalse):"},{"line_number":6669,"context_line":"        \"\"\"Quiesce an instance on this host.\"\"\""},{"line_number":6670,"context_line":"        context \u003d context.elevated()"},{"line_number":6671,"context_line":"        image_meta \u003d objects.ImageMeta.from_instance(instance)"}],"source_content_type":"text/x-python","patch_set":73,"id":"ba63e191_1db2f894","line":6668,"updated":"2016-01-20 10:42:26.000000000","message":"I think we would be better having a new method for these, maybe call it quiesce_external, or something like that?\n\nIt just seems way too messy with the call vs cast switch, etc.","commit_id":"07426426f03098af736710db90e8c7326bdc6c0a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"17b18d4bbac99b40cc1e41c2323acf2d12b7ad24","unresolved":false,"context_lines":[{"line_number":6673,"context_line":"        if not exposed_call:"},{"line_number":6674,"context_line":"            self.driver.quiesce(context, instance, image_meta)"},{"line_number":6675,"context_line":"        else:"},{"line_number":6676,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":6677,"context_line":"                                              \u0027quiesce.start\u0027)"},{"line_number":6678,"context_line":"            with self._error_out_instance_on_exception(context, instance,"},{"line_number":6679,"context_line":"             instance_state\u003dinstance.vm_state):"}],"source_content_type":"text/x-python","patch_set":73,"id":"ba63e191_5d139066","line":6676,"updated":"2016-01-20 10:42:26.000000000","message":"It does feel like this should really include the above objects call.","commit_id":"07426426f03098af736710db90e8c7326bdc6c0a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":6454,"context_line":"                     error, instance_uuid\u003dinstance_uuid)"},{"line_number":6455,"context_line":"            self._instance_update(context, instance,"},{"line_number":6456,"context_line":"                                  vm_state\u003dvm_states.ACTIVE,"},{"line_number":6457,"context_line":"                                  task_state\u003dNone)"},{"line_number":6458,"context_line":"        except Exception:"},{"line_number":6459,"context_line":"            LOG.exception(_LE(\u0027Setting instance vm_state to ERROR\u0027),"},{"line_number":6460,"context_line":"                          instance_uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_784a48c7","line":6457,"updated":"2016-01-21 14:54:19.000000000","message":"This block must re-raise the exception.\n\nI think what you want here, is the line \"with excutils.save_and_reraise_exception():\" before the LOG.info","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"92fab59dc4ad20f5b76e6b5fd7c1928258a9e935","unresolved":false,"context_lines":[{"line_number":6454,"context_line":"                     error, instance_uuid\u003dinstance_uuid)"},{"line_number":6455,"context_line":"            self._instance_update(context, instance,"},{"line_number":6456,"context_line":"                                  vm_state\u003dvm_states.ACTIVE,"},{"line_number":6457,"context_line":"                                  task_state\u003dNone)"},{"line_number":6458,"context_line":"        except Exception:"},{"line_number":6459,"context_line":"            LOG.exception(_LE(\u0027Setting instance vm_state to ERROR\u0027),"},{"line_number":6460,"context_line":"                          instance_uuid\u003dinstance_uuid)"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_0dcc0c69","line":6457,"in_reply_to":"9a68dd71_784a48c7","updated":"2016-01-22 01:52:02.000000000","message":"Done","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":6681,"context_line":"                                          \u0027quiesce.start\u0027)"},{"line_number":6682,"context_line":"        with self._error_out_instance_on_exception("},{"line_number":6683,"context_line":"                context, instance, instance_state\u003dinstance.vm_state):"},{"line_number":6684,"context_line":"            self.driver.quiesce(context, instance, image_meta)"},{"line_number":6685,"context_line":"            instance.vm_state \u003d vm_states.QUIESCED"},{"line_number":6686,"context_line":"            instance.task_state \u003d None"},{"line_number":6687,"context_line":"            instance.save(expected_task_state\u003dtask_states.QUIESCING)"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_f89f1801","line":6684,"updated":"2016-01-21 14:54:19.000000000","message":"This is a bad cut and paste.\n\nWe should really share lines 6677,6678 and 6684, with quiesce_instance, probably by just calling a _quiesce_instance method from here and line 6667","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":6712,"context_line":"        If snapshots\u0027 image mapping is provided, it waits until snapshots are"},{"line_number":6713,"context_line":"        completed before unqueiscing."},{"line_number":6714,"context_line":"        \"\"\""},{"line_number":6715,"context_line":"        context \u003d context.elevated()"},{"line_number":6716,"context_line":"        if mapping:"},{"line_number":6717,"context_line":"            try:"},{"line_number":6718,"context_line":"                self._wait_for_snapshots_completion(context, mapping)"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_f812b861","line":6715,"updated":"2016-01-21 14:54:19.000000000","message":"As an aside, we really don\u0027t need to do the elevated() any more, AFAIK.","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"92fab59dc4ad20f5b76e6b5fd7c1928258a9e935","unresolved":false,"context_lines":[{"line_number":6712,"context_line":"        If snapshots\u0027 image mapping is provided, it waits until snapshots are"},{"line_number":6713,"context_line":"        completed before unqueiscing."},{"line_number":6714,"context_line":"        \"\"\""},{"line_number":6715,"context_line":"        context \u003d context.elevated()"},{"line_number":6716,"context_line":"        if mapping:"},{"line_number":6717,"context_line":"            try:"},{"line_number":6718,"context_line":"                self._wait_for_snapshots_completion(context, mapping)"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_8d2c7c03","line":6715,"in_reply_to":"9a68dd71_f812b861","updated":"2016-01-22 01:52:02.000000000","message":"OK, I will removew this, but I hope we don\u0027t get people saying this is an unrelated change.","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":6740,"context_line":"                                          \u0027unquiesce.start\u0027)"},{"line_number":6741,"context_line":"        with self._error_out_instance_on_exception("},{"line_number":6742,"context_line":"                context, instance, instance_state\u003dinstance.vm_state):"},{"line_number":6743,"context_line":"            self.driver.unquiesce(context, instance, image_meta)"},{"line_number":6744,"context_line":"            instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":6745,"context_line":"            instance.task_state \u003d None"},{"line_number":6746,"context_line":"            instance.save(expected_task_state\u003dtask_states.UNQUIESCING)"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_d88574ad","line":6743,"updated":"2016-01-21 14:54:19.000000000","message":"As above, we should share code here with line 6723 and 6724, etc.","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"92fab59dc4ad20f5b76e6b5fd7c1928258a9e935","unresolved":false,"context_lines":[{"line_number":6740,"context_line":"                                          \u0027unquiesce.start\u0027)"},{"line_number":6741,"context_line":"        with self._error_out_instance_on_exception("},{"line_number":6742,"context_line":"                context, instance, instance_state\u003dinstance.vm_state):"},{"line_number":6743,"context_line":"            self.driver.unquiesce(context, instance, image_meta)"},{"line_number":6744,"context_line":"            instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":6745,"context_line":"            instance.task_state \u003d None"},{"line_number":6746,"context_line":"            instance.save(expected_task_state\u003dtask_states.UNQUIESCING)"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_4d368453","line":6743,"in_reply_to":"9a68dd71_d88574ad","updated":"2016-01-22 01:52:02.000000000","message":"Done","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5797a190fc13701dbb61695ad738ab1a45a2d4fd","unresolved":false,"context_lines":[{"line_number":6677,"context_line":"        \"\"\"Quiesce an instance on this host, used by external API call.\"\"\""},{"line_number":6678,"context_line":"        with self._error_out_instance_on_exception("},{"line_number":6679,"context_line":"                context, instance, instance_state\u003dinstance.vm_state):"},{"line_number":6680,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":6681,"context_line":"                                          \u0027quiesce.start\u0027)"},{"line_number":6682,"context_line":"            self._quiesce_instance(context, instance)"},{"line_number":6683,"context_line":"            instance.vm_state \u003d vm_states.QUIESCED"}],"source_content_type":"text/x-python","patch_set":93,"id":"5a5ae5dd_a892dd55","line":6680,"updated":"2016-02-03 10:33:14.000000000","message":"So we have just approved a policy of not adding these:\nhttp://docs.openstack.org/developer/nova/code-review.html#notifications\n\nBut you could argue these are old style notifications.","commit_id":"abce0009bd3e0fc671059e953122b1b9345ac9ae"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bf6a8f3c1c16c12a3e03ae7af4f525460d8f24b7","unresolved":false,"context_lines":[{"line_number":6677,"context_line":"        \"\"\"Quiesce an instance on this host, used by external API call.\"\"\""},{"line_number":6678,"context_line":"        with self._error_out_instance_on_exception("},{"line_number":6679,"context_line":"                context, instance, instance_state\u003dinstance.vm_state):"},{"line_number":6680,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":6681,"context_line":"                                          \u0027quiesce.start\u0027)"},{"line_number":6682,"context_line":"            self._quiesce_instance(context, instance)"},{"line_number":6683,"context_line":"            instance.vm_state \u003d vm_states.QUIESCED"}],"source_content_type":"text/x-python","patch_set":93,"id":"5a5ae5dd_f5fd0d6f","line":6680,"in_reply_to":"5a5ae5dd_a892dd55","updated":"2016-02-03 12:03:50.000000000","message":"In Newton we will try to transform this notification type as early as possible. If you want to help with that then you can join to the notification subteam https://wiki.openstack.org/wiki/Meetings/NovaNotification Also you can get technical information about the new framework from http://docs.openstack.org/developer/nova/notifications.html","commit_id":"abce0009bd3e0fc671059e953122b1b9345ac9ae"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0daf149303b55c09b355f246c6ebe8e67e25a608","unresolved":false,"context_lines":[{"line_number":6677,"context_line":"        \"\"\"Quiesce an instance on this host, used by external API call.\"\"\""},{"line_number":6678,"context_line":"        with self._error_out_instance_on_exception("},{"line_number":6679,"context_line":"                context, instance, instance_state\u003dinstance.vm_state):"},{"line_number":6680,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":6681,"context_line":"                                          \u0027quiesce.start\u0027)"},{"line_number":6682,"context_line":"            self._quiesce_instance(context, instance)"},{"line_number":6683,"context_line":"            instance.vm_state \u003d vm_states.QUIESCED"}],"source_content_type":"text/x-python","patch_set":93,"id":"5a5ae5dd_f323c0a5","line":6680,"in_reply_to":"5a5ae5dd_f5fd0d6f","updated":"2016-02-04 01:48:53.000000000","message":"Thanks, I will check that, and I\u0027m happy to help","commit_id":"abce0009bd3e0fc671059e953122b1b9345ac9ae"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5797a190fc13701dbb61695ad738ab1a45a2d4fd","unresolved":false,"context_lines":[{"line_number":6679,"context_line":"                context, instance, instance_state\u003dinstance.vm_state):"},{"line_number":6680,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":6681,"context_line":"                                          \u0027quiesce.start\u0027)"},{"line_number":6682,"context_line":"            self._quiesce_instance(context, instance)"},{"line_number":6683,"context_line":"            instance.vm_state \u003d vm_states.QUIESCED"},{"line_number":6684,"context_line":"            instance.task_state \u003d None"},{"line_number":6685,"context_line":"            instance.save(expected_task_state\u003dtask_states.QUIESCING)"}],"source_content_type":"text/x-python","patch_set":93,"id":"5a5ae5dd_8820414b","line":6682,"updated":"2016-02-03 10:33:14.000000000","message":"micro-nit: I would have a space either side of the call to _quiesce_instance.","commit_id":"abce0009bd3e0fc671059e953122b1b9345ac9ae"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4d7b8902d87b1fcc4ee80e75c69194a6b2aab446","unresolved":false,"context_lines":[{"line_number":6678,"context_line":"        with self._error_out_instance_on_exception("},{"line_number":6679,"context_line":"                context, instance, instance_state\u003dinstance.vm_state):"},{"line_number":6680,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":6681,"context_line":"                                              \u0027quiesce.start\u0027)"},{"line_number":6682,"context_line":""},{"line_number":6683,"context_line":"            self._quiesce_instance(context, instance)"},{"line_number":6684,"context_line":""}],"source_content_type":"text/x-python","patch_set":94,"id":"5a5ae5dd_b001a86c","line":6681,"updated":"2016-02-04 10:56:50.000000000","message":"This is still sending an old style notification, which is now not allowed:\nhttp://docs.openstack.org/developer/nova/code-review.html#notifications\n\nWe could let this in as one last one, but really need some other cores to take a look at this first.","commit_id":"8c769f0834dc81db2f0e5ad558f79b29de52a88c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ef6f72586339ed228f0ad42cd879b792888a29d0","unresolved":false,"context_lines":[{"line_number":6679,"context_line":"        with self._error_out_instance_on_exception("},{"line_number":6680,"context_line":"                context, instance, instance_state\u003dinstance.vm_state):"},{"line_number":6681,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":6682,"context_line":"                                              \u0027quiesce.start\u0027)"},{"line_number":6683,"context_line":""},{"line_number":6684,"context_line":"            self._quiesce_instance(context, instance)"},{"line_number":6685,"context_line":""}],"source_content_type":"text/x-python","patch_set":102,"id":"1a122d0e_2a48b55b","line":6682,"updated":"2016-05-05 08:37:19.000000000","message":"So we don\u0027t allow any new old style notifications any more:\nhttp://docs.openstack.org/developer/nova/code-review.html#notifications\n\nI would reach out to gibi on how to get that fixed.","commit_id":"abf63f822591e0b395dae48da5ac63f3a1ce1ee5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"51b8ab2943b8f0c22118e57b8982acba89879182","unresolved":false,"context_lines":[{"line_number":6679,"context_line":"        with self._error_out_instance_on_exception("},{"line_number":6680,"context_line":"                context, instance, instance_state\u003dinstance.vm_state):"},{"line_number":6681,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":6682,"context_line":"                                              \u0027quiesce.start\u0027)"},{"line_number":6683,"context_line":""},{"line_number":6684,"context_line":"            self._quiesce_instance(context, instance)"},{"line_number":6685,"context_line":""}],"source_content_type":"text/x-python","patch_set":102,"id":"1a122d0e_3ec2b653","line":6682,"in_reply_to":"1a122d0e_2a48b55b","updated":"2016-05-05 09:07:33.000000000","message":"We discussed on IRC http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2016-05-05.log.html#t2016-05-05T08:27:21\n\nLet\u0027s add the notification as a separate patch.\nThe instance.delete transformation will pave the way to add this easily.","commit_id":"abf63f822591e0b395dae48da5ac63f3a1ce1ee5"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a940dd490a21db5171100078d16db4d935fe5646","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        existing methods in 4.x after that point should be done so that they"},{"line_number":318,"context_line":"        can handle the version_cap being set to 4.5"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        * 4.7  - Add do_cast flag for quiesce identify whether it needs"},{"line_number":321,"context_line":"                 to be cast. Also add exposed_call flag for quiesce and"},{"line_number":322,"context_line":"                 unquiesce to identify whether it is a direct call form"},{"line_number":323,"context_line":"                 API."},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        * ...  - Remove refresh_security_group_members()"},{"line_number":326,"context_line":"        * ...  - Remove refresh_security_group_rules()"}],"source_content_type":"text/x-python","patch_set":52,"id":"fa69d971_ce8fa528","line":323,"range":{"start_line":320,"start_character":8,"end_line":323,"end_character":21},"updated":"2016-01-05 08:52:05.000000000","message":"This place is wrong, please rebase this patch after merging https://review.openstack.org/#/c/263296/ and put this lines after \n\n * 4.6  - Add trigger_crash_dump()","commit_id":"ba1d4c917609676f99d6d3cfc4fca923cd8fe688"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"551a8e5a910815539a16cef2d839890152c3546c","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        existing methods in 4.x after that point should be done so that they"},{"line_number":318,"context_line":"        can handle the version_cap being set to 4.5"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        * 4.7  - Add do_cast flag for quiesce identify whether it needs"},{"line_number":321,"context_line":"                 to be cast. Also add exposed_call flag for quiesce and"},{"line_number":322,"context_line":"                 unquiesce to identify whether it is a direct call form"},{"line_number":323,"context_line":"                 API."},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        * ...  - Remove refresh_security_group_members()"},{"line_number":326,"context_line":"        * ...  - Remove refresh_security_group_rules()"}],"source_content_type":"text/x-python","patch_set":54,"id":"fa69d971_b470290c","line":323,"range":{"start_line":320,"start_character":0,"end_line":323,"end_character":21},"updated":"2016-01-07 00:17:22.000000000","message":"https://review.openstack.org/#/c/263296/1/nova/compute/rpcapi.py has been merged already.\n\nSo please rebase this patch based on the latest master and put this lines(4.7) after 4.6.","commit_id":"d1e061a7d5ea60a75fa10d6b127c74a8985fcab5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"538ddc5890e4f1a5f6f00814cad520bf33d416b8","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        * ...  - Remove refresh_security_group_members()"},{"line_number":320,"context_line":"        * ...  - Remove refresh_security_group_rules()"},{"line_number":321,"context_line":"        * 4.6  - Add trigger_crash_dump()"},{"line_number":322,"context_line":"        * 4.8  - Add do_cast flag for quiesce identify whether it needs"},{"line_number":323,"context_line":"                 to be cast. Also add exposed_call flag for quiesce and"},{"line_number":324,"context_line":"                 unquiesce to identify whether it is a direct call form"},{"line_number":325,"context_line":"                 API."}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_14ec9028","line":322,"updated":"2016-01-15 16:03:33.000000000","message":"its odd we skip 4.7 here, any reason?","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"17b18d4bbac99b40cc1e41c2323acf2d12b7ad24","unresolved":false,"context_lines":[{"line_number":976,"context_line":"            version \u003d \u00274.0\u0027"},{"line_number":977,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":978,"context_line":"                                    version\u003dversion)"},{"line_number":979,"context_line":"        rpc_method \u003d cctxt.cast if do_cast else cctxt.call"},{"line_number":980,"context_line":"        return rpc_method(ctxt, \u0027quiesce_instance\u0027, **msg_args)"},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"    def unquiesce_instance(self, ctxt, instance, mapping\u003dNone,"}],"source_content_type":"text/x-python","patch_set":73,"id":"ba63e191_ddc9c079","line":979,"updated":"2016-01-20 10:42:26.000000000","message":"I do wonder if we should just have new methods for this call? like quiesce_action or quiesce_external or something?","commit_id":"07426426f03098af736710db90e8c7326bdc6c0a"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"2a32953f75d44d41bdbefa94ba9c4dc4e8a583cd","unresolved":false,"context_lines":[{"line_number":976,"context_line":"            version \u003d \u00274.0\u0027"},{"line_number":977,"context_line":"        cctxt \u003d self.client.prepare(server\u003d_compute_host(None, instance),"},{"line_number":978,"context_line":"                                    version\u003dversion)"},{"line_number":979,"context_line":"        rpc_method \u003d cctxt.cast if do_cast else cctxt.call"},{"line_number":980,"context_line":"        return rpc_method(ctxt, \u0027quiesce_instance\u0027, **msg_args)"},{"line_number":981,"context_line":""},{"line_number":982,"context_line":"    def unquiesce_instance(self, ctxt, instance, mapping\u003dNone,"}],"source_content_type":"text/x-python","patch_set":73,"id":"9a68dd71_602b8fec","line":979,"in_reply_to":"ba63e191_ddc9c079","updated":"2016-01-21 01:56:03.000000000","message":"updates related to this comment has been done.","commit_id":"07426426f03098af736710db90e8c7326bdc6c0a"}],"nova/compute/task_states.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0490a6ca203feeaf6d2ed3cdfe055f8410dbf9db","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                REBOOTING_HARD, UNPAUSING, PAUSING, SUSPENDING]"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"# posible task states during quiesce"},{"line_number":120,"context_line":"QUIESCING \u003d \u0027quiescing\u0027"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"# possible task states during unquiesce"},{"line_number":123,"context_line":"UNQUIESCING \u003d \u0027unqiescing\u0027"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_7ab2934d","line":120,"updated":"2016-01-15 16:14:53.000000000","message":"So we need to hide these states to users of previous API versions.\n\nI think we need to add the alias of \"unknown_task\" for the older API versions.\n\nyou can see how some of the alias bits work here:\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/common.py#L65\nBut it needs something a bit different for this case.","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"}],"nova/compute/vm_states.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"538ddc5890e4f1a5f6f00814cad520bf33d416b8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"ALLOW_TRIGGER_CRASH_DUMP \u003d [ACTIVE, PAUSED, RESCUED, RESIZED, ERROR]"},{"line_number":55,"context_line":"# states we allow to trigger crash dump"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"QUIESCED \u003d \u0027quiesced\u0027"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_7ffb6579","line":57,"updated":"2016-01-15 16:03:33.000000000","message":"I do wonder if we should really be hiding these vm_states and task_states from older API versions, to be fully backwards compatible. To do that, we would need to add some \"unknown\" state I guess, which would in itself, not be a backwards compatible change.","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e0aa1b6a964a376ddd67c0d8af051c400c61ef6c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"ALLOW_TRIGGER_CRASH_DUMP \u003d [ACTIVE, PAUSED, RESCUED, RESIZED, ERROR]"},{"line_number":55,"context_line":"# states we allow to trigger crash dump"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"QUIESCED \u003d \u0027quiesced\u0027"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_f94ad554","line":57,"in_reply_to":"da6ed579_3a1c1b69","updated":"2016-01-18 06:47:48.000000000","message":"For this case, should I add 2.16 microversion for list and show instance method?","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0490a6ca203feeaf6d2ed3cdfe055f8410dbf9db","unresolved":false,"context_lines":[{"line_number":54,"context_line":"ALLOW_TRIGGER_CRASH_DUMP \u003d [ACTIVE, PAUSED, RESCUED, RESIZED, ERROR]"},{"line_number":55,"context_line":"# states we allow to trigger crash dump"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"QUIESCED \u003d \u0027quiesced\u0027"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_9a94278b","line":57,"in_reply_to":"da6ed579_3a1c1b69","updated":"2016-01-15 16:14:53.000000000","message":"Yeah, so I think we need to add the alias of \"unknown_state\" for the older API versions.","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"13e5d5dc059fd9062858cd03de36e562de129275","unresolved":false,"context_lines":[{"line_number":54,"context_line":"ALLOW_TRIGGER_CRASH_DUMP \u003d [ACTIVE, PAUSED, RESCUED, RESIZED, ERROR]"},{"line_number":55,"context_line":"# states we allow to trigger crash dump"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"QUIESCED \u003d \u0027quiesced\u0027"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_3a1c1b69","line":57,"in_reply_to":"da6ed579_7ffb6579","updated":"2016-01-15 16:07:43.000000000","message":"Definitely true, we\u0027re going to need to filter these states on the way out. We should also be testing for that by making a 2.15 request on a quiesced server and have it not show up.","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"}],"nova/tests/unit/api/openstack/compute/test_server_quiesce_unquiesce.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                                   instance_id\u003d\u0027test_inst\u0027)):"},{"line_number":66,"context_line":"            self.controller._action_quiesce_instance(self.req,"},{"line_number":67,"context_line":"                                                     \u0027test_inst\u0027,"},{"line_number":68,"context_line":"                                                     body\u003dbody)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def test_quiesce_policy_failed(self):"},{"line_number":71,"context_line":"        rules \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_7fbf8dfc","line":68,"updated":"2015-12-01 17:11:51.000000000","message":"I don\u0027t get what this test asserts.","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                                   instance_id\u003d\u0027test_inst\u0027)):"},{"line_number":108,"context_line":"            self.controller._action_unquiesce_instance(self.req,"},{"line_number":109,"context_line":"                                                       \u0027test_inst\u0027,"},{"line_number":110,"context_line":"                                                       body\u003dbody)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def test_unquiesce_policy_failed(self):"},{"line_number":113,"context_line":"        rules \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_dfb559d0","line":110,"updated":"2015-12-01 17:11:51.000000000","message":"You need to assert something","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        body \u003d {\"quiesce\": \"\"}"},{"line_number":145,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":146,"context_line":"            self.controller._action_quiesce_instance, self.req,"},{"line_number":147,"context_line":"                          \u0027test_inst\u0027, body\u003dbody)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def test_unquiesce_with_bogus_id(self):"},{"line_number":150,"context_line":"        body \u003d {\"unquiesce\": \"\"}"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_5f3f2925","line":147,"updated":"2015-12-01 17:11:51.000000000","message":"Why it is a bogus id?","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        body \u003d {\"unquiesce\": \"\"}"},{"line_number":151,"context_line":"        self.assertRaises(webob.exc.HTTPNotFound,"},{"line_number":152,"context_line":"            self.controller._action_unquiesce_instance, self.req,"},{"line_number":153,"context_line":"                          \u0027test_inst\u0027, body\u003dbody)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_1f20c1f6","line":153,"updated":"2015-12-01 17:11:51.000000000","message":"Same question as above","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"17b18d4bbac99b40cc1e41c2323acf2d12b7ad24","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                              extension_info\u003dext_info)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @mock.patch(\u0027nova.compute.api.API.quiesce\u0027)"},{"line_number":61,"context_line":"    def test_quiesce(self, mock_quiesce):"},{"line_number":62,"context_line":"        body \u003d {\"quiesce\": None}"},{"line_number":63,"context_line":"        fake_inst \u003d fake_instance_get(self.context,"},{"line_number":64,"context_line":"                                      instance_id\u003d\u0027test_inst\u0027)"}],"source_content_type":"text/x-python","patch_set":73,"id":"ba63e191_b89f3ab3","line":61,"updated":"2016-01-20 10:42:26.000000000","message":"I think we need another test to test we get the correct task_state and status back for each edge of the state map, when we list an instance at the appropriate moment.\n\nWe should also do this for both v2.1 and v2.17 so we can tell that the alias system is working correctly.","commit_id":"07426426f03098af736710db90e8c7326bdc6c0a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                \u0027servers.ViewBuilderV21._get_addresses\u0027)"},{"line_number":71,"context_line":"    @mock.patch(\u0027nova.api.openstack.compute.views.\u0027"},{"line_number":72,"context_line":"                \u0027servers.ViewBuilderV21._get_metadata\u0027)"},{"line_number":73,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"},{"line_number":74,"context_line":"    def test_handle_vm_state_quisced(self, get_instance_mock,"},{"line_number":75,"context_line":"                                     meta_mock, address_mock,"},{"line_number":76,"context_line":"                                     links_mock, host_id_mock):"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_fbe712e2","line":73,"updated":"2016-01-21 14:54:19.000000000","message":"I was expecting to see the DB methods mocked out, not these methods.","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.req._extension_data[\u0027db_items\u0027][\u0027instances\u0027][\u0027test_inst\u0027].\\"},{"line_number":88,"context_line":"            vm_state"},{"line_number":89,"context_line":"        self.assertEqual(\u0027UNKNOWN\u0027, result[\u0027server\u0027][\u0027status\u0027])"},{"line_number":90,"context_line":"        self.assertEqual(\u0027unknown\u0027, vm_state)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @mock.patch(\u0027nova.api.openstack.compute.views.\u0027"},{"line_number":93,"context_line":"                \u0027servers.ViewBuilderV21._get_host_id\u0027)"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_3b05aa79","line":90,"updated":"2016-01-21 14:54:19.000000000","message":"what is the task_state?","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        task_state \u003d \\"},{"line_number":117,"context_line":"            self.req._extension_data[\u0027db_items\u0027][\u0027instances\u0027][\u0027test_inst\u0027].\\"},{"line_number":118,"context_line":"            task_state"},{"line_number":119,"context_line":"        self.assertEqual(\u0027UNKNOWN\u0027, result[\u0027server\u0027][\u0027status\u0027])"},{"line_number":120,"context_line":"        self.assertEqual(\u0027active\u0027, vm_state)"},{"line_number":121,"context_line":"        self.assertEqual(\u0027unknown\u0027, task_state)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_7b4a42c7","line":119,"updated":"2016-01-21 14:54:19.000000000","message":"I was expecting ACTIVE here, I think. Like when turning off does not go into the SHUTDOWN state.","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"92fab59dc4ad20f5b76e6b5fd7c1928258a9e935","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        task_state \u003d \\"},{"line_number":117,"context_line":"            self.req._extension_data[\u0027db_items\u0027][\u0027instances\u0027][\u0027test_inst\u0027].\\"},{"line_number":118,"context_line":"            task_state"},{"line_number":119,"context_line":"        self.assertEqual(\u0027UNKNOWN\u0027, result[\u0027server\u0027][\u0027status\u0027])"},{"line_number":120,"context_line":"        self.assertEqual(\u0027active\u0027, vm_state)"},{"line_number":121,"context_line":"        self.assertEqual(\u0027unknown\u0027, task_state)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_ad1620a5","line":119,"in_reply_to":"9a68dd71_7b4a42c7","updated":"2016-01-22 01:52:02.000000000","message":"Done","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            self.req._extension_data[\u0027db_items\u0027][\u0027instances\u0027][\u0027test_inst\u0027].\\"},{"line_number":273,"context_line":"            vm_state"},{"line_number":274,"context_line":"        self.assertEqual(\u0027QUIESCED\u0027, result[\u0027server\u0027][\u0027status\u0027])"},{"line_number":275,"context_line":"        self.assertEqual(\u0027quiesced\u0027, vm_state)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    @mock.patch(\u0027nova.api.openstack.compute.views.\u0027"},{"line_number":278,"context_line":"                \u0027servers.ViewBuilderV21._get_host_id\u0027)"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_fbfe326a","line":275,"updated":"2016-01-21 14:54:19.000000000","message":"what is the task_state?","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        task_state \u003d \\"},{"line_number":302,"context_line":"            self.req._extension_data[\u0027db_items\u0027][\u0027instances\u0027][\u0027test_inst\u0027].\\"},{"line_number":303,"context_line":"            task_state"},{"line_number":304,"context_line":"        self.assertEqual(\u0027QUIESCE\u0027, result[\u0027server\u0027][\u0027status\u0027])"},{"line_number":305,"context_line":"        self.assertEqual(\u0027active\u0027, vm_state)"},{"line_number":306,"context_line":"        self.assertEqual(\u0027quiescing\u0027, task_state)"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_7bf3229f","line":304,"updated":"2016-01-21 14:54:19.000000000","message":"I thought it was still in the Active state at this point? Until it reaches the QUIESCE state?","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"92fab59dc4ad20f5b76e6b5fd7c1928258a9e935","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        task_state \u003d \\"},{"line_number":302,"context_line":"            self.req._extension_data[\u0027db_items\u0027][\u0027instances\u0027][\u0027test_inst\u0027].\\"},{"line_number":303,"context_line":"            task_state"},{"line_number":304,"context_line":"        self.assertEqual(\u0027QUIESCE\u0027, result[\u0027server\u0027][\u0027status\u0027])"},{"line_number":305,"context_line":"        self.assertEqual(\u0027active\u0027, vm_state)"},{"line_number":306,"context_line":"        self.assertEqual(\u0027quiescing\u0027, task_state)"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_6d87c8d7","line":304,"in_reply_to":"9a68dd71_7bf3229f","updated":"2016-01-22 01:52:02.000000000","message":"So I guess I can remove QUIESCE for status then","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"}],"nova/tests/unit/api/openstack/test_wsgi.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"538ddc5890e4f1a5f6f00814cad520bf33d416b8","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @mock.patch(\"nova.api.openstack.api_version_request.max_api_version\")"},{"line_number":163,"context_line":"    def test_api_version_request_header(self, mock_maxver):"},{"line_number":164,"context_line":"        mock_maxver.return_value \u003d api_version.APIVersionRequest(\"2.14\")"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        request \u003d wsgi.Request.blank(\u0027/\u0027)"},{"line_number":167,"context_line":"        request.headers \u003d {self.header_name: \u00272.14\u0027}"}],"source_content_type":"text/x-python","patch_set":61,"id":"da6ed579_b43824d4","side":"PARENT","line":164,"updated":"2016-01-15 16:03:33.000000000","message":"I don\u0027t think we need to change this test, given this is mocked out.","commit_id":"a53d0eef4a6e43c321b82e59bc7b3400e7ef6b41"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":2998,"context_line":"        params \u003d dict(task_state\u003dNone, vm_state\u003dvm_state)"},{"line_number":2999,"context_line":"        instance \u003d self._create_instance_obj(params\u003dparams)"},{"line_number":3000,"context_line":""},{"line_number":3001,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3002,"context_line":"        self.compute_api._record_action_start(self.context,"},{"line_number":3003,"context_line":"                                    instance, instance_actions.QUIESCE)"},{"line_number":3004,"context_line":"        self.compute_api.quiesce(self.context, instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_1f81a18f","line":3001,"updated":"2015-12-01 17:11:51.000000000","message":"As you mocked objects.Instance.save this seems a no-op.","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":3000,"context_line":""},{"line_number":3001,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3002,"context_line":"        self.compute_api._record_action_start(self.context,"},{"line_number":3003,"context_line":"                                    instance, instance_actions.QUIESCE)"},{"line_number":3004,"context_line":"        self.compute_api.quiesce(self.context, instance)"},{"line_number":3005,"context_line":"        self.assertEqual(task_states.QUIESCING, instance.task_state)"},{"line_number":3006,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_3f2a6591","line":3003,"updated":"2015-12-01 17:11:51.000000000","message":"As you mocked _record_action_start it seems like a no-op.","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":3026,"context_line":"        params \u003d dict(task_state\u003dNone, vm_state\u003dvm_state)"},{"line_number":3027,"context_line":"        instance \u003d self._create_instance_obj(params\u003dparams)"},{"line_number":3028,"context_line":""},{"line_number":3029,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3030,"context_line":"        self.compute_api._record_action_start(self.context,"},{"line_number":3031,"context_line":"                                    instance, instance_actions.UNQUIESCE)"},{"line_number":3032,"context_line":"        self.compute_api.unquiesce(self.context, instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_8290da4f","line":3029,"updated":"2015-12-01 17:11:51.000000000","message":"Seems as above","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":3028,"context_line":""},{"line_number":3029,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3030,"context_line":"        self.compute_api._record_action_start(self.context,"},{"line_number":3031,"context_line":"                                    instance, instance_actions.UNQUIESCE)"},{"line_number":3032,"context_line":"        self.compute_api.unquiesce(self.context, instance)"},{"line_number":3033,"context_line":"        self.assertEqual(task_states.UNQUIESCING, instance.task_state)"},{"line_number":3034,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_627cd620","line":3031,"updated":"2015-12-01 17:11:51.000000000","message":"same as above","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8183020f6a7cfed79f494a085e3610e8123173a2","unresolved":false,"context_lines":[{"line_number":2987,"context_line":"        mock_save.assert_called_once_with(expected_task_state\u003d[None])"},{"line_number":2988,"context_line":"        mock_record.assert_called_once_with("},{"line_number":2989,"context_line":"            self.context, instance, instance_actions.QUIESCE)"},{"line_number":2990,"context_line":"        if not self.cell_type \u003d\u003d \u0027api\u0027:"},{"line_number":2991,"context_line":"            mock_quiesce.assert_called_once_with(self.context, instance,"},{"line_number":2992,"context_line":"                                                 do_cast\u003dTrue,"},{"line_number":2993,"context_line":"                                                 exposed_call\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a740942_d206761c","line":2990,"updated":"2015-12-07 16:47:41.000000000","message":"What will happen if the cell_type is api? Will the api cell forward the request to the cell where the instance is running?","commit_id":"c91d61aef14849a04b7b902e80f6641019039b01"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3bf2ebec23344234078f520d3747a8e8c1379163","unresolved":false,"context_lines":[{"line_number":2987,"context_line":"        mock_save.assert_called_once_with(expected_task_state\u003d[None])"},{"line_number":2988,"context_line":"        mock_record.assert_called_once_with("},{"line_number":2989,"context_line":"            self.context, instance, instance_actions.QUIESCE)"},{"line_number":2990,"context_line":"        if not self.cell_type \u003d\u003d \u0027api\u0027:"},{"line_number":2991,"context_line":"            mock_quiesce.assert_called_once_with(self.context, instance,"},{"line_number":2992,"context_line":"                                                 do_cast\u003dTrue,"},{"line_number":2993,"context_line":"                                                 exposed_call\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a740942_fd61ec39","line":2990,"in_reply_to":"7a740942_d206761c","updated":"2015-12-08 03:37:28.000000000","message":"Now I didn\u0027t add rpc calls in cells/rpcapi, I think it is not the scope of this BP, but I can add it in another bug patch if everything goes well.","commit_id":"c91d61aef14849a04b7b902e80f6641019039b01"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"24c6cbece7df8abea98808585d26b4dd88891e4f","unresolved":false,"context_lines":[{"line_number":2878,"context_line":"        @mock.patch.object(self.compute, \u0027_notify_about_instance_usage\u0027)"},{"line_number":2879,"context_line":"        @mock.patch.object(instance, \u0027save\u0027)"},{"line_number":2880,"context_line":"        def do_test(save_mock, notify_mock, quiesce_mock):"},{"line_number":2881,"context_line":"            # run the code"},{"line_number":2882,"context_line":"            self.compute.quiesce_instance(self.context, instance,"},{"line_number":2883,"context_line":"                                          exposed_call\u003dTrue)"},{"line_number":2884,"context_line":"            # assert the calls"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a8ffd7b_ef6a86ec","line":2881,"updated":"2015-11-27 12:26:02.000000000","message":"I think these are unnecessary comments L2881, L2884, L2903, L2907","commit_id":"a7d89c069b5e4778d149f73a8adc5e7277fc9ae3"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0c35d2121a4ec5a0f0d63723e901ffaf32dbe96b","unresolved":false,"context_lines":[{"line_number":2878,"context_line":"        @mock.patch.object(self.compute, \u0027_notify_about_instance_usage\u0027)"},{"line_number":2879,"context_line":"        @mock.patch.object(instance, \u0027save\u0027)"},{"line_number":2880,"context_line":"        def do_test(save_mock, notify_mock, quiesce_mock):"},{"line_number":2881,"context_line":"            # run the code"},{"line_number":2882,"context_line":"            self.compute.quiesce_instance(self.context, instance,"},{"line_number":2883,"context_line":"                                          exposed_call\u003dTrue)"},{"line_number":2884,"context_line":"            # assert the calls"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a8ffd7b_439b5466","line":2881,"in_reply_to":"9a8ffd7b_ef6a86ec","updated":"2015-11-28 08:38:24.000000000","message":"Done","commit_id":"a7d89c069b5e4778d149f73a8adc5e7277fc9ae3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":2877,"context_line":"        @mock.patch.object(self.compute.driver, \u0027quiesce\u0027)"},{"line_number":2878,"context_line":"        @mock.patch.object(self.compute, \u0027_notify_about_instance_usage\u0027)"},{"line_number":2879,"context_line":"        @mock.patch.object(instance, \u0027save\u0027)"},{"line_number":2880,"context_line":"        def do_test(save_mock, notify_mock, quiesce_mock):"},{"line_number":2881,"context_line":"            self.compute.quiesce_instance(self.context, instance,"},{"line_number":2882,"context_line":"                                          exposed_call\u003dTrue)"},{"line_number":2883,"context_line":"            save_mock.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_22f24e9b","line":2880,"updated":"2015-12-01 17:11:51.000000000","message":"Why do you need this extra function?","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b14a83ba2e5cb654740946fd569b8eb4a486191c","unresolved":false,"context_lines":[{"line_number":2877,"context_line":"        @mock.patch.object(self.compute.driver, \u0027quiesce\u0027)"},{"line_number":2878,"context_line":"        @mock.patch.object(self.compute, \u0027_notify_about_instance_usage\u0027)"},{"line_number":2879,"context_line":"        @mock.patch.object(instance, \u0027save\u0027)"},{"line_number":2880,"context_line":"        def do_test(save_mock, notify_mock, quiesce_mock):"},{"line_number":2881,"context_line":"            self.compute.quiesce_instance(self.context, instance,"},{"line_number":2882,"context_line":"                                          exposed_call\u003dTrue)"},{"line_number":2883,"context_line":"            save_mock.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_44e09efa","line":2880,"in_reply_to":"9a8ffd7b_22f24e9b","updated":"2015-12-02 07:55:53.000000000","message":"To avoid using neted mock","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e1aadc98d3abd1005d50594a1b5db9f219c7b86b","unresolved":false,"context_lines":[{"line_number":2880,"context_line":"        def do_test(save_mock, notify_mock, quiesce_mock):"},{"line_number":2881,"context_line":"            self.compute.quiesce_instance(self.context, instance,"},{"line_number":2882,"context_line":"                                          exposed_call\u003dTrue)"},{"line_number":2883,"context_line":"            save_mock.assert_called_once_with("},{"line_number":2884,"context_line":"                expected_task_state\u003dtask_states.QUIESCING)"},{"line_number":2885,"context_line":"            self.assertIsNone(instance.task_state)"},{"line_number":2886,"context_line":"            self.assertEqual(vm_states.QUIESCED, instance.vm_state)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a8ffd7b_027ceae9","line":2883,"updated":"2015-12-01 17:11:51.000000000","message":"Is it the instance save the only thing you can assert here?","commit_id":"00a70b37e7d897a529c2c2d7f5b2fd13b550d723"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8183020f6a7cfed79f494a085e3610e8123173a2","unresolved":false,"context_lines":[{"line_number":2880,"context_line":"                                  \u0027_notify_about_instance_usage\u0027),"},{"line_number":2881,"context_line":"                mock.patch.object(instance, \u0027save\u0027),"},{"line_number":2882,"context_line":"                mock.patch(\u0027nova.context.RequestContext.elevated\u0027)"},{"line_number":2883,"context_line":"        ) as (quiesce_mock, notify_mock, save_mock, mock_elevated):"},{"line_number":2884,"context_line":"            mock_elevated.return_value \u003d self.context"},{"line_number":2885,"context_line":"            self.compute.quiesce_instance(self.context, instance,"},{"line_number":2886,"context_line":"                                          exposed_call\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a740942_52dda66d","line":2883,"updated":"2015-12-07 16:47:41.000000000","message":"You don\u0027t have to use nested context manager. From python 2.7 the following syntax is supported:\n  with A() as X, B() as Y, C() as Z:\n      do_something()\n\nAlternatively you can do this mocking as decorators.","commit_id":"c91d61aef14849a04b7b902e80f6641019039b01"}],"nova/tests/unit/compute/test_rpcapi.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"24c6cbece7df8abea98808585d26b4dd88891e4f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"9a8ffd7b_af60fe01","line":515,"updated":"2015-11-27 12:26:02.000000000","message":"Does the quiesce case is missing here?","commit_id":"a7d89c069b5e4778d149f73a8adc5e7277fc9ae3"}],"nova/tests/unit/fake_policy.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a940dd490a21db5171100078d16db4d935fe5646","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    \"compute:pause\": \"\","},{"line_number":74,"context_line":"    \"compute:unpause\": \"\","},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    \"compute:quiesce\": \"\","},{"line_number":77,"context_line":"    \"compute:unquiesce\": \"\","},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    \"compute:start\": \"\","},{"line_number":80,"context_line":"    \"compute:stop\": \"\","}],"source_content_type":"text/x-python","patch_set":52,"id":"fa69d971_6e97993a","line":77,"range":{"start_line":76,"start_character":0,"end_line":77,"end_character":28},"updated":"2016-01-05 08:52:05.000000000","message":"ditto: need to remove them","commit_id":"ba1d4c917609676f99d6d3cfc4fca923cd8fe688"}],"nova/tests/unit/test_policy.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a940dd490a21db5171100078d16db4d935fe5646","unresolved":false,"context_lines":[{"line_number":367,"context_line":"\"compute:start\","},{"line_number":368,"context_line":"\"compute:stop\","},{"line_number":369,"context_line":"\"compute:delete\","},{"line_number":370,"context_line":"\"compute:quiesce\","},{"line_number":371,"context_line":"\"compute:unquiesce\","},{"line_number":372,"context_line":"\"compute:soft_delete\","},{"line_number":373,"context_line":"\"compute:force_delete\","},{"line_number":374,"context_line":"\"compute:lock\","}],"source_content_type":"text/x-python","patch_set":52,"id":"fa69d971_2ea681ae","line":371,"range":{"start_line":370,"start_character":0,"end_line":371,"end_character":20},"updated":"2016-01-05 08:52:05.000000000","message":"ditto","commit_id":"ba1d4c917609676f99d6d3cfc4fca923cd8fe688"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5325c95236d3e09b3c020d8473dcf381c307030e","unresolved":false,"context_lines":[{"line_number":699,"context_line":"\"os_compute_api:os-availability-zone:discoverable\","},{"line_number":700,"context_line":"\"os_compute_api:os-used-limits:discoverable\","},{"line_number":701,"context_line":"\"os_compute_api:os-migrations:discoverable\","},{"line_number":702,"context_line":"\"os_compute_api:os-assisted-volume-snapshots:discoverable\",)"},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"        self.non_admin_only_rules \u003d ("},{"line_number":705,"context_line":"\"compute_extension:hide_server_addresses\","}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_bb6e7a2d","line":702,"updated":"2016-01-21 14:54:19.000000000","message":"Nit: this feels like an unrelated change, best avoided.","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a7d87849460e9e5d3541e9a0c268065af8a3424f","unresolved":false,"context_lines":[{"line_number":699,"context_line":"\"os_compute_api:os-availability-zone:discoverable\","},{"line_number":700,"context_line":"\"os_compute_api:os-used-limits:discoverable\","},{"line_number":701,"context_line":"\"os_compute_api:os-migrations:discoverable\","},{"line_number":702,"context_line":"\"os_compute_api:os-assisted-volume-snapshots:discoverable\",)"},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"        self.non_admin_only_rules \u003d ("},{"line_number":705,"context_line":"\"compute_extension:hide_server_addresses\","}],"source_content_type":"text/x-python","patch_set":80,"id":"9a68dd71_e8f2c6d1","line":702,"in_reply_to":"9a68dd71_bb6e7a2d","updated":"2016-01-22 03:10:20.000000000","message":"Done","commit_id":"e5f0073868271da7f19d09bcfd6b7afdf42cb4c0"}],"releasenotes/notes/bp-expose-quiesce-unquiesce-api-8ab545e0fc122bbf.yaml":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a940dd490a21db5171100078d16db4d935fe5646","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Expose \"Quiesce\" and \"Unquiesce\" instance API"},{"line_number":5,"context_line":"    to the user. In order to use this new feature,"},{"line_number":6,"context_line":"    user have to contain the header of request"},{"line_number":7,"context_line":"    microversion v2.15 in the API request."}],"source_content_type":"text/x-yaml","patch_set":52,"id":"fa69d971_aeb831c9","line":6,"range":{"start_line":6,"start_character":4,"end_line":6,"end_character":13},"updated":"2016-01-05 08:52:05.000000000","message":"s/user have/users have to/\n\nor\n\ns/user have/user has to/","commit_id":"ba1d4c917609676f99d6d3cfc4fca923cd8fe688"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"538ddc5890e4f1a5f6f00814cad520bf33d416b8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Expose \"Quiesce\" and \"Unquiesce\" instance API"},{"line_number":5,"context_line":"    to the user. In order to use this new feature,"},{"line_number":6,"context_line":"    users have to contain the header of request"},{"line_number":7,"context_line":"    microversion v2.15 in the API request."}],"source_content_type":"text/x-yaml","patch_set":61,"id":"da6ed579_f13c6ee2","line":7,"updated":"2016-01-15 16:03:33.000000000","message":"v2.16?","commit_id":"d8cade7559273fcb76eea29d7a3189164dadbe4f"}]}
