)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d2abb1e86bc45a05aa3bd2b0e012eb008ca06482","unresolved":false,"context_lines":[{"line_number":23,"context_line":"instance task_state."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I302a3a21fd117df7edfd0c4d8a40fd0efb4c794e"},{"line_number":26,"context_line":"Closes-Bug: 1308342"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a80dd14_fca36c40","line":26,"updated":"2015-03-13 13:12:27.000000000","message":"It seems like this needs a new bug, to track the fact the original fix didn\u0027t work?","commit_id":"ec4ebf30f1208ea2b82e4525c60f1766ee0edddd"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5e4434b4b573d7a60e327d835636755e324749f4","unresolved":false,"context_lines":[{"line_number":23,"context_line":"instance task_state."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I302a3a21fd117df7edfd0c4d8a40fd0efb4c794e"},{"line_number":26,"context_line":"Closes-Bug: 1308342"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9a80dd14_727085a4","line":26,"in_reply_to":"9a80dd14_fca36c40","updated":"2015-03-13 13:34:12.000000000","message":"Hi John,\n\nAs per your suggestion, I have reported new bug for this.\n\nPlease refer, https://bugs.launchpad.net/nova/+bug/1431860","commit_id":"ec4ebf30f1208ea2b82e4525c60f1766ee0edddd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a00c985111d58c25749ff8d336dd3f5fd4f53d9d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"instance task_state."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Added new instance task_state \u0027force-deleting\u0027, which is set if"},{"line_number":26,"context_line":"instance is deleted using force_delete api."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I302a3a21fd117df7edfd0c4d8a40fd0efb4c794e"},{"line_number":29,"context_line":"Closes-Bug: 1431860"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9a1a9d01_efd42548","line":26,"updated":"2015-09-28 11:04:00.000000000","message":"You should really explain why this is being done, its here so you can ignore duplicate force delete requests, while still allowing a force delete to re-try a regular delete request.","commit_id":"2317ef284fb3c6c818246c977bcf14235b4dde29"}],"nova/compute/api.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d2abb1e86bc45a05aa3bd2b0e012eb008ca06482","unresolved":false,"context_lines":[{"line_number":1837,"context_line":"                     task_state\u003dtask_states.SOFT_DELETING,"},{"line_number":1838,"context_line":"                     deleted_at\u003dtimeutils.utcnow())"},{"line_number":1839,"context_line":""},{"line_number":1840,"context_line":"    def _delete_instance(self, context, instance, delete_type\u003d\u0027delete\u0027):"},{"line_number":1841,"context_line":"        self._delete(context, instance, delete_type, self._do_delete,"},{"line_number":1842,"context_line":"                     task_state\u003dtask_states.DELETING)"},{"line_number":1843,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_9cf8b07d","line":1840,"updated":"2015-03-13 13:12:27.000000000","message":"seems unrelated, but I guess its OK ish.","commit_id":"ec4ebf30f1208ea2b82e4525c60f1766ee0edddd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d2abb1e86bc45a05aa3bd2b0e012eb008ca06482","unresolved":false,"context_lines":[{"line_number":1885,"context_line":"    @check_instance_state(task_state\u003dNone, must_have_launched\u003dFalse)"},{"line_number":1886,"context_line":"    def force_delete(self, context, instance):"},{"line_number":1887,"context_line":"        \"\"\"Force delete an instance in any vm_state/task_state.\"\"\""},{"line_number":1888,"context_line":"        self._delete_instance(context, instance, \u0027force_delete\u0027)"},{"line_number":1889,"context_line":""},{"line_number":1890,"context_line":"    def force_stop(self, context, instance, do_cast\u003dTrue, clean_shutdown\u003dTrue):"},{"line_number":1891,"context_line":"        LOG.debug(\"Going to try to stop instance\", instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_fca60caa","line":1888,"updated":"2015-03-13 13:12:27.000000000","message":"This seems like an unrelated change, but its OK here, I suppose.","commit_id":"ec4ebf30f1208ea2b82e4525c60f1766ee0edddd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e61cb48f654989c7c75db9417df1b555ef845ea0","unresolved":false,"context_lines":[{"line_number":1882,"context_line":""},{"line_number":1883,"context_line":"    @wrap_check_policy"},{"line_number":1884,"context_line":"    @check_instance_lock"},{"line_number":1885,"context_line":"    @check_instance_state(task_state\u003dNone, must_have_launched\u003dFalse)"},{"line_number":1886,"context_line":"    def force_delete(self, context, instance):"},{"line_number":1887,"context_line":"        \"\"\"Force delete an instance in any vm_state/task_state.\"\"\""},{"line_number":1888,"context_line":"        self._delete_instance(context, instance, \u0027force_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_957c0322","line":1885,"updated":"2015-03-13 13:56:33.000000000","message":"So, this changes this method from one that we expect to use to delete soft_deleted instances to one which I can run as many times as I want, without the protections that the API service provides on other calls to try to avoid multiple submissions.\n\nOnce we merge this, I can just change my app to always delete with force_delete() and in a loop, re-deleting every second until my VM goes away. That generates extra load, and will undoubtedly end up with more spam in the logs as the later delete requests fail.","commit_id":"c719b55bd8c3fc33f73050279f63dba26b641dcf"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d1b414be990f9df957b12cee6a34df22a547e559","unresolved":false,"context_lines":[{"line_number":1871,"context_line":""},{"line_number":1872,"context_line":"    @wrap_check_policy"},{"line_number":1873,"context_line":"    @check_instance_lock"},{"line_number":1874,"context_line":"    @check_instance_state(task_state\u003dNone, must_have_launched\u003dFalse)"},{"line_number":1875,"context_line":"    def force_delete(self, context, instance):"},{"line_number":1876,"context_line":"        \"\"\"Force delete an instance in any vm_state/task_state.\"\"\""},{"line_number":1877,"context_line":"        self._delete_instance(context, instance, \u0027force_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_8b2d3497","line":1874,"updated":"2015-08-28 21:01:56.000000000","message":"It seems like this is the change you need.  I\u0027m not seeing the benefit of the rest of what\u0027s being added.","commit_id":"6030cd6be55e2b1d57fbe3dd306ba03e6fc6a39f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"bb7a7c95874de75c871cdaafe87c3791b0c60051","unresolved":false,"context_lines":[{"line_number":1871,"context_line":""},{"line_number":1872,"context_line":"    @wrap_check_policy"},{"line_number":1873,"context_line":"    @check_instance_lock"},{"line_number":1874,"context_line":"    @check_instance_state(task_state\u003dNone, must_have_launched\u003dFalse)"},{"line_number":1875,"context_line":"    def force_delete(self, context, instance):"},{"line_number":1876,"context_line":"        \"\"\"Force delete an instance in any vm_state/task_state.\"\"\""},{"line_number":1877,"context_line":"        self._delete_instance(context, instance, \u0027force_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a1a9d01_646fdc92","line":1874,"in_reply_to":"da20952f_75e09196","updated":"2015-09-28 10:32:40.000000000","message":"can we please add these details into the commit message, so the intent is clearer here, please?","commit_id":"6030cd6be55e2b1d57fbe3dd306ba03e6fc6a39f"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"1845b2762f05d7bfc96cb5ce1f513964fb16945e","unresolved":false,"context_lines":[{"line_number":1871,"context_line":""},{"line_number":1872,"context_line":"    @wrap_check_policy"},{"line_number":1873,"context_line":"    @check_instance_lock"},{"line_number":1874,"context_line":"    @check_instance_state(task_state\u003dNone, must_have_launched\u003dFalse)"},{"line_number":1875,"context_line":"    def force_delete(self, context, instance):"},{"line_number":1876,"context_line":"        \"\"\"Force delete an instance in any vm_state/task_state.\"\"\""},{"line_number":1877,"context_line":"        self._delete_instance(context, instance, \u0027force_delete\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_75e09196","line":1874,"in_reply_to":"da20952f_8b2d3497","updated":"2015-08-31 13:55:48.000000000","message":"Hi Andrew,\n\n(A) I had already done changes mentioned by you in PS #3. \n\n(B) The additional changes were added to address comment given by Dan Smith on patch set #3. \n\n[1] https://review.openstack.org/#/c/163798/3/nova/compute/api.py\n\nNote: The additional are done for following reasons:\n1) I need to add new task_state (eg. \u0027force_deleting\u0027) so that instance can be set to newly added \u0027force_deleting\u0027 task state when force-delete api is used.\n\n2) If instance gets stuck in \u0027deleting\u0027 task state, then if should be deleted using force-delete api.\n\n3) Once instance task_state is set to \u0027force_deleting\u0027, then subsequent force-delete request to instance (which is already in \u0027force_deleting\u0027 task_state) should be ignored.","commit_id":"6030cd6be55e2b1d57fbe3dd306ba03e6fc6a39f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a00c985111d58c25749ff8d336dd3f5fd4f53d9d","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                    method\u003df.__name__)"},{"line_number":183,"context_line":"            if (task_state is not None and"},{"line_number":184,"context_line":"                    instance.task_state not in task_state):"},{"line_number":185,"context_line":"                raise exception.InstanceInvalidState("},{"line_number":186,"context_line":"                    attr\u003d\u0027task_state\u0027,"},{"line_number":187,"context_line":"                    instance_uuid\u003dinstance.uuid,"},{"line_number":188,"context_line":"                    state\u003dinstance.task_state,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_6fced55b","line":185,"updated":"2015-09-28 11:04:00.000000000","message":"This bit.","commit_id":"2317ef284fb3c6c818246c977bcf14235b4dde29"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a00c985111d58c25749ff8d336dd3f5fd4f53d9d","unresolved":false,"context_lines":[{"line_number":1663,"context_line":"                if not is_local_delete:"},{"line_number":1664,"context_line":"                    if (delete_type !\u003d \u0027force_delete\u0027"},{"line_number":1665,"context_line":"                        and original_task_state in ("},{"line_number":1666,"context_line":"                            task_states.DELETING, task_states.SOFT_DELETING)):"},{"line_number":1667,"context_line":"                        LOG.info(_LI(\u0027Instance is already in deleting state, \u0027"},{"line_number":1668,"context_line":"                                     \u0027ignoring this request\u0027),"},{"line_number":1669,"context_line":"                                 instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_6fa01591","line":1666,"updated":"2015-09-28 11:04:00.000000000","message":"should you not also protect against the force deletes here too, please? I am guessing this is a guard for a race condition, but I am not totally sure.","commit_id":"2317ef284fb3c6c818246c977bcf14235b4dde29"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a00c985111d58c25749ff8d336dd3f5fd4f53d9d","unresolved":false,"context_lines":[{"line_number":1943,"context_line":"    @check_instance_lock"},{"line_number":1944,"context_line":"    @check_instance_state(task_state\u003dNone, must_have_launched\u003dFalse)"},{"line_number":1945,"context_line":"    def force_delete(self, context, instance):"},{"line_number":1946,"context_line":"        \"\"\"Force delete an instance in any vm_state/task_state.\"\"\""},{"line_number":1947,"context_line":"        self._delete(context, instance, \u0027force_delete\u0027, self._do_force_delete,"},{"line_number":1948,"context_line":"                     task_state\u003dtask_states.FORCE_DELETING)"},{"line_number":1949,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_af02ad6d","line":1946,"updated":"2015-09-28 11:04:00.000000000","message":"really I think you need the instance_state check to stop duplicate force requests going here, so its clearly only for the force_delete case.\n\nit feels to me like it should rase the exception.InstanceInvalidState error, to match @check_instance_state, rather than being a silent error.","commit_id":"2317ef284fb3c6c818246c977bcf14235b4dde29"}],"nova/compute/task_states.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a00c985111d58c25749ff8d336dd3f5fd4f53d9d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"SOFT_DELETING \u003d \u0027soft-deleting\u0027"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"# possible task states during force_delete()"},{"line_number":103,"context_line":"FORCE_DELETING \u003d \u0027force-deleting\u0027"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"# possible task states during restore()"},{"line_number":106,"context_line":"RESTORING \u003d \u0027restoring\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_6f9335a4","line":103,"updated":"2015-09-28 11:04:00.000000000","message":"We need to hide this detail from the user, see how this is done for reboot_pending, or example:\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/common.py#L72","commit_id":"2317ef284fb3c6c818246c977bcf14235b4dde29"}]}
