)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a82a0bc54bb3a90fadee4bc1d0c02be326f65da1","unresolved":false,"context_lines":[{"line_number":11,"context_line":"I195082e82b092a9694a20111de50b12b60b4a58a"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"But there is a periodic task _poll_shelved_instances"},{"line_number":14,"context_line":"which periodicly scan instances in SHELVED stat and"},{"line_number":15,"context_line":"put them into SHELVED_OFFLOADED. The current logic"},{"line_number":16,"context_line":"in this method called shelve_offload_instance() which"},{"line_number":17,"context_line":"we are going to add a wrap_instance_event decorator,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ff82abbf_09236ac0","line":14,"range":{"start_line":14,"start_character":43,"end_line":14,"end_character":47},"updated":"2017-11-30 15:30:46.000000000","message":"state","commit_id":"c9668ccaebc6ecbcb6e75e719c0c95549e137ace"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a82a0bc54bb3a90fadee4bc1d0c02be326f65da1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"failures."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This patch modify _poll_shelved_instances periodic task"},{"line_number":23,"context_line":"call _shelve_offload_instances() instead of the to-level"},{"line_number":24,"context_line":"method to avoid the failure."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Iec314886cf41474bf0786e8604c9687dbe9e57a0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ff82abbf_c92ca2ae","line":23,"range":{"start_line":23,"start_character":48,"end_line":23,"end_character":50},"updated":"2017-11-30 15:30:46.000000000","message":"top","commit_id":"c9668ccaebc6ecbcb6e75e719c0c95549e137ace"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"365ca48b78dbd14622e799c167e8c65000a36505","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"But there is a periodic task _poll_shelved_instances"},{"line_number":14,"context_line":"which periodicly scan instances in SHELVED state and"},{"line_number":15,"context_line":"put them into SHELVED_OFFLOADED. The current logic"},{"line_number":16,"context_line":"in this method called shelve_offload_instance() which"},{"line_number":17,"context_line":"we are going to add a wrap_instance_event decorator,"},{"line_number":18,"context_line":"in which context.request_id is required. But context in"},{"line_number":19,"context_line":"periodic task doesn\u0027t have request_id. This will cause"},{"line_number":20,"context_line":"failures."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This patch modify _poll_shelved_instances periodic task"},{"line_number":23,"context_line":"call _shelve_offload_instances() instead of the top-level"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"df87a7cf_51f020ca","line":20,"range":{"start_line":15,"start_character":33,"end_line":20,"end_character":9},"updated":"2017-12-04 06:26:40.000000000","message":"this makes me think you plan to remove \nwrap_instance_event instead of revert_task_state...","commit_id":"014b44e47325a296d063740c09bb727922f598a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"da6701f1931f4cf8b65ae2cb07198406f1259ec7","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"But there is a periodic task _poll_shelved_instances"},{"line_number":14,"context_line":"which periodicly scan instances in SHELVED state and"},{"line_number":15,"context_line":"put them into SHELVED_OFFLOADED. The current logic"},{"line_number":16,"context_line":"in this method called shelve_offload_instance() which"},{"line_number":17,"context_line":"we are going to add a wrap_instance_event decorator,"},{"line_number":18,"context_line":"in which context.request_id is required. But context in"},{"line_number":19,"context_line":"periodic task doesn\u0027t have request_id. This will cause"},{"line_number":20,"context_line":"failures."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"This patch modify _poll_shelved_instances periodic task"},{"line_number":23,"context_line":"call _shelve_offload_instances() instead of the top-level"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"df87a7cf_6a4f54bd","line":20,"range":{"start_line":15,"start_character":33,"end_line":20,"end_character":9},"in_reply_to":"df87a7cf_51f020ca","updated":"2017-12-04 21:22:46.000000000","message":"No, see the next patch in the series. He\u0027s adding the wrap_instance_event decorator to the top-level ComputeManager.shelve_offload_instance method, and the wrap_instance_event decorator calls EventReporter and that\u0027s going to look up an instance action record by the request_id in the context, which we won\u0027t have if we call ComputeManager.shelve_offload_instance from a periodic task, so he\u0027s making that an inline call in the periodic task to the private _shelve_offload_instance method.","commit_id":"014b44e47325a296d063740c09bb727922f598a1"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a82a0bc54bb3a90fadee4bc1d0c02be326f65da1","unresolved":false,"context_lines":[{"line_number":6606,"context_line":"                to_gc.append(instance)"},{"line_number":6607,"context_line":""},{"line_number":6608,"context_line":"        @wrap_exception()"},{"line_number":6609,"context_line":"        @reverts_task_state"},{"line_number":6610,"context_line":"        @wrap_instance_fault"},{"line_number":6611,"context_line":"        def shelve_offload_instance(context, instance):"},{"line_number":6612,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ff82abbf_8cfd480a","line":6609,"range":{"start_line":6609,"start_character":9,"end_line":6609,"end_character":27},"updated":"2017-11-30 15:30:46.000000000","message":"We shouldn\u0027t have this. L6595 above ensures we don\u0027t run this on instances that are undergoing some task state transition.","commit_id":"c9668ccaebc6ecbcb6e75e719c0c95549e137ace"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ad628d5cf9856fae8d68c6bffb7a78eac4cc7899","unresolved":false,"context_lines":[{"line_number":6606,"context_line":"                to_gc.append(instance)"},{"line_number":6607,"context_line":""},{"line_number":6608,"context_line":"        @wrap_exception()"},{"line_number":6609,"context_line":"        @reverts_task_state"},{"line_number":6610,"context_line":"        @wrap_instance_fault"},{"line_number":6611,"context_line":"        def shelve_offload_instance(context, instance):"},{"line_number":6612,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ff82abbf_17761540","line":6609,"range":{"start_line":6609,"start_character":9,"end_line":6609,"end_character":27},"in_reply_to":"ff82abbf_8cfd480a","updated":"2017-12-04 01:26:44.000000000","message":"Done","commit_id":"c9668ccaebc6ecbcb6e75e719c0c95549e137ace"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a82a0bc54bb3a90fadee4bc1d0c02be326f65da1","unresolved":false,"context_lines":[{"line_number":6608,"context_line":"        @wrap_exception()"},{"line_number":6609,"context_line":"        @reverts_task_state"},{"line_number":6610,"context_line":"        @wrap_instance_fault"},{"line_number":6611,"context_line":"        def shelve_offload_instance(context, instance):"},{"line_number":6612,"context_line":""},{"line_number":6613,"context_line":"            @utils.synchronized(instance.uuid)"},{"line_number":6614,"context_line":"            def do_shelve_offload_instance():"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff82abbf_4c07401a","line":6611,"updated":"2017-11-30 15:30:46.000000000","message":"We should have a comment in here about why we have to do this here rather than just calling the top-level shelve_offload_instance method (it\u0027s because of the wrap_instance_event decorator).","commit_id":"c9668ccaebc6ecbcb6e75e719c0c95549e137ace"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ad628d5cf9856fae8d68c6bffb7a78eac4cc7899","unresolved":false,"context_lines":[{"line_number":6608,"context_line":"        @wrap_exception()"},{"line_number":6609,"context_line":"        @reverts_task_state"},{"line_number":6610,"context_line":"        @wrap_instance_fault"},{"line_number":6611,"context_line":"        def shelve_offload_instance(context, instance):"},{"line_number":6612,"context_line":""},{"line_number":6613,"context_line":"            @utils.synchronized(instance.uuid)"},{"line_number":6614,"context_line":"            def do_shelve_offload_instance():"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff82abbf_7779a12d","line":6611,"in_reply_to":"ff82abbf_4c07401a","updated":"2017-12-04 01:26:44.000000000","message":"Done","commit_id":"c9668ccaebc6ecbcb6e75e719c0c95549e137ace"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a82a0bc54bb3a90fadee4bc1d0c02be326f65da1","unresolved":false,"context_lines":[{"line_number":6610,"context_line":"        @wrap_instance_fault"},{"line_number":6611,"context_line":"        def shelve_offload_instance(context, instance):"},{"line_number":6612,"context_line":""},{"line_number":6613,"context_line":"            @utils.synchronized(instance.uuid)"},{"line_number":6614,"context_line":"            def do_shelve_offload_instance():"},{"line_number":6615,"context_line":"                self._shelve_offload_instance(context, instance,"},{"line_number":6616,"context_line":"                                              clean_shutdown\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff82abbf_cc1a706e","line":6613,"updated":"2017-11-30 15:30:46.000000000","message":"Given we aren\u0027t getting instances undergoing a task state transition, I\u0027m not sure how much we actually care about the lock here, but it\u0027s probably OK to have.","commit_id":"c9668ccaebc6ecbcb6e75e719c0c95549e137ace"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ead5fcc9d17f9f76eb08cc67462784785d4ae718","unresolved":false,"context_lines":[{"line_number":6619,"context_line":"            try:"},{"line_number":6620,"context_line":"                instance.task_state \u003d task_states.SHELVING_OFFLOADING"},{"line_number":6621,"context_line":"                instance.save(expected_task_state\u003d(None,))"},{"line_number":6622,"context_line":"                # NOTE(Kevin Zheng): We are going to record instance"},{"line_number":6623,"context_line":"                # action event using wrap_instance_event decorator in"},{"line_number":6624,"context_line":"                # https://review.openstack.org/#/c/523653/ and this"},{"line_number":6625,"context_line":"                # decorator requires context.request_id, but when"},{"line_number":6626,"context_line":"                # calling it from a periodic task, the context will"},{"line_number":6627,"context_line":"                # not include request_id field. So call"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_a713730d","line":6624,"range":{"start_line":6622,"start_character":37,"end_line":6624,"end_character":58},"updated":"2017-12-03 17:01:30.000000000","message":"We shouldn\u0027t mention something we are going to do and link to a review in code comments, because once that thing we are going to do happens, this comment is stale and confusing. Instead, maybe just say something like:\n\n\"We use the _shelve_offfload_instance method to avoid issues with instance actions/events since the context used in this periodic task will not have a valid request ID. The inner method used here uses the same exception and fault handlers and locking scheme as the top-level shelve_offload_instance method.\"","commit_id":"cc870e6b8497037e1bdde1c669de0b239b7d7e92"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"8a37eec53badea39d3981a3c8e8c291009f062f5","unresolved":false,"context_lines":[{"line_number":6619,"context_line":"            try:"},{"line_number":6620,"context_line":"                instance.task_state \u003d task_states.SHELVING_OFFLOADING"},{"line_number":6621,"context_line":"                instance.save(expected_task_state\u003d(None,))"},{"line_number":6622,"context_line":"                # NOTE(Kevin Zheng): We are going to record instance"},{"line_number":6623,"context_line":"                # action event using wrap_instance_event decorator in"},{"line_number":6624,"context_line":"                # https://review.openstack.org/#/c/523653/ and this"},{"line_number":6625,"context_line":"                # decorator requires context.request_id, but when"},{"line_number":6626,"context_line":"                # calling it from a periodic task, the context will"},{"line_number":6627,"context_line":"                # not include request_id field. So call"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_bd9e2305","line":6624,"range":{"start_line":6622,"start_character":37,"end_line":6624,"end_character":58},"in_reply_to":"df87a7cf_a713730d","updated":"2017-12-04 06:21:55.000000000","message":"\u003e We shouldn\u0027t mention something we are going to do and link to a\n \u003e review in code comments, because once that thing we are going to do\n \u003e happens, this comment is stale and confusing. Instead, maybe just\n \u003e say something like:\n \u003e \n \u003e \"We use the _shelve_offfload_instance method to avoid issues with\n \u003e instance actions/events since the context used in this periodic\n \u003e task will not have a valid request ID. The inner method used here\n \u003e uses the same exception and fault handlers and locking scheme as\n \u003e the top-level shelve_offload_instance method.\"","commit_id":"cc870e6b8497037e1bdde1c669de0b239b7d7e92"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ad628d5cf9856fae8d68c6bffb7a78eac4cc7899","unresolved":false,"context_lines":[{"line_number":6619,"context_line":"            try:"},{"line_number":6620,"context_line":"                instance.task_state \u003d task_states.SHELVING_OFFLOADING"},{"line_number":6621,"context_line":"                instance.save(expected_task_state\u003d(None,))"},{"line_number":6622,"context_line":"                # NOTE(Kevin Zheng): We are going to record instance"},{"line_number":6623,"context_line":"                # action event using wrap_instance_event decorator in"},{"line_number":6624,"context_line":"                # https://review.openstack.org/#/c/523653/ and this"},{"line_number":6625,"context_line":"                # decorator requires context.request_id, but when"},{"line_number":6626,"context_line":"                # calling it from a periodic task, the context will"},{"line_number":6627,"context_line":"                # not include request_id field. So call"}],"source_content_type":"text/x-python","patch_set":4,"id":"df87a7cf_bd270365","line":6624,"range":{"start_line":6622,"start_character":37,"end_line":6624,"end_character":58},"in_reply_to":"df87a7cf_a713730d","updated":"2017-12-04 01:26:44.000000000","message":"Done","commit_id":"cc870e6b8497037e1bdde1c669de0b239b7d7e92"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"da6701f1931f4cf8b65ae2cb07198406f1259ec7","unresolved":false,"context_lines":[{"line_number":4675,"context_line":"        # though."},{"line_number":4676,"context_line":"        instance.vm_state \u003d vm_states.SHELVED_OFFLOADED"},{"line_number":4677,"context_line":"        instance.task_state \u003d None"},{"line_number":4678,"context_line":"        instance.save(expected_task_state\u003d[task_states.SHELVING,"},{"line_number":4679,"context_line":"                                           task_states.SHELVING_OFFLOADING])"},{"line_number":4680,"context_line":""},{"line_number":4681,"context_line":"        # NOTE(ndipanov): Free resources from the resource tracker"},{"line_number":4682,"context_line":"        self._update_resource_tracker(context, instance)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_4a9a9014","line":4679,"range":{"start_line":4678,"start_character":8,"end_line":4679,"end_character":76},"updated":"2017-12-04 21:22:46.000000000","message":"Hmm, how does this ever work if called from the periodic task?","commit_id":"014b44e47325a296d063740c09bb727922f598a1"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"3056625ebea6d0c5f37819418c0611c9b181be0f","unresolved":false,"context_lines":[{"line_number":6606,"context_line":"                to_gc.append(instance)"},{"line_number":6607,"context_line":""},{"line_number":6608,"context_line":"        @wrap_exception()"},{"line_number":6609,"context_line":"        @wrap_instance_fault"},{"line_number":6610,"context_line":"        def shelve_offload_instance(context, instance):"},{"line_number":6611,"context_line":""},{"line_number":6612,"context_line":"            @utils.synchronized(instance.uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_03956ee4","line":6609,"range":{"start_line":6609,"start_character":9,"end_line":6609,"end_character":28},"updated":"2017-12-04 04:40:34.000000000","message":"I think you want to make it reverts_task_state from commit msg?","commit_id":"014b44e47325a296d063740c09bb727922f598a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"da6701f1931f4cf8b65ae2cb07198406f1259ec7","unresolved":false,"context_lines":[{"line_number":6606,"context_line":"                to_gc.append(instance)"},{"line_number":6607,"context_line":""},{"line_number":6608,"context_line":"        @wrap_exception()"},{"line_number":6609,"context_line":"        @wrap_instance_fault"},{"line_number":6610,"context_line":"        def shelve_offload_instance(context, instance):"},{"line_number":6611,"context_line":""},{"line_number":6612,"context_line":"            @utils.synchronized(instance.uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_2af06c67","line":6609,"range":{"start_line":6609,"start_character":9,"end_line":6609,"end_character":28},"in_reply_to":"df87a7cf_03956ee4","updated":"2017-12-04 21:22:46.000000000","message":"No. See above in this method where we pull the instances from the database - they don\u0027t have a task_state set, so there is nothing to revert.","commit_id":"014b44e47325a296d063740c09bb727922f598a1"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"74f9c389e25f56a871e73987985af871e345b688","unresolved":false,"context_lines":[{"line_number":6606,"context_line":"                to_gc.append(instance)"},{"line_number":6607,"context_line":""},{"line_number":6608,"context_line":"        @wrap_exception()"},{"line_number":6609,"context_line":"        @wrap_instance_fault"},{"line_number":6610,"context_line":"        def shelve_offload_instance(context, instance):"},{"line_number":6611,"context_line":""},{"line_number":6612,"context_line":"            @utils.synchronized(instance.uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_58657ce0","line":6609,"range":{"start_line":6609,"start_character":9,"end_line":6609,"end_character":28},"in_reply_to":"df87a7cf_2af06c67","updated":"2017-12-05 10:03:58.000000000","message":"I am curious because I think revert_task_state should be added as we might encounter some temp state as you indicated at 6620-6621 below..","commit_id":"014b44e47325a296d063740c09bb727922f598a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e878ef37778a3632a193a085e4bfe28a1334d406","unresolved":false,"context_lines":[{"line_number":6617,"context_line":""},{"line_number":6618,"context_line":"        for instance in to_gc:"},{"line_number":6619,"context_line":"            try:"},{"line_number":6620,"context_line":"                instance.task_state \u003d task_states.SHELVING_OFFLOADING"},{"line_number":6621,"context_line":"                instance.save(expected_task_state\u003d(None,))"},{"line_number":6622,"context_line":"                # NOTE(Kevin Zheng): We use the _shelve_offfload_instance"},{"line_number":6623,"context_line":"                # method to avoid issues with instance actions/events since"},{"line_number":6624,"context_line":"                # the context used in this periodic task will not have a"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_6a599458","line":6621,"range":{"start_line":6620,"start_character":16,"end_line":6621,"end_character":58},"updated":"2017-12-04 21:26:53.000000000","message":"Oh I missed this, I guess we do need @reverts_task_state on the inner method.","commit_id":"014b44e47325a296d063740c09bb727922f598a1"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e2deb0dc2d57fdee336734d74cbc1537f8649487","unresolved":false,"context_lines":[{"line_number":6617,"context_line":""},{"line_number":6618,"context_line":"        for instance in to_gc:"},{"line_number":6619,"context_line":"            try:"},{"line_number":6620,"context_line":"                instance.task_state \u003d task_states.SHELVING_OFFLOADING"},{"line_number":6621,"context_line":"                instance.save(expected_task_state\u003d(None,))"},{"line_number":6622,"context_line":"                # NOTE(Kevin Zheng): We use the _shelve_offfload_instance"},{"line_number":6623,"context_line":"                # method to avoid issues with instance actions/events since"},{"line_number":6624,"context_line":"                # the context used in this periodic task will not have a"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_1e2b6aeb","line":6621,"range":{"start_line":6620,"start_character":16,"end_line":6621,"end_character":58},"in_reply_to":"df87a7cf_6a599458","updated":"2017-12-05 00:40:18.000000000","message":"Done","commit_id":"014b44e47325a296d063740c09bb727922f598a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8f23dca80c7a80378cafe90395453d03b897034b","unresolved":false,"context_lines":[{"line_number":6625,"context_line":"                # valid request ID. The inner method used here uses the same"},{"line_number":6626,"context_line":"                # exception and fault handlers and locking scheme as the"},{"line_number":6627,"context_line":"                # top-level shelve_offload_instance method"},{"line_number":6628,"context_line":"                shelve_offload_instance(context, instance)"},{"line_number":6629,"context_line":"            except Exception:"},{"line_number":6630,"context_line":"                LOG.exception(\u0027Periodic task failed to offload instance.\u0027,"},{"line_number":6631,"context_line":"                              instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_7c02a70b","line":6628,"range":{"start_line":6628,"start_character":49,"end_line":6628,"end_character":57},"updated":"2017-12-05 17:44:01.000000000","message":"We have to pass instance as a kwarg otherwise the @wrap_exception decorator doesn\u0027t find the instance.\n\nTraceback (most recent call last):\n      File \"nova/compute/manager.py\", line 6635, in _poll_shelved_instances\n        shelve_offload_instance(context, instance)\n      File \"nova/exception_wrapper.py\", line 76, in wrapped\n        function_name, call_dict, binary)\n      File \"/home/user/git/nova/.tox/py27/local/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 220, in __exit__\n        self.force_reraise()\n      File \"/home/user/git/nova/.tox/py27/local/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 196, in force_reraise\n        six.reraise(self.type_, self.value, self.tb)\n      File \"nova/exception_wrapper.py\", line 67, in wrapped\n        return f(self, context, *args, **kw)\n      File \"nova/compute/manager.py\", line 187, in decorated_function\n        \"Error: %s\", e, instance\u003dinstance)\n      File \"/home/user/git/nova/.tox/py27/local/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 220, in __exit__\n        self.force_reraise()\n      File \"/home/user/git/nova/.tox/py27/local/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 196, in force_reraise\n        six.reraise(self.type_, self.value, self.tb)\n      File \"nova/compute/manager.py\", line 157, in decorated_function\n        return function(self, context, *args, **kwargs)\n      File \"nova/compute/manager.py\", line 215, in decorated_function\n        kwargs[\u0027instance\u0027], e, sys.exc_info())\n    KeyError: \u0027instance\u0027","commit_id":"014b44e47325a296d063740c09bb727922f598a1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bdade6bd12bbe2dc9f2e72317d72ec6bc7917759","unresolved":false,"context_lines":[{"line_number":6606,"context_line":"                to_gc.append(instance)"},{"line_number":6607,"context_line":""},{"line_number":6608,"context_line":"        @wrap_exception()"},{"line_number":6609,"context_line":"        @reverts_task_state"},{"line_number":6610,"context_line":"        @wrap_instance_fault"},{"line_number":6611,"context_line":"        def shelve_offload_instance(context, instance):"},{"line_number":6612,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_194ce49c","line":6609,"updated":"2017-12-05 01:46:27.000000000","message":"We obviously don\u0027t have any testing to make sure this decorator is here, that would be a good assertion to make in the tests if this fails, but could be done in a follow up.","commit_id":"53f9aad756974821ee6e90e8480e6b567192b056"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bdade6bd12bbe2dc9f2e72317d72ec6bc7917759","unresolved":false,"context_lines":[{"line_number":6620,"context_line":"            try:"},{"line_number":6621,"context_line":"                instance.task_state \u003d task_states.SHELVING_OFFLOADING"},{"line_number":6622,"context_line":"                instance.save(expected_task_state\u003d(None,))"},{"line_number":6623,"context_line":"                # NOTE(Kevin Zheng): We use the _shelve_offfload_instance"},{"line_number":6624,"context_line":"                # method to avoid issues with instance actions/events since"},{"line_number":6625,"context_line":"                # the context used in this periodic task will not have a"},{"line_number":6626,"context_line":"                # valid request ID. The inner method used here uses the same"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_59802c8c","line":6623,"range":{"start_line":6623,"start_character":59,"end_line":6623,"end_character":60},"updated":"2017-12-05 01:46:27.000000000","message":"One too many fffffffffffffffffs.","commit_id":"53f9aad756974821ee6e90e8480e6b567192b056"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d1eaac16f3235c172feac79024bbd23c8618ae0d","unresolved":false,"context_lines":[{"line_number":6612,"context_line":""},{"line_number":6613,"context_line":"            @utils.synchronized(instance.uuid)"},{"line_number":6614,"context_line":"            def do_shelve_offload_instance():"},{"line_number":6615,"context_line":"                self._shelve_offload_instance(context, instance,"},{"line_number":6616,"context_line":"                                              clean_shutdown\u003dFalse)"},{"line_number":6617,"context_line":"            do_shelve_offload_instance()"},{"line_number":6618,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_5907cc1d","line":6615,"range":{"start_line":6615,"start_character":21,"end_line":6615,"end_character":45},"updated":"2017-12-05 01:50:41.000000000","message":"While we\u0027re making this change, can you add a test which raises an exception from this call (mock out this method in the test to raise an exception), and assert that the instance.task_state is reverted to None.","commit_id":"ec2078e8da30eea84f8fc77093e8eed5da0f60a0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"671d9a3dc5de2371284d7ccaa612816b2cda3d84","unresolved":false,"context_lines":[{"line_number":6612,"context_line":""},{"line_number":6613,"context_line":"            @utils.synchronized(instance.uuid)"},{"line_number":6614,"context_line":"            def do_shelve_offload_instance():"},{"line_number":6615,"context_line":"                self._shelve_offload_instance(context, instance,"},{"line_number":6616,"context_line":"                                              clean_shutdown\u003dFalse)"},{"line_number":6617,"context_line":"            do_shelve_offload_instance()"},{"line_number":6618,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_d902fbb4","line":6615,"range":{"start_line":6615,"start_character":21,"end_line":6615,"end_character":45},"in_reply_to":"df87a7cf_5907cc1d","updated":"2017-12-05 02:11:53.000000000","message":"Done","commit_id":"ec2078e8da30eea84f8fc77093e8eed5da0f60a0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7036f40091adefa1427c93a659c96e6666e766fd","unresolved":false,"context_lines":[{"line_number":6626,"context_line":"                # valid request ID. The inner method used here uses the same"},{"line_number":6627,"context_line":"                # exception and fault handlers and locking scheme as the"},{"line_number":6628,"context_line":"                # top-level shelve_offload_instance method"},{"line_number":6629,"context_line":"                shelve_offload_instance(context, instance)"},{"line_number":6630,"context_line":"            except Exception:"},{"line_number":6631,"context_line":"                LOG.exception(\u0027Periodic task failed to offload instance.\u0027,"},{"line_number":6632,"context_line":"                              instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_bc17cf45","line":6629,"range":{"start_line":6629,"start_character":49,"end_line":6629,"end_character":57},"updated":"2017-12-05 17:44:27.000000000","message":"We have to pass instance as a kwarg otherwise @wrap_exception() can\u0027t find it:\n\nTraceback (most recent call last):\n      File \"nova/compute/manager.py\", line 6635, in _poll_shelved_instances\n        shelve_offload_instance(context, instance)\n      File \"nova/exception_wrapper.py\", line 76, in wrapped\n        function_name, call_dict, binary)\n      File \"/home/user/git/nova/.tox/py27/local/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 220, in __exit__\n        self.force_reraise()\n      File \"/home/user/git/nova/.tox/py27/local/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 196, in force_reraise\n        six.reraise(self.type_, self.value, self.tb)\n      File \"nova/exception_wrapper.py\", line 67, in wrapped\n        return f(self, context, *args, **kw)\n      File \"nova/compute/manager.py\", line 187, in decorated_function\n        \"Error: %s\", e, instance\u003dinstance)\n      File \"/home/user/git/nova/.tox/py27/local/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 220, in __exit__\n        self.force_reraise()\n      File \"/home/user/git/nova/.tox/py27/local/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 196, in force_reraise\n        six.reraise(self.type_, self.value, self.tb)\n      File \"nova/compute/manager.py\", line 157, in decorated_function\n        return function(self, context, *args, **kwargs)\n      File \"nova/compute/manager.py\", line 215, in decorated_function\n        kwargs[\u0027instance\u0027], e, sys.exc_info())\n    KeyError: \u0027instance\u0027","commit_id":"dfb370b5f6dffeb75496a25a4e3895bb89fb9186"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"117cb7e08e6f22e9dc7dab015af1e9be14fbd79f","unresolved":false,"context_lines":[{"line_number":6626,"context_line":"                # valid request ID. The inner method used here uses the same"},{"line_number":6627,"context_line":"                # exception and fault handlers and locking scheme as the"},{"line_number":6628,"context_line":"                # top-level shelve_offload_instance method"},{"line_number":6629,"context_line":"                shelve_offload_instance(context, instance)"},{"line_number":6630,"context_line":"            except Exception:"},{"line_number":6631,"context_line":"                LOG.exception(\u0027Periodic task failed to offload instance.\u0027,"},{"line_number":6632,"context_line":"                              instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_9c352bdd","line":6629,"range":{"start_line":6629,"start_character":49,"end_line":6629,"end_character":57},"in_reply_to":"df87a7cf_bc17cf45","updated":"2017-12-05 17:45:35.000000000","message":"I mean wrap_instance_fault.","commit_id":"dfb370b5f6dffeb75496a25a4e3895bb89fb9186"}],"nova/tests/unit/compute/test_shelve.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e09eadadbe31a85a6ed6c6415840e3b411403a12","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        sys_meta[\u0027shelved_at\u0027] \u003d shelved_time.isoformat()"},{"line_number":483,"context_line":"        instance.save()"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        with mock.patch.object(self.compute, \u0027shelve_offload_instance\u0027) as soi:"},{"line_number":486,"context_line":"            self.compute._poll_shelved_instances(self.context)"},{"line_number":487,"context_line":"            self.assertFalse(soi.called)"},{"line_number":488,"context_line":"            self.assertTrue(mock_older.called)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_d913dc65","line":485,"range":{"start_line":485,"start_character":46,"end_line":485,"end_character":69},"updated":"2017-12-05 01:49:02.000000000","message":"This is probably wrong, should be _shelve_offload_instance yes?","commit_id":"ec2078e8da30eea84f8fc77093e8eed5da0f60a0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"671d9a3dc5de2371284d7ccaa612816b2cda3d84","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        sys_meta[\u0027shelved_at\u0027] \u003d shelved_time.isoformat()"},{"line_number":483,"context_line":"        instance.save()"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"        with mock.patch.object(self.compute, \u0027shelve_offload_instance\u0027) as soi:"},{"line_number":486,"context_line":"            self.compute._poll_shelved_instances(self.context)"},{"line_number":487,"context_line":"            self.assertFalse(soi.called)"},{"line_number":488,"context_line":"            self.assertTrue(mock_older.called)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_792baf2f","line":485,"range":{"start_line":485,"start_character":46,"end_line":485,"end_character":69},"in_reply_to":"df87a7cf_d913dc65","updated":"2017-12-05 02:11:53.000000000","message":"Done","commit_id":"ec2078e8da30eea84f8fc77093e8eed5da0f60a0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e09eadadbe31a85a6ed6c6415840e3b411403a12","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"        mock_parse.side_effect \u003d fake_parse_hook"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        with mock.patch.object(self.compute, \u0027shelve_offload_instance\u0027) as soi:"},{"line_number":565,"context_line":"            self.compute._poll_shelved_instances(self.context)"},{"line_number":566,"context_line":"            self.assertFalse(soi.called)"},{"line_number":567,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_191aa47c","line":564,"range":{"start_line":564,"start_character":46,"end_line":564,"end_character":69},"updated":"2017-12-05 01:49:02.000000000","message":"This should probably be _shelve_offload_instance correct? This only passes because it\u0027s not expecting to call the top-level method anyway.","commit_id":"ec2078e8da30eea84f8fc77093e8eed5da0f60a0"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"671d9a3dc5de2371284d7ccaa612816b2cda3d84","unresolved":false,"context_lines":[{"line_number":561,"context_line":""},{"line_number":562,"context_line":"        mock_parse.side_effect \u003d fake_parse_hook"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        with mock.patch.object(self.compute, \u0027shelve_offload_instance\u0027) as soi:"},{"line_number":565,"context_line":"            self.compute._poll_shelved_instances(self.context)"},{"line_number":566,"context_line":"            self.assertFalse(soi.called)"},{"line_number":567,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_59282b33","line":564,"range":{"start_line":564,"start_character":46,"end_line":564,"end_character":69},"in_reply_to":"df87a7cf_191aa47c","updated":"2017-12-05 02:11:53.000000000","message":"Done","commit_id":"ec2078e8da30eea84f8fc77093e8eed5da0f60a0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"baa5a5d85680201d2a18f3b69aea3cb59387b003","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        instance.system_metadata \u003d {\u0027shelved_at\u0027: \u0027\u0027}"},{"line_number":582,"context_line":"        instance.save()"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        def fake_soi(instance):"},{"line_number":585,"context_line":"            raise exception.InstanceNotFound(instance.uuid)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        with mock.patch.object(self.compute,"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_c11c2cc3","line":584,"range":{"start_line":584,"start_character":21,"end_line":584,"end_character":29},"updated":"2017-12-05 17:32:14.000000000","message":"This is the wrong method signature.","commit_id":"dfb370b5f6dffeb75496a25a4e3895bb89fb9186"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5c1842c26ee66abdac994ed7b55821e4ef2b8f56","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        instance.system_metadata \u003d {\u0027shelved_at\u0027: \u0027\u0027}"},{"line_number":582,"context_line":"        instance.save()"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        def fake_soi(instance):"},{"line_number":585,"context_line":"            raise exception.InstanceNotFound(instance.uuid)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        with mock.patch.object(self.compute,"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_16001c67","line":584,"updated":"2017-12-05 16:51:28.000000000","message":"We don\u0027t really need a fake method to raise an exception from a mock, just do:\n\nwith mock.patch.object(self.compute,\n                       \u0027_shelve_offload_instance\u0027,\n                       side_effect\u003dexception.InstanceNotFound(instance.uuid)) as soi:\n    ...","commit_id":"dfb370b5f6dffeb75496a25a4e3895bb89fb9186"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5c1842c26ee66abdac994ed7b55821e4ef2b8f56","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        instance.save()"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        def fake_soi(instance):"},{"line_number":585,"context_line":"            raise exception.InstanceNotFound(instance.uuid)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        with mock.patch.object(self.compute,"},{"line_number":588,"context_line":"                               \u0027_shelve_offload_instance\u0027) as soi:"}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_b6c0502c","line":585,"range":{"start_line":585,"start_character":28,"end_line":585,"end_character":44},"updated":"2017-12-05 16:51:28.000000000","message":"This should use the instance_id\u003dinstance.uuid kwarg.","commit_id":"dfb370b5f6dffeb75496a25a4e3895bb89fb9186"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5c1842c26ee66abdac994ed7b55821e4ef2b8f56","unresolved":false,"context_lines":[{"line_number":588,"context_line":"                               \u0027_shelve_offload_instance\u0027) as soi:"},{"line_number":589,"context_line":"            soi.side_effect \u003d fake_soi"},{"line_number":590,"context_line":"            self.compute._poll_shelved_instances(self.context)"},{"line_number":591,"context_line":"            self.assertTrue(soi.called)"},{"line_number":592,"context_line":"            self.assertIsNone(instance.task_state)"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_b6ee10b2","line":591,"range":{"start_line":591,"start_character":12,"end_line":591,"end_character":39},"updated":"2017-12-05 16:51:28.000000000","message":"soi.assert_called_once_with(...)","commit_id":"dfb370b5f6dffeb75496a25a4e3895bb89fb9186"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"baa5a5d85680201d2a18f3b69aea3cb59387b003","unresolved":false,"context_lines":[{"line_number":588,"context_line":"                               \u0027_shelve_offload_instance\u0027) as soi:"},{"line_number":589,"context_line":"            soi.side_effect \u003d fake_soi"},{"line_number":590,"context_line":"            self.compute._poll_shelved_instances(self.context)"},{"line_number":591,"context_line":"            self.assertTrue(soi.called)"},{"line_number":592,"context_line":"            self.assertIsNone(instance.task_state)"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df87a7cf_0123f406","line":591,"range":{"start_line":591,"start_character":12,"end_line":591,"end_character":39},"in_reply_to":"df87a7cf_b6ee10b2","updated":"2017-12-05 17:32:14.000000000","message":"OK I guess assert_called_once_with() is a problem because instance has changed by now so we can\u0027t use it here.","commit_id":"dfb370b5f6dffeb75496a25a4e3895bb89fb9186"}]}
