)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"17b735878a011a3a443926102ebee60109c246c8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fixes Bug \"destroy_vm fails with HyperVException\""},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When trying to delete and instance that has a pending operation,"},{"line_number":10,"context_line":"i.e. creating a snapshot, Hyper-V will raise the following excention:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"HyperVException: Operation failed with return value: 32775"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a4dcd0f_41836856","line":9,"updated":"2015-08-12 10:18:51.000000000","message":"*an instance","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"348e4ffc9e5e6afeeed5fa1e2df10361a19480d6","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fixes Bug \"destroy_vm fails with HyperVException\""},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When trying to delete and instance that has a pending operation,"},{"line_number":10,"context_line":"i.e. creating a snapshot, Hyper-V will raise the following excention:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"HyperVException: Operation failed with return value: 32775"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa1b9901_d16486e6","line":9,"in_reply_to":"1a4dcd0f_41836856","updated":"2015-08-18 14:40:30.000000000","message":"Done","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"17b735878a011a3a443926102ebee60109c246c8","unresolved":false,"context_lines":[{"line_number":18,"context_line":"This patch fixes this problem by requesting all the instance jobs"},{"line_number":19,"context_line":"and killing them right before the delete operation."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes Bug: 1461970"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I0e3fca20981e1080814224b8cee7cea5b8c6a53f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a4dcd0f_a1e10c2c","line":21,"updated":"2015-08-12 10:18:51.000000000","message":"#1461970","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"348e4ffc9e5e6afeeed5fa1e2df10361a19480d6","unresolved":false,"context_lines":[{"line_number":18,"context_line":"This patch fixes this problem by requesting all the instance jobs"},{"line_number":19,"context_line":"and killing them right before the delete operation."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes Bug: 1461970"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I0e3fca20981e1080814224b8cee7cea5b8c6a53f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa1b9901_1172fead","line":21,"in_reply_to":"1a4dcd0f_a1e10c2c","updated":"2015-08-18 14:40:30.000000000","message":"Done","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"}],"nova/tests/unit/virt/hyperv/test_vmutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d5678b077b8dd8b7797f64fc548bcf700b230b5","unresolved":false,"context_lines":[{"line_number":886,"context_line":"        mock_job1.RequestStateChange.assert_called_once_with("},{"line_number":887,"context_line":"            self._vmutils._KILL_JOB_STATE_CHANGE_REQUEST)"},{"line_number":888,"context_line":"        mock_job2.RequestStateChange.assert_called_once_with("},{"line_number":889,"context_line":"            self._vmutils._KILL_JOB_STATE_CHANGE_REQUEST)"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"    def test_is_job_completed_true(self):"},{"line_number":892,"context_line":"        job \u003d mock.MagicMock(JobState\u003dconstants.JOB_STATE_COMPLETED)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_7feb0eb1","line":889,"updated":"2015-08-24 10:37:59.000000000","message":"you should also assert that mock_job3.RequestStateChange was not called.","commit_id":"af7fcba838759f81de1ff3292a1b88a03bdcd466"}],"nova/virt/hyperv/vmops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"17b735878a011a3a443926102ebee60109c246c8","unresolved":false,"context_lines":[{"line_number":447,"context_line":""},{"line_number":448,"context_line":"                # Stop the VM first."},{"line_number":449,"context_line":"                self.power_off(instance)"},{"line_number":450,"context_line":"                self._vmutils.stop_vm_jobs(instance_name)"},{"line_number":451,"context_line":"                self._vmutils.destroy_vm(instance_name)"},{"line_number":452,"context_line":"                self._volumeops.disconnect_volumes(block_device_info)"},{"line_number":453,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_019c800c","line":450,"updated":"2015-08-12 10:18:51.000000000","message":"wondering if this won\u0027t stop the \"power_off\" job as well?","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"348e4ffc9e5e6afeeed5fa1e2df10361a19480d6","unresolved":false,"context_lines":[{"line_number":447,"context_line":""},{"line_number":448,"context_line":"                # Stop the VM first."},{"line_number":449,"context_line":"                self.power_off(instance)"},{"line_number":450,"context_line":"                self._vmutils.stop_vm_jobs(instance_name)"},{"line_number":451,"context_line":"                self._vmutils.destroy_vm(instance_name)"},{"line_number":452,"context_line":"                self._volumeops.disconnect_volumes(block_device_info)"},{"line_number":453,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_b697888f","line":450,"in_reply_to":"1a4dcd0f_019c800c","updated":"2015-08-18 14:40:30.000000000","message":"Done","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6d5678b077b8dd8b7797f64fc548bcf700b230b5","unresolved":false,"context_lines":[{"line_number":447,"context_line":""},{"line_number":448,"context_line":"                # Stop the VM first."},{"line_number":449,"context_line":"                self.power_off(instance)"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"                self._vmutils.destroy_vm(instance_name)"},{"line_number":452,"context_line":"                self._volumeops.disconnect_volumes(block_device_info)"},{"line_number":453,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_df19fa23","side":"PARENT","line":450,"updated":"2015-08-24 10:37:59.000000000","message":"unrelated change.","commit_id":"9f9802eebd56b7fa56de9c7e64f3424fc6334ea0"}],"nova/virt/hyperv/vmutils.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"73f09730655eadaee5b93195bacb15f44e5364ea","unresolved":false,"context_lines":[{"line_number":600,"context_line":"            time.sleep(0.1)"},{"line_number":601,"context_line":"            job \u003d self._get_wmi_obj(job_path)"},{"line_number":602,"context_line":"        if job.JobState \u003d\u003d constants.JOB_STATE_KILLED:"},{"line_number":603,"context_line":"            LOG.info(\"WMI job ended with status %s.\" % job.JobState)"},{"line_number":604,"context_line":"            return job"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        if job.JobState !\u003d constants.WMI_JOB_STATE_COMPLETED:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_dbf3fa71","line":603,"updated":"2015-08-03 11:36:44.000000000","message":"missing log hint _LI()\n\nplease use a , instead of the %","commit_id":"9de63119025f61434815d15724d3e66bd692991b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"17b735878a011a3a443926102ebee60109c246c8","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    _completed_job_states \u003d [constants.JOB_STATE_COMPLETED,"},{"line_number":100,"context_line":"                             constants.JOB_STATE_TERMINATED,"},{"line_number":101,"context_line":"                             constants.JOB_STATE_KILLED,"},{"line_number":102,"context_line":"                             constants.JOB_STATE_COMPLETED_WITH_WARNINGS]"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    _vm_power_states_map \u003d {constants.HYPERV_VM_STATE_ENABLED: 2,"},{"line_number":105,"context_line":"                            constants.HYPERV_VM_STATE_DISABLED: 3,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_249bca67","line":102,"updated":"2015-08-12 10:18:51.000000000","message":"wondering if the same completed job states are on both v1 and v2 namespaces..","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"348e4ffc9e5e6afeeed5fa1e2df10361a19480d6","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    _completed_job_states \u003d [constants.JOB_STATE_COMPLETED,"},{"line_number":100,"context_line":"                             constants.JOB_STATE_TERMINATED,"},{"line_number":101,"context_line":"                             constants.JOB_STATE_KILLED,"},{"line_number":102,"context_line":"                             constants.JOB_STATE_COMPLETED_WITH_WARNINGS]"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    _vm_power_states_map \u003d {constants.HYPERV_VM_STATE_ENABLED: 2,"},{"line_number":105,"context_line":"                            constants.HYPERV_VM_STATE_DISABLED: 3,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_6b826996","line":102,"in_reply_to":"1a4dcd0f_249bca67","updated":"2015-08-18 14:40:30.000000000","message":"Yes, they are.","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"17b735878a011a3a443926102ebee60109c246c8","unresolved":false,"context_lines":[{"line_number":600,"context_line":"            time.sleep(0.1)"},{"line_number":601,"context_line":"            job \u003d self._get_wmi_obj(job_path)"},{"line_number":602,"context_line":"        if job.JobState \u003d\u003d constants.JOB_STATE_KILLED:"},{"line_number":603,"context_line":"            LOG.debug(\"WMI job ended with status %s.\", job.JobState)"},{"line_number":604,"context_line":"            return job"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        if job.JobState !\u003d constants.WMI_JOB_STATE_COMPLETED:"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_a17b4cbd","line":603,"updated":"2015-08-12 10:18:51.000000000","message":"i think it would be clearer to have \"WMI job killed with status %s.\" instead, so it is a bit more clear, IMO.","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"348e4ffc9e5e6afeeed5fa1e2df10361a19480d6","unresolved":false,"context_lines":[{"line_number":600,"context_line":"            time.sleep(0.1)"},{"line_number":601,"context_line":"            job \u003d self._get_wmi_obj(job_path)"},{"line_number":602,"context_line":"        if job.JobState \u003d\u003d constants.JOB_STATE_KILLED:"},{"line_number":603,"context_line":"            LOG.debug(\"WMI job ended with status %s.\", job.JobState)"},{"line_number":604,"context_line":"            return job"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        if job.JobState !\u003d constants.WMI_JOB_STATE_COMPLETED:"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_ab5f2140","line":603,"in_reply_to":"1a4dcd0f_a17b4cbd","updated":"2015-08-18 14:40:30.000000000","message":"Done","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"17b735878a011a3a443926102ebee60109c246c8","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            job \u003d self._get_wmi_obj(job_path)"},{"line_number":602,"context_line":"        if job.JobState \u003d\u003d constants.JOB_STATE_KILLED:"},{"line_number":603,"context_line":"            LOG.debug(\"WMI job ended with status %s.\", job.JobState)"},{"line_number":604,"context_line":"            return job"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        if job.JobState !\u003d constants.WMI_JOB_STATE_COMPLETED:"},{"line_number":607,"context_line":"            job_state \u003d job.JobState"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_24842a09","line":604,"updated":"2015-08-12 10:18:51.000000000","message":"not unit tested.","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"348e4ffc9e5e6afeeed5fa1e2df10361a19480d6","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            job \u003d self._get_wmi_obj(job_path)"},{"line_number":602,"context_line":"        if job.JobState \u003d\u003d constants.JOB_STATE_KILLED:"},{"line_number":603,"context_line":"            LOG.debug(\"WMI job ended with status %s.\", job.JobState)"},{"line_number":604,"context_line":"            return job"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        if job.JobState !\u003d constants.WMI_JOB_STATE_COMPLETED:"},{"line_number":607,"context_line":"            job_state \u003d job.JobState"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_2b19d188","line":604,"in_reply_to":"1a4dcd0f_24842a09","updated":"2015-08-18 14:40:30.000000000","message":"Done","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"17b735878a011a3a443926102ebee60109c246c8","unresolved":false,"context_lines":[{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        for job in vm_jobs:"},{"line_number":842,"context_line":"            if job.Cancellable is True and job is not None \\"},{"line_number":843,"context_line":"                and not self._jobIsCompleted(job):"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"                job.RequestStateChange(self._KILL_JOB_STATE_CHANGE_REQUEST)"},{"line_number":846,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_e41e420b","line":843,"updated":"2015-08-12 10:18:51.000000000","message":"I think the order of the if operands should be changed:\n\n    if job and job.Cancellable and not self._is_job_completed(job):\n\nsince you are checking if job is None or not, it should be the first one to check. The reason is that, if Job is None, job.Cancellable is equivalent to None.Cancellable, which is bad, m\u0027kay.\n\nalso, avoid multiline statements using \\. use ( ) instead.","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"17b735878a011a3a443926102ebee60109c246c8","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        return vm_jobs"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    def _jobIsCompleted(self, job):"},{"line_number":850,"context_line":"        if job.JobState in self._completed_job_states:"},{"line_number":851,"context_line":"            return True"},{"line_number":852,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_240bca25","line":849,"updated":"2015-08-12 10:18:51.000000000","message":"convention would dictate for the verb to be first, like: _isJobCompleted.\n\nalthough, to keep consistency with the rest of the module, _is_job_completed is better.\n\n+ unit test for this would be cool.","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"348e4ffc9e5e6afeeed5fa1e2df10361a19480d6","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        return vm_jobs"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    def _jobIsCompleted(self, job):"},{"line_number":850,"context_line":"        if job.JobState in self._completed_job_states:"},{"line_number":851,"context_line":"            return True"},{"line_number":852,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_763570d8","line":849,"in_reply_to":"1a4dcd0f_240bca25","updated":"2015-08-18 14:40:30.000000000","message":"Done","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"17b735878a011a3a443926102ebee60109c246c8","unresolved":false,"context_lines":[{"line_number":849,"context_line":"    def _jobIsCompleted(self, job):"},{"line_number":850,"context_line":"        if job.JobState in self._completed_job_states:"},{"line_number":851,"context_line":"            return True"},{"line_number":852,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_e43882d5","line":852,"updated":"2015-08-12 10:18:51.000000000","message":"how about just:\n\n    return job.JobState in self._completed_job_states","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"348e4ffc9e5e6afeeed5fa1e2df10361a19480d6","unresolved":false,"context_lines":[{"line_number":849,"context_line":"    def _jobIsCompleted(self, job):"},{"line_number":850,"context_line":"        if job.JobState in self._completed_job_states:"},{"line_number":851,"context_line":"            return True"},{"line_number":852,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_d6ab1cd5","line":852,"in_reply_to":"1a4dcd0f_e43882d5","updated":"2015-08-18 14:40:30.000000000","message":"Done","commit_id":"bd7fd6df1eb7489cec7155eb89b50d5b62aa3a2e"}]}
