)]}'
{"nova/compute/api.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"7f1b60be337701c8b27318fdfd90ebc6eeb84be2","unresolved":false,"context_lines":[{"line_number":2757,"context_line":"                          task_state\u003d[None, task_states.MIGRATING])"},{"line_number":2758,"context_line":"    def pause(self, context, instance):"},{"line_number":2759,"context_line":"        \"\"\"Pause the given instance.\"\"\""},{"line_number":2760,"context_line":"        if not instance.task_state:"},{"line_number":2761,"context_line":"            instance.task_state \u003d task_states.PAUSING"},{"line_number":2762,"context_line":"            instance.save(expected_task_state\u003d[None])"},{"line_number":2763,"context_line":"        self._record_action_start(context, instance, instance_actions.PAUSE)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_d2ef83af","line":2760,"updated":"2015-03-13 05:40:34.000000000","message":"better to leave a note here.\nif instance.task_state is migrating  then we don\u0027t set it to pausing.","commit_id":"8dbdeed4aa6b7bd4ce5ed60ce77399c5a63cf2d7"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"dd2222233aea285f91eacd2f59fca6bd6c718814","unresolved":false,"context_lines":[{"line_number":2757,"context_line":"                          task_state\u003d[None, task_states.MIGRATING])"},{"line_number":2758,"context_line":"    def pause(self, context, instance):"},{"line_number":2759,"context_line":"        \"\"\"Pause the given instance.\"\"\""},{"line_number":2760,"context_line":"        if not instance.task_state:"},{"line_number":2761,"context_line":"            instance.task_state \u003d task_states.PAUSING"},{"line_number":2762,"context_line":"            instance.save(expected_task_state\u003d[None])"},{"line_number":2763,"context_line":"        self._record_action_start(context, instance, instance_actions.PAUSE)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_081acc7c","line":2760,"in_reply_to":"9a80dd14_d2ef83af","updated":"2015-03-13 07:18:56.000000000","message":"I will add note.","commit_id":"8dbdeed4aa6b7bd4ce5ed60ce77399c5a63cf2d7"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"af7209648442d90c31f03d04a428c786bc511441","unresolved":false,"context_lines":[{"line_number":2757,"context_line":"                          task_state\u003d[None, task_states.MIGRATING])"},{"line_number":2758,"context_line":"    def pause(self, context, instance):"},{"line_number":2759,"context_line":"        \"\"\"Pause the given instance.\"\"\""},{"line_number":2760,"context_line":"        if not instance.task_state:"},{"line_number":2761,"context_line":"            instance.task_state \u003d task_states.PAUSING"},{"line_number":2762,"context_line":"            instance.save(expected_task_state\u003dNone)"},{"line_number":2763,"context_line":"        self._record_action_start(context, instance, instance_actions.PAUSE)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_c8ba740a","line":2760,"updated":"2015-03-19 11:01:39.000000000","message":"So this means we will initiate a pause operation that does not set the task state to PAUSING in the live migration case, although the only bit of code that seems to care about this is the reboot command, which would be disallowed in this case, so this might be OK.","commit_id":"e696e7029a2ca2ed352f3ed1a8928f166af2c777"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"860c429d48deeb36dd8149666ae28e6881411e9d","unresolved":false,"context_lines":[{"line_number":2757,"context_line":"                          task_state\u003d[None, task_states.MIGRATING])"},{"line_number":2758,"context_line":"    def pause(self, context, instance):"},{"line_number":2759,"context_line":"        \"\"\"Pause the given instance.\"\"\""},{"line_number":2760,"context_line":"        if not instance.task_state:"},{"line_number":2761,"context_line":"            instance.task_state \u003d task_states.PAUSING"},{"line_number":2762,"context_line":"            instance.save(expected_task_state\u003dNone)"},{"line_number":2763,"context_line":"        self._record_action_start(context, instance, instance_actions.PAUSE)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_eb19f2d1","line":2760,"in_reply_to":"9a80dd14_c8ba740a","updated":"2015-03-19 11:35:43.000000000","message":"Note that the task_state is already set to MIGRATING and we can\u0027t set it to more than one value at a time, so IMHO it is correct that we don\u0027t set it to PAUSING here.","commit_id":"e696e7029a2ca2ed352f3ed1a8928f166af2c777"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f2ee9a7b7e4f745b0323e8025f17b0021cbb9e00","unresolved":false,"context_lines":[{"line_number":2757,"context_line":"        \"\"\"Pause the given instance.\"\"\""},{"line_number":2758,"context_line":"        if not instance.task_state:"},{"line_number":2759,"context_line":"            instance.task_state \u003d task_states.PAUSING"},{"line_number":2760,"context_line":"            instance.save(expected_task_state\u003dNone)"},{"line_number":2761,"context_line":"        self._record_action_start(context, instance, instance_actions.PAUSE)"},{"line_number":2762,"context_line":"        self.compute_rpcapi.pause_instance(context, instance)"},{"line_number":2763,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6ced46_26c0e129","line":2760,"range":{"start_line":2760,"start_character":26,"end_line":2760,"end_character":46},"updated":"2015-03-24 15:09:33.000000000","message":"this should be [None]","commit_id":"92ad5b750f57470cef4a3c0600215954f1995510"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"67b19ceddff3fd3d0776f316bd8dafd945a35e53","unresolved":false,"context_lines":[{"line_number":2757,"context_line":"        \"\"\"Pause the given instance.\"\"\""},{"line_number":2758,"context_line":"        if not instance.task_state:"},{"line_number":2759,"context_line":"            instance.task_state \u003d task_states.PAUSING"},{"line_number":2760,"context_line":"            instance.save(expected_task_state\u003dNone)"},{"line_number":2761,"context_line":"        self._record_action_start(context, instance, instance_actions.PAUSE)"},{"line_number":2762,"context_line":"        self.compute_rpcapi.pause_instance(context, instance)"},{"line_number":2763,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a6ced46_6f1c46c2","line":2760,"in_reply_to":"1a6ced46_26c0e129","updated":"2015-03-25 10:42:39.000000000","message":"Done","commit_id":"92ad5b750f57470cef4a3c0600215954f1995510"}],"nova/compute/manager.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"7f1b60be337701c8b27318fdfd90ebc6eeb84be2","unresolved":false,"context_lines":[{"line_number":4081,"context_line":"                      instance_uuid\u003dinstance.uuid)"},{"line_number":4082,"context_line":"            return"},{"line_number":4083,"context_line":""},{"line_number":4084,"context_line":"        if instance.task_state \u003d\u003d task_states.PAUSING:"},{"line_number":4085,"context_line":"            instance.power_state \u003d self._get_power_state(context, instance)"},{"line_number":4086,"context_line":"            instance.vm_state \u003d vm_states.PAUSED"},{"line_number":4087,"context_line":"            instance.task_state \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_d2d86320","line":4084,"updated":"2015-03-13 05:40:34.000000000","message":"if you allow pause an instance when the vm is doing migration, then task_state may be migrating ..right , for the situation in migrating, we just don\u0027t set the task_state to vm_state.paused\ncan we add some note here for others know it.","commit_id":"8dbdeed4aa6b7bd4ce5ed60ce77399c5a63cf2d7"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"dd2222233aea285f91eacd2f59fca6bd6c718814","unresolved":false,"context_lines":[{"line_number":4081,"context_line":"                      instance_uuid\u003dinstance.uuid)"},{"line_number":4082,"context_line":"            return"},{"line_number":4083,"context_line":""},{"line_number":4084,"context_line":"        if instance.task_state \u003d\u003d task_states.PAUSING:"},{"line_number":4085,"context_line":"            instance.power_state \u003d self._get_power_state(context, instance)"},{"line_number":4086,"context_line":"            instance.vm_state \u003d vm_states.PAUSED"},{"line_number":4087,"context_line":"            instance.task_state \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_281f906d","line":4084,"in_reply_to":"9a80dd14_d2d86320","updated":"2015-03-13 07:18:56.000000000","message":"I will add note.","commit_id":"8dbdeed4aa6b7bd4ce5ed60ce77399c5a63cf2d7"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"7f1b60be337701c8b27318fdfd90ebc6eeb84be2","unresolved":false,"context_lines":[{"line_number":4967,"context_line":"            instance, src_compute_info, dst_compute_info,"},{"line_number":4968,"context_line":"            block_migration, disk_over_commit)"},{"line_number":4969,"context_line":"        migrate_data \u003d {}"},{"line_number":4970,"context_line":""},{"line_number":4971,"context_line":"        try:"},{"line_number":4972,"context_line":"            migrate_data \u003d self.compute_rpcapi.\\"},{"line_number":4973,"context_line":"                                check_can_live_migrate_source(ctxt, instance,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_f2e1e72a","line":4970,"updated":"2015-03-13 05:40:34.000000000","message":"oppss.. please don\u0027t touch new line.","commit_id":"8dbdeed4aa6b7bd4ce5ed60ce77399c5a63cf2d7"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"af7209648442d90c31f03d04a428c786bc511441","unresolved":false,"context_lines":[{"line_number":4075,"context_line":""},{"line_number":4076,"context_line":"        try:"},{"line_number":4077,"context_line":"            self.driver.pause(instance)"},{"line_number":4078,"context_line":"        except exception.InstanceNotFound:"},{"line_number":4079,"context_line":"            LOG.debug(\u0027Instance has been moved to another host while \u0027"},{"line_number":4080,"context_line":"                      \u0027trying to PAUSE it.\u0027,"},{"line_number":4081,"context_line":"                      instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_15902542","line":4078,"updated":"2015-03-19 11:01:39.000000000","message":"This kind of seems unrelated to the fix and also even if it is - it seems like we are jumping to conclusions here with the debug message...","commit_id":"e696e7029a2ca2ed352f3ed1a8928f166af2c777"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"860c429d48deeb36dd8149666ae28e6881411e9d","unresolved":false,"context_lines":[{"line_number":4075,"context_line":""},{"line_number":4076,"context_line":"        try:"},{"line_number":4077,"context_line":"            self.driver.pause(instance)"},{"line_number":4078,"context_line":"        except exception.InstanceNotFound:"},{"line_number":4079,"context_line":"            LOG.debug(\u0027Instance has been moved to another host while \u0027"},{"line_number":4080,"context_line":"                      \u0027trying to PAUSE it.\u0027,"},{"line_number":4081,"context_line":"                      instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_2bc22ae9","line":4078,"in_reply_to":"9a80dd14_15902542","updated":"2015-03-19 11:35:43.000000000","message":"Issuing the pause is an inherently racy thing, because even if migration is not running, the guest could shutdown at any time. So even in the non-migrate case I can see us getting InstanceNotFound. Currently we propagate that back to the API layer, which is probably the right thing todo as it lets the mgmt app decide whether they need to take any action as a result of the race being hit.  So I think we don\u0027t want this catch+ignore added","commit_id":"e696e7029a2ca2ed352f3ed1a8928f166af2c777"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7dc941b0bc8dd9327a94d5ce324771202e273834","unresolved":false,"context_lines":[{"line_number":4078,"context_line":"            context, instance, \"delete_ip.end\", network_info\u003dnetwork_info)"},{"line_number":4079,"context_line":""},{"line_number":4080,"context_line":"    @wrap_exception()"},{"line_number":4081,"context_line":"    @reverts_task_state"},{"line_number":4082,"context_line":"    @wrap_instance_event"},{"line_number":4083,"context_line":"    @wrap_instance_fault"},{"line_number":4084,"context_line":"    def pause_instance(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_a501f0b0","line":4081,"updated":"2015-03-25 16:47:19.000000000","message":"this will revert task state to None if any exception happen\n\nif that\u0027s the case, will it affect the whole migration logic?","commit_id":"d69e53420df5d419cd9118b915b0a6ddc35af1d4"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"65269ed4b347ba56c0e3500d9dfe1ce00ea636c9","unresolved":false,"context_lines":[{"line_number":4078,"context_line":"            context, instance, \"delete_ip.end\", network_info\u003dnetwork_info)"},{"line_number":4079,"context_line":""},{"line_number":4080,"context_line":"    @wrap_exception()"},{"line_number":4081,"context_line":"    @reverts_task_state"},{"line_number":4082,"context_line":"    @wrap_instance_event"},{"line_number":4083,"context_line":"    @wrap_instance_fault"},{"line_number":4084,"context_line":"    def pause_instance(self, context, instance):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_c9334760","line":4081,"in_reply_to":"1a6ced46_a501f0b0","updated":"2015-03-26 10:55:36.000000000","message":"Good catch, this will affect migration logic. It should not revert task state from migrating to None.\n\nThis decorator is not useful in this case. It assumes that instance is waiting for task at the beginning, however, in this case instance\u0027s task state is migrating.\n\nFirst approach is to remove this decorator and catch exceptions inside pause_instance (and reraise them). Don\u0027t revert task state inside catch block if live migration is in progress.\n\nSecond approach is to extend reverts_task_state decorator. Actually it does not revert task state but it sets task state to None. We could say that it reverts task state but under assumption that VM can only change its task state from None to \u003csomething-else\u003e (but in this case name of this decorator is misleading).\n\nI\u0027d rather implement first approach.","commit_id":"d69e53420df5d419cd9118b915b0a6ddc35af1d4"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1a00c19b82d348cc8a032c900c45eee49b4776d4","unresolved":false,"context_lines":[{"line_number":5327,"context_line":"            # instance state to ACTIVE basing on current power state and"},{"line_number":5328,"context_line":"            # VM state"},{"line_number":5329,"context_line":"            if (instance.vm_state \u003d\u003d vm_states.PAUSED and"},{"line_number":5330,"context_line":"                        current_power_state \u003d\u003d power_state.RUNNING):"},{"line_number":5331,"context_line":"                instance.vm_state \u003d vm_states.ACTIVE"},{"line_number":5332,"context_line":"            instance.host \u003d self.host"},{"line_number":5333,"context_line":"            instance.power_state \u003d current_power_state"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_9ba7504f","line":5330,"updated":"2015-03-30 05:36:25.000000000","message":"looks like over indentation","commit_id":"d69e53420df5d419cd9118b915b0a6ddc35af1d4"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1a00c19b82d348cc8a032c900c45eee49b4776d4","unresolved":false,"context_lines":[{"line_number":2329,"context_line":"        instance.save()"},{"line_number":2330,"context_line":"        fake_notifier.NOTIFICATIONS \u003d []"},{"line_number":2331,"context_line":"        self.compute.pause_instance(self.context, instance\u003dinstance)"},{"line_number":2332,"context_line":"        self.assertEqual(len(fake_notifier.NOTIFICATIONS), 2)"},{"line_number":2333,"context_line":"        msg \u003d fake_notifier.NOTIFICATIONS[0]"},{"line_number":2334,"context_line":"        self.assertEqual(msg.event_type,"},{"line_number":2335,"context_line":"                         \u0027compute.instance.pause.start\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9b358b_3b6de404","line":2332,"updated":"2015-03-30 05:36:25.000000000","message":"expected value should be first","commit_id":"d69e53420df5d419cd9118b915b0a6ddc35af1d4"}]}
