)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1a657bb204136a1ee104a0ad7a2ac194aa1184fd","unresolved":false,"context_lines":[{"line_number":2708,"context_line":"            def detach_block_devices(context, bdms):"},{"line_number":2709,"context_line":"                for bdm in bdms:"},{"line_number":2710,"context_line":"                    if bdm.is_volume:"},{"line_number":2711,"context_line":"                        self.volume_api.check_detach(context, bdm)"},{"line_number":2712,"context_line":"                        self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2713,"context_line":"                        self._detach_volume(context, bdm.volume_id, instance,"},{"line_number":2714,"context_line":"                                            destroy_bdm\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_64d638c7","line":2711,"range":{"start_line":2711,"start_character":40,"end_line":2711,"end_character":52},"updated":"2015-08-27 08:08:02.000000000","message":"do we want to catch the exception here? that is, if it raises exception.InvalidVolume do we want to continue?","commit_id":"65adf17b4210f2fd04c9a30b189e663f1ac4f1c2"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"deca4b0f17e4469c5f93147fdf51641d3ae80f9f","unresolved":false,"context_lines":[{"line_number":2708,"context_line":"            def detach_block_devices(context, bdms):"},{"line_number":2709,"context_line":"                for bdm in bdms:"},{"line_number":2710,"context_line":"                    if bdm.is_volume:"},{"line_number":2711,"context_line":"                        self.volume_api.check_detach(context, bdm)"},{"line_number":2712,"context_line":"                        self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2713,"context_line":"                        self._detach_volume(context, bdm.volume_id, instance,"},{"line_number":2714,"context_line":"                                            destroy_bdm\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_cabe2bff","line":2711,"in_reply_to":"da20952f_64d638c7","updated":"2015-08-27 08:40:29.000000000","message":"No we don\u0027t want to continue.","commit_id":"65adf17b4210f2fd04c9a30b189e663f1ac4f1c2"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"096f0c597737fa2efbcef68bb8a17d3a10d43077","unresolved":false,"context_lines":[{"line_number":2709,"context_line":"                for bdm in bdms:"},{"line_number":2710,"context_line":"                    if bdm.is_volume:"},{"line_number":2711,"context_line":"                        volume \u003d self.volume_api.get(context, bdm.volume_id)"},{"line_number":2712,"context_line":"                        self.volume_api.check_detach(context, volume)"},{"line_number":2713,"context_line":"                        self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2714,"context_line":"                        self._detach_volume(context, bdm.volume_id, instance,"},{"line_number":2715,"context_line":"                                            destroy_bdm\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_97461222","line":2712,"updated":"2015-08-27 12:49:58.000000000","message":"in case exception occurs, should we catch and handle it ?","commit_id":"872d97563a57ab1837b7d8e0044ff5062c3fa573"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"53889922ca11f28ab7b71519b4d4b94700a049f4","unresolved":false,"context_lines":[{"line_number":2709,"context_line":"                for bdm in bdms:"},{"line_number":2710,"context_line":"                    if bdm.is_volume:"},{"line_number":2711,"context_line":"                        volume \u003d self.volume_api.get(context, bdm.volume_id)"},{"line_number":2712,"context_line":"                        self.volume_api.check_detach(context, volume)"},{"line_number":2713,"context_line":"                        self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2714,"context_line":"                        self._detach_volume(context, bdm.volume_id, instance,"},{"line_number":2715,"context_line":"                                            destroy_bdm\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_375274de","line":2712,"in_reply_to":"da20952f_4c8bdbc3","updated":"2015-08-28 08:28:05.000000000","message":"I know it might be agreessive, but if we make the instance into ERROR only because it\u0027s not able to detach the volume...\nby function _error_out_instance_on_exception :)","commit_id":"872d97563a57ab1837b7d8e0044ff5062c3fa573"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0ebbde37aae0c27617694d839ca79b5fa2fd9dfc","unresolved":false,"context_lines":[{"line_number":2709,"context_line":"                for bdm in bdms:"},{"line_number":2710,"context_line":"                    if bdm.is_volume:"},{"line_number":2711,"context_line":"                        volume \u003d self.volume_api.get(context, bdm.volume_id)"},{"line_number":2712,"context_line":"                        self.volume_api.check_detach(context, volume)"},{"line_number":2713,"context_line":"                        self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2714,"context_line":"                        self._detach_volume(context, bdm.volume_id, instance,"},{"line_number":2715,"context_line":"                                            destroy_bdm\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_4c8bdbc3","line":2712,"in_reply_to":"da20952f_97461222","updated":"2015-08-28 08:18:03.000000000","message":"I was thinking that if this fails, the whole operation fails, any suggestion ?","commit_id":"872d97563a57ab1837b7d8e0044ff5062c3fa573"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"f4d3dc85a6d3b9592570668af537b799ae666cdc","unresolved":false,"context_lines":[{"line_number":2729,"context_line":"                if bdm.is_volume:"},{"line_number":2730,"context_line":"                    volume \u003d self.volume_api.get(context, bdm.volume_id)"},{"line_number":2731,"context_line":"                    try:"},{"line_number":2732,"context_line":"                        self.volume_api.check_detach(context, volume)"},{"line_number":2733,"context_line":"                    except exception.InvalidVolume:"},{"line_number":2734,"context_line":"                        raise NotImplementedError"},{"line_number":2735,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_629a7170","line":2732,"updated":"2015-09-03 04:43:59.000000000","message":"It requires the additional cinder request (to get the volume) but does nothing special: https://github.com/openstack/nova/blob/master/nova/volume/cinder.py#L313-L317\n\nbegin_detaching does more precise check: https://github.com/openstack/cinder/blob/540bba7f8e049e0eea304ec21ed2da2d03319125/cinder/volume/api.py#L598-L599\n\nSo i think you could call only begin_detaching","commit_id":"bdf4161f90eec7622025243a220e2d4eb13fe06e"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"83164f913bbb79b8dac2b38dadc1eca8093beef7","unresolved":false,"context_lines":[{"line_number":2729,"context_line":"                if bdm.is_volume:"},{"line_number":2730,"context_line":"                    volume \u003d self.volume_api.get(context, bdm.volume_id)"},{"line_number":2731,"context_line":"                    try:"},{"line_number":2732,"context_line":"                        self.volume_api.check_detach(context, volume)"},{"line_number":2733,"context_line":"                    except exception.InvalidVolume:"},{"line_number":2734,"context_line":"                        raise NotImplementedError"},{"line_number":2735,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_f4ffa831","line":2732,"in_reply_to":"da20952f_269984c4","updated":"2015-09-07 06:21:36.000000000","message":"Ah, you want to prevent error state of the instance if a volume is not attached...\n\nI think you could split this loop onto two ones: the first loop is outside of driver.rebuild, run as a preparation step for it, calls begin_detaching, handles corresponding cinder errors, and rollback detaching state on them. And the second loop stays in this callback function and only detaches volumes.","commit_id":"bdf4161f90eec7622025243a220e2d4eb13fe06e"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ea6ee9181e3b849fe7576345cfa82f23e2dbf23d","unresolved":false,"context_lines":[{"line_number":2729,"context_line":"                if bdm.is_volume:"},{"line_number":2730,"context_line":"                    volume \u003d self.volume_api.get(context, bdm.volume_id)"},{"line_number":2731,"context_line":"                    try:"},{"line_number":2732,"context_line":"                        self.volume_api.check_detach(context, volume)"},{"line_number":2733,"context_line":"                    except exception.InvalidVolume:"},{"line_number":2734,"context_line":"                        raise NotImplementedError"},{"line_number":2735,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_269984c4","line":2732,"in_reply_to":"da20952f_629a7170","updated":"2015-09-06 03:10:05.000000000","message":"Thanks for your review and sorry for response so late, we were have a holiday. I agree with you with the first one, the exception is thrown so that we don\u0027t set the VM to error, and I don\u0027t want to add an new exception just for this, any suggestions?","commit_id":"bdf4161f90eec7622025243a220e2d4eb13fe06e"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"3653fda9e2044cd1692833cd8f3a5e48f0dff193","unresolved":false,"context_lines":[{"line_number":2729,"context_line":"                if bdm.is_volume:"},{"line_number":2730,"context_line":"                    volume \u003d self.volume_api.get(context, bdm.volume_id)"},{"line_number":2731,"context_line":"                    try:"},{"line_number":2732,"context_line":"                        self.volume_api.check_detach(context, volume)"},{"line_number":2733,"context_line":"                    except exception.InvalidVolume:"},{"line_number":2734,"context_line":"                        raise NotImplementedError"},{"line_number":2735,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_c8e3e4a2","line":2732,"in_reply_to":"da20952f_746878f5","updated":"2015-09-07 06:51:58.000000000","message":"I forgot some important things.\n\n1 Since an instance can have more than one volume attached, you cannot just fail rollback operation on ckeck_detach (or begin_detaching). Because the fault may occure on the second (or more) volume, when the first volume is already detached. In this case the instance is broken, and we should not keep it that. So the splitting the loop looks appropriate to a preliminary check and safetely marking volumes as detaching.\n\n2 About the exception. If you place the first loop in rebuild_instance (not in _rebuild_instance), you\u0027ll do not need to workaround _error_out_instance_on_exception behavior. Otherwise i think you need to raise a special exception, not NotImplementedError. And in both cases you should choose an exception which has to be raised from rebuild_instance as a whole method to an end user.","commit_id":"bdf4161f90eec7622025243a220e2d4eb13fe06e"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"9549b89c6ec7442686f78b0d7d88f3868d3561c6","unresolved":false,"context_lines":[{"line_number":2729,"context_line":"                if bdm.is_volume:"},{"line_number":2730,"context_line":"                    volume \u003d self.volume_api.get(context, bdm.volume_id)"},{"line_number":2731,"context_line":"                    try:"},{"line_number":2732,"context_line":"                        self.volume_api.check_detach(context, volume)"},{"line_number":2733,"context_line":"                    except exception.InvalidVolume:"},{"line_number":2734,"context_line":"                        raise NotImplementedError"},{"line_number":2735,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_d3c85524","line":2732,"in_reply_to":"da20952f_c8e3e4a2","updated":"2015-09-08 08:06:51.000000000","message":"Thanks a lot, those are really good suggestions!","commit_id":"bdf4161f90eec7622025243a220e2d4eb13fe06e"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"12922680548944a2513be3af0fc8cef19fdf77ed","unresolved":false,"context_lines":[{"line_number":2729,"context_line":"                if bdm.is_volume:"},{"line_number":2730,"context_line":"                    volume \u003d self.volume_api.get(context, bdm.volume_id)"},{"line_number":2731,"context_line":"                    try:"},{"line_number":2732,"context_line":"                        self.volume_api.check_detach(context, volume)"},{"line_number":2733,"context_line":"                    except exception.InvalidVolume:"},{"line_number":2734,"context_line":"                        raise NotImplementedError"},{"line_number":2735,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_746878f5","line":2732,"in_reply_to":"da20952f_f4ffa831","updated":"2015-09-07 06:25:05.000000000","message":"Thanks","commit_id":"bdf4161f90eec7622025243a220e2d4eb13fe06e"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"f4d3dc85a6d3b9592570668af537b799ae666cdc","unresolved":false,"context_lines":[{"line_number":2731,"context_line":"                    try:"},{"line_number":2732,"context_line":"                        self.volume_api.check_detach(context, volume)"},{"line_number":2733,"context_line":"                    except exception.InvalidVolume:"},{"line_number":2734,"context_line":"                        raise NotImplementedError"},{"line_number":2735,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2736,"context_line":"                    self._detach_volume(context, bdm.volume_id, instance,"},{"line_number":2737,"context_line":"                                        destroy_bdm\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da20952f_028ff523","line":2734,"updated":"2015-09-03 04:43:59.000000000","message":"Probably i miss something, but what is a reasion to throw this exception here?","commit_id":"bdf4161f90eec7622025243a220e2d4eb13fe06e"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"5a00c144b81b6fbda0bd77cbee02b338857d3440","unresolved":false,"context_lines":[{"line_number":2627,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2628,"context_line":"                except exception.InvalidVolume as error:"},{"line_number":2629,"context_line":"                    with excutils.save_and_reraise_exception():"},{"line_number":2630,"context_line":"                        LOG.error(_LE(\"Setting instance back to %(state)s \""},{"line_number":2631,"context_line":"                                      \"after: %(error)s\"),"},{"line_number":2632,"context_line":"                                  {\u0027state\u0027: instance.vm_state, \u0027error\u0027: error},"},{"line_number":2633,"context_line":"                                  instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba15a1d1_5b88b022","line":2630,"updated":"2015-09-14 15:44:07.000000000","message":"I think you should rollback detaching on error to keep the instance in workable state","commit_id":"edb2674531f795d204a5fceb9fc5d299945e5858"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"160092624b7ca720de48f51cfcb3e6026348e313","unresolved":false,"context_lines":[{"line_number":2627,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2628,"context_line":"                except exception.InvalidVolume as error:"},{"line_number":2629,"context_line":"                    with excutils.save_and_reraise_exception():"},{"line_number":2630,"context_line":"                        LOG.error(_LE(\"Setting instance back to %(state)s \""},{"line_number":2631,"context_line":"                                      \"after: %(error)s\"),"},{"line_number":2632,"context_line":"                                  {\u0027state\u0027: instance.vm_state, \u0027error\u0027: error},"},{"line_number":2633,"context_line":"                                  instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba15a1d1_f45898fc","line":2630,"in_reply_to":"ba15a1d1_5b88b022","updated":"2015-09-15 07:45:51.000000000","message":"Thanks, updated.","commit_id":"edb2674531f795d204a5fceb9fc5d299945e5858"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"5a00c144b81b6fbda0bd77cbee02b338857d3440","unresolved":false,"context_lines":[{"line_number":2631,"context_line":"                                      \"after: %(error)s\"),"},{"line_number":2632,"context_line":"                                  {\u0027state\u0027: instance.vm_state, \u0027error\u0027: error},"},{"line_number":2633,"context_line":"                                  instance_uuid\u003dinstance.uuid)"},{"line_number":2634,"context_line":"                        self._instance_update(context, instance.uuid,"},{"line_number":2635,"context_line":"                                              vm_state\u003dinstance.vm_state,"},{"line_number":2636,"context_line":"                                              task_state\u003dNone)"},{"line_number":2637,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"ba15a1d1_7bbfb4d0","line":2634,"updated":"2015-09-14 15:44:07.000000000","message":"Are you sure that it\u0027s needed? Why?","commit_id":"edb2674531f795d204a5fceb9fc5d299945e5858"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"160092624b7ca720de48f51cfcb3e6026348e313","unresolved":false,"context_lines":[{"line_number":2631,"context_line":"                                      \"after: %(error)s\"),"},{"line_number":2632,"context_line":"                                  {\u0027state\u0027: instance.vm_state, \u0027error\u0027: error},"},{"line_number":2633,"context_line":"                                  instance_uuid\u003dinstance.uuid)"},{"line_number":2634,"context_line":"                        self._instance_update(context, instance.uuid,"},{"line_number":2635,"context_line":"                                              vm_state\u003dinstance.vm_state,"},{"line_number":2636,"context_line":"                                              task_state\u003dNone)"},{"line_number":2637,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"ba15a1d1_34893027","line":2634,"in_reply_to":"ba15a1d1_7bbfb4d0","updated":"2015-09-15 07:45:51.000000000","message":"having checked again, the vm_state and task state didn\u0027t change, so this is not needed, thank you.","commit_id":"edb2674531f795d204a5fceb9fc5d299945e5858"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"ef5cd320915b09b39905f7da821e9ad9ea92956c","unresolved":false,"context_lines":[{"line_number":2585,"context_line":"                          block_device_info\u003dnew_block_device_info)"},{"line_number":2586,"context_line":""},{"line_number":2587,"context_line":"    @messaging.expected_exceptions(exception.PreserveEphemeralNotSupported)"},{"line_number":2588,"context_line":"    @wrap_exception()"},{"line_number":2589,"context_line":"    @reverts_task_state"},{"line_number":2590,"context_line":"    @wrap_instance_event"},{"line_number":2591,"context_line":"    @wrap_instance_fault"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_e618e086","line":2588,"updated":"2015-09-15 13:37:58.000000000","message":"fyi: this decoration reverts instance task","commit_id":"92fc4afbfedf80886de54cf62f538f1ee6c75059"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"ef5cd320915b09b39905f7da821e9ad9ea92956c","unresolved":false,"context_lines":[{"line_number":2623,"context_line":""},{"line_number":2624,"context_line":"        for bdm in bdms:"},{"line_number":2625,"context_line":"            if bdm.is_volume:"},{"line_number":2626,"context_line":"                try:"},{"line_number":2627,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2628,"context_line":"                except exception.InvalidVolume:"},{"line_number":2629,"context_line":"                    for bdm in bdms:"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_9bd93d86","line":2626,"updated":"2015-09-15 13:37:58.000000000","message":"If the second volume fails to be begin-detaching, you don\u0027t rollback detaching of the first volume.\n\nSo that you should use try..except parenthesis outside of the loop.\n\nTo rollback detaching you should also distinguish what volumes you\u0027ve began detaching, and what haven\u0027t.","commit_id":"92fc4afbfedf80886de54cf62f538f1ee6c75059"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e2e9efea5b5ebce9a9692abe9fb62617e66a7cb7","unresolved":false,"context_lines":[{"line_number":2623,"context_line":""},{"line_number":2624,"context_line":"        for bdm in bdms:"},{"line_number":2625,"context_line":"            if bdm.is_volume:"},{"line_number":2626,"context_line":"                try:"},{"line_number":2627,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2628,"context_line":"                except exception.InvalidVolume:"},{"line_number":2629,"context_line":"                    for bdm in bdms:"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_f43d23bc","line":2626,"in_reply_to":"ba15a1d1_9bd93d86","updated":"2015-09-21 03:39:10.000000000","message":"Done. And I think we don\u0027t have to distinguish it from here, as the roll_detaching will check the status.","commit_id":"92fc4afbfedf80886de54cf62f538f1ee6c75059"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"ef5cd320915b09b39905f7da821e9ad9ea92956c","unresolved":false,"context_lines":[{"line_number":2626,"context_line":"                try:"},{"line_number":2627,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2628,"context_line":"                except exception.InvalidVolume:"},{"line_number":2629,"context_line":"                    for bdm in bdms:"},{"line_number":2630,"context_line":"                        if bdm.is_volume:"},{"line_number":2631,"context_line":"                            self.volume_api.roll_detaching(context,"},{"line_number":2632,"context_line":"                                                           bdm.volume_id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_bbca01a0","line":2629,"updated":"2015-09-15 13:37:58.000000000","message":"Probably this loop should be placed under \u0027with\u0027 statement below.","commit_id":"92fc4afbfedf80886de54cf62f538f1ee6c75059"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e2e9efea5b5ebce9a9692abe9fb62617e66a7cb7","unresolved":false,"context_lines":[{"line_number":2626,"context_line":"                try:"},{"line_number":2627,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2628,"context_line":"                except exception.InvalidVolume:"},{"line_number":2629,"context_line":"                    for bdm in bdms:"},{"line_number":2630,"context_line":"                        if bdm.is_volume:"},{"line_number":2631,"context_line":"                            self.volume_api.roll_detaching(context,"},{"line_number":2632,"context_line":"                                                           bdm.volume_id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_946147d6","line":2629,"in_reply_to":"ba15a1d1_bbca01a0","updated":"2015-09-21 03:39:10.000000000","message":"Done","commit_id":"92fc4afbfedf80886de54cf62f538f1ee6c75059"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"ef5cd320915b09b39905f7da821e9ad9ea92956c","unresolved":false,"context_lines":[{"line_number":2648,"context_line":"        orig_vm_state \u003d instance.vm_state"},{"line_number":2649,"context_line":""},{"line_number":2650,"context_line":"        if recreate:"},{"line_number":2651,"context_line":"            if not self.driver.capabilities[\"supports_recreate\"]:"},{"line_number":2652,"context_line":"                raise exception.InstanceRecreateNotSupported"},{"line_number":2653,"context_line":""},{"line_number":2654,"context_line":"            self._check_instance_exists(context, instance)"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba15a1d1_a66d0806","line":2651,"updated":"2015-09-15 13:37:58.000000000","message":"BTW, here and below some preliminary checks are performed, which can raise errors. This makes the instance into error state. Looks like this operation doesn\u0027t adopt to keep the instance in a good state on any error (i.e. invalid image specified). So that i wondered why jichenjc\tasked on PS3 to handle exceptions on detach preparation steps.","commit_id":"92fc4afbfedf80886de54cf62f538f1ee6c75059"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7cb7361bdacc16180a657b6b10b89ba4ccefbea9","unresolved":false,"context_lines":[{"line_number":2628,"context_line":"        except exception.InvalidVolume:"},{"line_number":2629,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2630,"context_line":"                for bdm in bdms:"},{"line_number":2631,"context_line":"                        if bdm.is_volume:"},{"line_number":2632,"context_line":"                            self.volume_api.roll_detaching(context,"},{"line_number":2633,"context_line":"                                                           bdm.volume_id)"},{"line_number":2634,"context_line":"                LOG.error(_LE(\"Rebuild failed, volume(s) cannot be\""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba15a1d1_2ad576b8","line":2631,"updated":"2015-09-21 07:20:12.000000000","message":"indentation here is a little odd","commit_id":"2c0b126663d5096475a102c53cc70cb7e1c29453"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7cb7361bdacc16180a657b6b10b89ba4ccefbea9","unresolved":false,"context_lines":[{"line_number":2632,"context_line":"                            self.volume_api.roll_detaching(context,"},{"line_number":2633,"context_line":"                                                           bdm.volume_id)"},{"line_number":2634,"context_line":"                LOG.error(_LE(\"Rebuild failed, volume(s) cannot be\""},{"line_number":2635,"context_line":"                              \"detached.\"))"},{"line_number":2636,"context_line":""},{"line_number":2637,"context_line":"        with self._error_out_instance_on_exception(context, instance):"},{"line_number":2638,"context_line":"            self._do_rebuild_instance(context, instance, orig_image_ref,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba15a1d1_4ac6aa17","line":2635,"updated":"2015-09-21 07:20:12.000000000","message":"please add instance\u003dinstance here","commit_id":"2c0b126663d5096475a102c53cc70cb7e1c29453"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7cb7361bdacc16180a657b6b10b89ba4ccefbea9","unresolved":false,"context_lines":[{"line_number":2664,"context_line":"                # To cover case when admin expects that instance files are"},{"line_number":2665,"context_line":"                # on shared storage, but not accessible and vice versa"},{"line_number":2666,"context_line":"                raise exception.InvalidSharedStorage("},{"line_number":2667,"context_line":"                        _(\"Invalid state of instance files on shared \""},{"line_number":2668,"context_line":"                          \"storage\"))"},{"line_number":2669,"context_line":""},{"line_number":2670,"context_line":"            if on_shared_storage:"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba15a1d1_ead77ebd","line":2667,"updated":"2015-09-21 07:20:12.000000000","message":"the changes here and below are unrelated to this patch set. please consider splitting them out to an additional one","commit_id":"2c0b126663d5096475a102c53cc70cb7e1c29453"},{"author":{"_account_id":14025,"name":"luong tuan","email":"tuan.luong_huu@nokia.com","username":"tuantuluong"},"change_message_id":"40d93359acfedcec45875a3d70d4286022d1fdbd","unresolved":false,"context_lines":[{"line_number":2628,"context_line":"        except exception.InvalidVolume:"},{"line_number":2629,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2630,"context_line":"                for bdm in bdms:"},{"line_number":2631,"context_line":"                        if bdm.is_volume:"},{"line_number":2632,"context_line":"                            self.volume_api.roll_detaching(context,"},{"line_number":2633,"context_line":"                                                           bdm.volume_id)"},{"line_number":2634,"context_line":"                LOG.error(_LE(\"Rebuild failed, volume(s) cannot be\""}],"source_content_type":"text/x-python","patch_set":25,"id":"ba15a1d1_60306d9f","line":2631,"updated":"2015-09-21 08:23:18.000000000","message":"The identation, please/","commit_id":"64e2be1e75d249d75df123124407a47387c66c37"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"431df81ce75d36d52d03511017ada06de2466f36","unresolved":false,"context_lines":[{"line_number":2629,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2630,"context_line":"                for bdm in bdms:"},{"line_number":2631,"context_line":"                    if bdm.is_volume:"},{"line_number":2632,"context_line":"                        self.volume_api.roll_detaching(context,"},{"line_number":2633,"context_line":"                                                       bdm.volume_id)"},{"line_number":2634,"context_line":"                LOG.error(_LE(\"Rebuild failed, volume(s) cannot be\""},{"line_number":2635,"context_line":"                              \"detached.\"), instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba15a1d1_d62551c2","line":2632,"updated":"2015-09-22 05:55:29.000000000","message":"Probably we need a test on this","commit_id":"d829992f0f8ab6740b9065864fb990d2e27948a1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"431df81ce75d36d52d03511017ada06de2466f36","unresolved":false,"context_lines":[{"line_number":2631,"context_line":"                    if bdm.is_volume:"},{"line_number":2632,"context_line":"                        self.volume_api.roll_detaching(context,"},{"line_number":2633,"context_line":"                                                       bdm.volume_id)"},{"line_number":2634,"context_line":"                LOG.error(_LE(\"Rebuild failed, volume(s) cannot be\""},{"line_number":2635,"context_line":"                              \"detached.\"), instance\u003dinstance)"},{"line_number":2636,"context_line":""},{"line_number":2637,"context_line":"        with self._error_out_instance_on_exception(context, instance):"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba15a1d1_36b92d7a","line":2634,"updated":"2015-09-22 05:55:29.000000000","message":"If one of roll_detaching operations fails, this message will be omitted. Could you put it before the loop above?\n\nOther question is - is logged info sufficient for admin to understand what volume couldn\u0027t be detached?","commit_id":"d829992f0f8ab6740b9065864fb990d2e27948a1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"431df81ce75d36d52d03511017ada06de2466f36","unresolved":false,"context_lines":[{"line_number":2669,"context_line":""},{"line_number":2670,"context_line":"            if on_shared_storage:"},{"line_number":2671,"context_line":"                LOG.info(_LI(\u0027disk on shared storage, recreating using\u0027"},{"line_number":2672,"context_line":"                                 \u0027 existing disk\u0027))"},{"line_number":2673,"context_line":"            else:"},{"line_number":2674,"context_line":"                image_ref \u003d orig_image_ref \u003d instance.image_ref"},{"line_number":2675,"context_line":"                LOG.info(_LI(\"disk not on shared storage, rebuilding from:\""}],"source_content_type":"text/x-python","patch_set":26,"id":"ba15a1d1_163bc9ec","line":2672,"updated":"2015-09-22 05:55:29.000000000","message":"Are you sure this improves code appearance?","commit_id":"d829992f0f8ab6740b9065864fb990d2e27948a1"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"66a615f63c2bd37fd44d73f6876b34bc971ac30b","unresolved":false,"context_lines":[{"line_number":2669,"context_line":""},{"line_number":2670,"context_line":"            if on_shared_storage:"},{"line_number":2671,"context_line":"                LOG.info(_LI(\u0027disk on shared storage, recreating using\u0027"},{"line_number":2672,"context_line":"                                 \u0027 existing disk\u0027))"},{"line_number":2673,"context_line":"            else:"},{"line_number":2674,"context_line":"                image_ref \u003d orig_image_ref \u003d instance.image_ref"},{"line_number":2675,"context_line":"                LOG.info(_LI(\"disk not on shared storage, rebuilding from:\""}],"source_content_type":"text/x-python","patch_set":26,"id":"ba15a1d1_d5b224e5","line":2672,"in_reply_to":"ba15a1d1_163bc9ec","updated":"2015-09-22 07:44:40.000000000","message":"Sorry., this is done by mistake.","commit_id":"d829992f0f8ab6740b9065864fb990d2e27948a1"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"431df81ce75d36d52d03511017ada06de2466f36","unresolved":false,"context_lines":[{"line_number":2673,"context_line":"            else:"},{"line_number":2674,"context_line":"                image_ref \u003d orig_image_ref \u003d instance.image_ref"},{"line_number":2675,"context_line":"                LOG.info(_LI(\"disk not on shared storage, rebuilding from:\""},{"line_number":2676,"context_line":"                                 \" \u0027%s\u0027\"), str(image_ref))"},{"line_number":2677,"context_line":""},{"line_number":2678,"context_line":"            # NOTE(mriedem): On a recreate (evacuate), we need to update"},{"line_number":2679,"context_line":"            # the instance\u0027s host and node properties to reflect it\u0027s"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba15a1d1_363e0ddb","line":2676,"updated":"2015-09-22 05:55:29.000000000","message":"ditto","commit_id":"d829992f0f8ab6740b9065864fb990d2e27948a1"},{"author":{"_account_id":16839,"name":"Cale Rath","email":"ctrath@us.ibm.com","username":"ctrath"},"change_message_id":"119f5292272665e0063d9b923b72d69dfe71b87a","unresolved":false,"context_lines":[{"line_number":2713,"context_line":"                LOG.error(_LE(\"Rebuild failed, volume(s) cannot be\""},{"line_number":2714,"context_line":"                              \"detached.\"), instance\u003dinstance)"},{"line_number":2715,"context_line":"                for bdm in bdms:"},{"line_number":2716,"context_line":"                    if bdm.is_volume:"},{"line_number":2717,"context_line":"                        self.volume_api.roll_detaching(context,"},{"line_number":2718,"context_line":"                                                       bdm.volume_id)"},{"line_number":2719,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7a2fa921_be6fef29","line":2716,"updated":"2015-10-08 20:05:30.000000000","message":"I\u0027m wondering why you don\u0027t have a try block inside the for loop above and only roll the begin_detach that failed, rather than roll them all.  I don\u0027t know if there will be unintended consequences happening if attempting to roll a detach that you didn\u0027t attempt to detach in the first place.","commit_id":"6779f0c4c986121552506adeefe357c8b812a63b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f7d17366eeafbd9c53619a77f2026fe14e91684b","unresolved":false,"context_lines":[{"line_number":2713,"context_line":"                LOG.error(_LE(\"Rebuild failed, volume(s) cannot be\""},{"line_number":2714,"context_line":"                              \"detached.\"), instance\u003dinstance)"},{"line_number":2715,"context_line":"                for bdm in bdms:"},{"line_number":2716,"context_line":"                    if bdm.is_volume:"},{"line_number":2717,"context_line":"                        self.volume_api.roll_detaching(context,"},{"line_number":2718,"context_line":"                                                       bdm.volume_id)"},{"line_number":2719,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"7a2fa921_e4b2a9e4","line":2716,"in_reply_to":"7a2fa921_be6fef29","updated":"2015-10-09 03:16:31.000000000","message":"Hi, thanks for your review, if one of the volume call begin_detach and failed, we have to roll all the volume that has already successfully called begin_detach, as in:\nhttps://git.openstack.org/cgit/openstack/cinder/tree/cinder/volume/api.py#n610\ncinder can easily check whether it need roll or not, so we don\u0027t add more jobs to nova.\n\nAnd yes, maybe add try will be better, I will add it after more comments.","commit_id":"6779f0c4c986121552506adeefe357c8b812a63b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ca3caecdafcbbd0c57809dd0cac77257792d3d8f","unresolved":false,"context_lines":[{"line_number":2706,"context_line":"            for bdm in bdms:"},{"line_number":2707,"context_line":"                if bdm.is_volume:"},{"line_number":2708,"context_line":"                    LOG.info(_LI(\"Call begin_detaching for volume: %s\"),"},{"line_number":2709,"context_line":"                             bdm.volume_id)"},{"line_number":2710,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2711,"context_line":"        except exception.InvalidVolume:"},{"line_number":2712,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a2ca52d_ca2cb304","line":2709,"updated":"2015-10-15 05:13:39.000000000","message":"please add instance\u003dinstance here","commit_id":"3e59bb57509e9f17dbd7eb9857abaf37ff1b08fc"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"7955b5d00610002fa8a4216b48feaae8315d5afd","unresolved":false,"context_lines":[{"line_number":2706,"context_line":"            for bdm in bdms:"},{"line_number":2707,"context_line":"                if bdm.is_volume:"},{"line_number":2708,"context_line":"                    LOG.info(_LI(\"Call begin_detaching for volume: %s\"),"},{"line_number":2709,"context_line":"                             bdm.volume_id)"},{"line_number":2710,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2711,"context_line":"        except exception.InvalidVolume:"},{"line_number":2712,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a2ca52d_30483a5b","line":2709,"in_reply_to":"5a2ca52d_ca2cb304","updated":"2015-10-15 06:14:13.000000000","message":"Done","commit_id":"3e59bb57509e9f17dbd7eb9857abaf37ff1b08fc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ca3caecdafcbbd0c57809dd0cac77257792d3d8f","unresolved":false,"context_lines":[{"line_number":2710,"context_line":"                    self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2711,"context_line":"        except exception.InvalidVolume:"},{"line_number":2712,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2713,"context_line":"                LOG.error(_LE(\"Rebuild failed, volume(s) cannot be\""},{"line_number":2714,"context_line":"                              \"detached.\"), instance\u003dinstance)"},{"line_number":2715,"context_line":"                for bdm in bdms:"},{"line_number":2716,"context_line":"                    if bdm.is_volume:"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a2ca52d_2aef67b1","line":2713,"updated":"2015-10-15 05:13:39.000000000","message":"missing space at the end of the line","commit_id":"3e59bb57509e9f17dbd7eb9857abaf37ff1b08fc"},{"author":{"_account_id":20566,"name":"BaiLinZhang","email":"bailin.zhang@hotmail.com","username":"bailin.zhang"},"change_message_id":"35de8a4a4cd8432f11d2493342a9cd384376dee7","unresolved":false,"context_lines":[{"line_number":2797,"context_line":"            try:"},{"line_number":2798,"context_line":"                for bdm in bdms:"},{"line_number":2799,"context_line":"                    if bdm.is_volume:"},{"line_number":2800,"context_line":"                        LOG.info(_LI(\"Call begin_detaching for volume: %s\"),"},{"line_number":2801,"context_line":"                                 bdm.volume_id, instance\u003dinstance)"},{"line_number":2802,"context_line":"                        self.volume_api.begin_detaching(context, bdm.volume_id)"},{"line_number":2803,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"5a18252c_b58ab3bd","line":2800,"range":{"start_line":2800,"start_character":28,"end_line":2800,"end_character":32},"updated":"2016-04-13 09:02:00.000000000","message":"The level of this log can be changed to \"debug\"?","commit_id":"87f5d3dd9f8b7053f5e2684be38b86132e9a99f4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a9c75f690b8c90361f41f9c248d00238f596ae52","unresolved":false,"context_lines":[{"line_number":2659,"context_line":""},{"line_number":2660,"context_line":"        if not bdms:"},{"line_number":2661,"context_line":"            bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":2662,"context_line":"                    context, instance.uuid)"},{"line_number":2663,"context_line":""},{"line_number":2664,"context_line":"        with self._error_out_instance_on_exception(context, instance):"},{"line_number":2665,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":60,"id":"1aa78d24_b401a2b1","line":2662,"updated":"2016-07-06 22:56:53.000000000","message":"I\u0027m just curious why we need get bdms from db again?","commit_id":"65b4210f4f2856f055e7a4a6ea1601dc9dcf996c"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e13c6aeb81846e08fee947890196e1070220c8c1","unresolved":false,"context_lines":[{"line_number":2659,"context_line":""},{"line_number":2660,"context_line":"        if not bdms:"},{"line_number":2661,"context_line":"            bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":2662,"context_line":"                    context, instance.uuid)"},{"line_number":2663,"context_line":""},{"line_number":2664,"context_line":"        with self._error_out_instance_on_exception(context, instance):"},{"line_number":2665,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":60,"id":"1aa78d24_a2466878","line":2662,"in_reply_to":"1aa78d24_b401a2b1","updated":"2016-07-07 01:20:31.000000000","message":"Hmm, you are right","commit_id":"65b4210f4f2856f055e7a4a6ea1601dc9dcf996c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4d03fd3bf7427bb777682e48648821471478e9dd","unresolved":false,"context_lines":[{"line_number":2697,"context_line":"                        \u0027rebuild.error\u0027, fault\u003de)"},{"line_number":2698,"context_line":"            except exception.InvalidVolume as e:"},{"line_number":2699,"context_line":"                LOG.error(_LE(\"Rebuild failed, volume(s) cannot be \""},{"line_number":2700,"context_line":"                                  \"detached.\"), instance\u003dinstance)"},{"line_number":2701,"context_line":"                for bdm in bdms:"},{"line_number":2702,"context_line":"                    if bdm.is_volume:"},{"line_number":2703,"context_line":"                        self.volume_api.roll_detaching(context,"}],"source_content_type":"text/x-python","patch_set":60,"id":"1aa78d24_e8899327","line":2700,"updated":"2016-07-06 13:33:22.000000000","message":"Please update the log message to include the volume ID, just like the INFO message above.","commit_id":"65b4210f4f2856f055e7a4a6ea1601dc9dcf996c"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4416994070d56485feba1572347434a3e59240a2","unresolved":false,"context_lines":[{"line_number":2691,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":2692,"context_line":"                self._notify_about_instance_usage(context, instance,"},{"line_number":2693,"context_line":"                        \u0027rebuild.error\u0027, fault\u003de)"},{"line_number":2694,"context_line":"            except exception.InvalidVolume as e:"},{"line_number":2695,"context_line":"                LOG.error(_LE(\"Rebuild failed, volume: %s cannot be \""},{"line_number":2696,"context_line":"                              \"detached.\"), bdm.volume_id, instance\u003dinstance)"},{"line_number":2697,"context_line":"                for bdm in bdms:"}],"source_content_type":"text/x-python","patch_set":65,"id":"1aa78d24_3708b32d","line":2694,"range":{"start_line":2694,"start_character":12,"end_line":2694,"end_character":48},"updated":"2016-07-08 01:52:32.000000000","message":"I didn\u0027t begin_detach will raise this exception. only check_detach will check the re-type problem","commit_id":"c14a63465b701790f84725370d0a204c08887ad7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4416994070d56485feba1572347434a3e59240a2","unresolved":false,"context_lines":[{"line_number":2701,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":2702,"context_line":"                self._notify_about_instance_usage(context, instance,"},{"line_number":2703,"context_line":"                                                  \u0027rebuild.error\u0027,"},{"line_number":2704,"context_line":"                                                  fault\u003de)"},{"line_number":2705,"context_line":"            except Exception as e:"},{"line_number":2706,"context_line":"                self._set_migration_status(migration, \u0027failed\u0027)"},{"line_number":2707,"context_line":"                self._notify_about_instance_usage(context, instance,"}],"source_content_type":"text/x-python","patch_set":65,"id":"1aa78d24_aa027a07","line":2704,"updated":"2016-07-08 01:52:32.000000000","message":"we also need rollback instance status I think","commit_id":"c14a63465b701790f84725370d0a204c08887ad7"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7cb7361bdacc16180a657b6b10b89ba4ccefbea9","unresolved":false,"context_lines":[{"line_number":2567,"context_line":"        instance \u003d self._create_fake_instance_obj()"},{"line_number":2568,"context_line":"        image_ref \u003d instance[\u0027image_ref\u0027]"},{"line_number":2569,"context_line":"        sys_metadata \u003d db.instance_system_metadata_get(self.context,"},{"line_number":2570,"context_line":"                                                       instance[\u0027uuid\u0027])"},{"line_number":2571,"context_line":"        self.compute.build_and_run_instance(self.context, instance, {}, {}, {},"},{"line_number":2572,"context_line":"                                            block_device_mapping\u003d[])"},{"line_number":2573,"context_line":"        db.instance_update(self.context, instance[\u0027uuid\u0027],"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba15a1d1_6af28e71","line":2570,"updated":"2015-09-21 07:20:12.000000000","message":"unrelated to the changes","commit_id":"2c0b126663d5096475a102c53cc70cb7e1c29453"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4d03fd3bf7427bb777682e48648821471478e9dd","unresolved":false,"context_lines":[{"line_number":2580,"context_line":"                                      bdms\u003dbdms, recreate\u003dFalse,"},{"line_number":2581,"context_line":"                                      on_shared_storage\u003dFalse)"},{"line_number":2582,"context_line":"        self.assertTrue(called[\u0027rebuild\u0027])"},{"line_number":2583,"context_line":"        self.assertTrue(mock_begin.called)"},{"line_number":2584,"context_line":"        self.compute.terminate_instance(self.context, instance, [], [])"},{"line_number":2585,"context_line":""},{"line_number":2586,"context_line":"    def test_rebuild_no_image(self):"}],"source_content_type":"text/x-python","patch_set":60,"id":"1aa78d24_c88e572d","line":2583,"updated":"2016-07-06 13:33:22.000000000","message":"This is fine, but better to do:\n\n mock_begin.assert_called_once_with(uuids.volume_id)","commit_id":"65b4210f4f2856f055e7a4a6ea1601dc9dcf996c"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e13c6aeb81846e08fee947890196e1070220c8c1","unresolved":false,"context_lines":[{"line_number":2580,"context_line":"                                      bdms\u003dbdms, recreate\u003dFalse,"},{"line_number":2581,"context_line":"                                      on_shared_storage\u003dFalse)"},{"line_number":2582,"context_line":"        self.assertTrue(called[\u0027rebuild\u0027])"},{"line_number":2583,"context_line":"        self.assertTrue(mock_begin.called)"},{"line_number":2584,"context_line":"        self.compute.terminate_instance(self.context, instance, [], [])"},{"line_number":2585,"context_line":""},{"line_number":2586,"context_line":"    def test_rebuild_no_image(self):"}],"source_content_type":"text/x-python","patch_set":60,"id":"1aa78d24_82340cfc","line":2583,"in_reply_to":"1aa78d24_c88e572d","updated":"2016-07-07 01:20:31.000000000","message":"Done Thanks for the review","commit_id":"65b4210f4f2856f055e7a4a6ea1601dc9dcf996c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4d03fd3bf7427bb777682e48648821471478e9dd","unresolved":false,"context_lines":[{"line_number":11357,"context_line":"        instance \u003d db.instance_get(self.context, self.inst.id)"},{"line_number":11358,"context_line":"        self.assertEqual(instance[\u0027host\u0027], \u0027fake_host_2\u0027)"},{"line_number":11359,"context_line":""},{"line_number":11360,"context_line":"    @mock.patch.object(nova.volume.cinder.API, \u0027begin_detaching\u0027)"},{"line_number":11361,"context_line":"    def test_rebuild_on_host_with_volumes(self, mock_begin):"},{"line_number":11362,"context_line":"        \"\"\"Confirm evacuate scenario reconnects volumes.\"\"\""},{"line_number":11363,"context_line":"        values \u003d {\u0027instance_uuid\u0027: self.inst.uuid,"}],"source_content_type":"text/x-python","patch_set":60,"id":"1aa78d24_2880bbf6","line":11360,"updated":"2016-07-06 13:33:22.000000000","message":"Did you want to assert anything about the mock_begin being called? I don\u0027t see any assertion in this unit test.","commit_id":"65b4210f4f2856f055e7a4a6ea1601dc9dcf996c"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e13c6aeb81846e08fee947890196e1070220c8c1","unresolved":false,"context_lines":[{"line_number":11357,"context_line":"        instance \u003d db.instance_get(self.context, self.inst.id)"},{"line_number":11358,"context_line":"        self.assertEqual(instance[\u0027host\u0027], \u0027fake_host_2\u0027)"},{"line_number":11359,"context_line":""},{"line_number":11360,"context_line":"    @mock.patch.object(nova.volume.cinder.API, \u0027begin_detaching\u0027)"},{"line_number":11361,"context_line":"    def test_rebuild_on_host_with_volumes(self, mock_begin):"},{"line_number":11362,"context_line":"        \"\"\"Confirm evacuate scenario reconnects volumes.\"\"\""},{"line_number":11363,"context_line":"        values \u003d {\u0027instance_uuid\u0027: self.inst.uuid,"}],"source_content_type":"text/x-python","patch_set":60,"id":"1aa78d24_e25cf04c","line":11360,"in_reply_to":"1aa78d24_2880bbf6","updated":"2016-07-07 01:20:31.000000000","message":"Done","commit_id":"65b4210f4f2856f055e7a4a6ea1601dc9dcf996c"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"096f0c597737fa2efbcef68bb8a17d3a10d43077","unresolved":false,"context_lines":[{"line_number":2564,"context_line":""},{"line_number":2565,"context_line":"            bdm_dict1 \u003d fake_block_device.FakeDbBlockDeviceDict("},{"line_number":2566,"context_line":"            {\u0027volume_id\u0027: \u0027fake-id\u0027, \u0027source_type\u0027: \u0027image\u0027,"},{"line_number":2567,"context_line":"             \u0027delete_on_termination\u0027: True, \u0027destination_type\u0027: \u0027volume\u0027})"},{"line_number":2568,"context_line":"            bdms1 \u003d [bdm_dict1]"},{"line_number":2569,"context_line":"            self.assertRaises(exception.InvalidVolume,"},{"line_number":2570,"context_line":"                              self.compute._rebuild_default_impl, self.context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_92aaa0d3","line":2567,"updated":"2015-08-27 12:49:58.000000000","message":"the bdms is object instead of dict?","commit_id":"872d97563a57ab1837b7d8e0044ff5062c3fa573"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0ebbde37aae0c27617694d839ca79b5fa2fd9dfc","unresolved":false,"context_lines":[{"line_number":2564,"context_line":""},{"line_number":2565,"context_line":"            bdm_dict1 \u003d fake_block_device.FakeDbBlockDeviceDict("},{"line_number":2566,"context_line":"            {\u0027volume_id\u0027: \u0027fake-id\u0027, \u0027source_type\u0027: \u0027image\u0027,"},{"line_number":2567,"context_line":"             \u0027delete_on_termination\u0027: True, \u0027destination_type\u0027: \u0027volume\u0027})"},{"line_number":2568,"context_line":"            bdms1 \u003d [bdm_dict1]"},{"line_number":2569,"context_line":"            self.assertRaises(exception.InvalidVolume,"},{"line_number":2570,"context_line":"                              self.compute._rebuild_default_impl, self.context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_cc5854fd","line":2567,"in_reply_to":"da20952f_92aaa0d3","updated":"2015-08-28 08:18:03.000000000","message":"Hi, all bdms in this script is like this, maybe it is ok?","commit_id":"872d97563a57ab1837b7d8e0044ff5062c3fa573"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"53889922ca11f28ab7b71519b4d4b94700a049f4","unresolved":false,"context_lines":[{"line_number":2564,"context_line":""},{"line_number":2565,"context_line":"            bdm_dict1 \u003d fake_block_device.FakeDbBlockDeviceDict("},{"line_number":2566,"context_line":"            {\u0027volume_id\u0027: \u0027fake-id\u0027, \u0027source_type\u0027: \u0027image\u0027,"},{"line_number":2567,"context_line":"             \u0027delete_on_termination\u0027: True, \u0027destination_type\u0027: \u0027volume\u0027})"},{"line_number":2568,"context_line":"            bdms1 \u003d [bdm_dict1]"},{"line_number":2569,"context_line":"            self.assertRaises(exception.InvalidVolume,"},{"line_number":2570,"context_line":"                              self.compute._rebuild_default_impl, self.context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_174df06b","line":2567,"in_reply_to":"da20952f_cc5854fd","updated":"2015-08-28 08:28:05.000000000","message":"I don\u0027t know for old one, but at least for new code I think we may think about using it","commit_id":"872d97563a57ab1837b7d8e0044ff5062c3fa573"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"096f0c597737fa2efbcef68bb8a17d3a10d43077","unresolved":false,"context_lines":[{"line_number":2589,"context_line":"                                                   block_device_info\u003dNone,"},{"line_number":2590,"context_line":"                                                   preserve_ephemeral\u003dFalse)"},{"line_number":2591,"context_line":"                begin_mock.assert_called_once_with(context,"},{"line_number":2592,"context_line":"                                                   bdm_dict1[\u0027volume_id\u0027])"},{"line_number":2593,"context_line":""},{"line_number":2594,"context_line":"    @mock.patch.object(utils, \u0027last_completed_audit_period\u0027,"},{"line_number":2595,"context_line":"            return_value\u003d(0, 0))"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_72090c2c","line":2592,"updated":"2015-08-27 12:49:58.000000000","message":"this is a little bit duplicate to #1 cases, both are checking instance with in-use volume can be rebuilt ,maybe we can combine them ?","commit_id":"872d97563a57ab1837b7d8e0044ff5062c3fa573"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0ebbde37aae0c27617694d839ca79b5fa2fd9dfc","unresolved":false,"context_lines":[{"line_number":2589,"context_line":"                                                   block_device_info\u003dNone,"},{"line_number":2590,"context_line":"                                                   preserve_ephemeral\u003dFalse)"},{"line_number":2591,"context_line":"                begin_mock.assert_called_once_with(context,"},{"line_number":2592,"context_line":"                                                   bdm_dict1[\u0027volume_id\u0027])"},{"line_number":2593,"context_line":""},{"line_number":2594,"context_line":"    @mock.patch.object(utils, \u0027last_completed_audit_period\u0027,"},{"line_number":2595,"context_line":"            return_value\u003d(0, 0))"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_0cd16c57","line":2592,"in_reply_to":"da20952f_72090c2c","updated":"2015-08-28 08:18:03.000000000","message":"Done","commit_id":"872d97563a57ab1837b7d8e0044ff5062c3fa573"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7cb7361bdacc16180a657b6b10b89ba4ccefbea9","unresolved":false,"context_lines":[{"line_number":2524,"context_line":"                                               recreate\u003dFalse,"},{"line_number":2525,"context_line":"                                               block_device_info\u003dNone,"},{"line_number":2526,"context_line":"                                               preserve_ephemeral\u003dFalse)"},{"line_number":2527,"context_line":""},{"line_number":2528,"context_line":"            self.assertTrue(mock_save.called)"},{"line_number":2529,"context_line":"            self.assertTrue(mock_spawn.called)"},{"line_number":2530,"context_line":"            mock_destroy.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":23,"id":"ba15a1d1_ca015a3b","side":"PARENT","line":2527,"updated":"2015-09-21 07:20:12.000000000","message":"unrelated","commit_id":"bd3b5a62b468c1f35895a73fb3a7da85c01321da"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"7cb7361bdacc16180a657b6b10b89ba4ccefbea9","unresolved":false,"context_lines":[{"line_number":2512,"context_line":"            instance \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":2513,"context_line":"            instance.task_state \u003d task_states.REBUILDING"},{"line_number":2514,"context_line":"            instance.save(expected_task_state\u003d[task_states.REBUILDING])"},{"line_number":2515,"context_line":""},{"line_number":2516,"context_line":"            self.compute._rebuild_default_impl(self.context,"},{"line_number":2517,"context_line":"                                               instance,"},{"line_number":2518,"context_line":"                                               None,"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba15a1d1_0ae752ad","line":2515,"updated":"2015-09-21 07:20:12.000000000","message":"unrelated","commit_id":"2c0b126663d5096475a102c53cc70cb7e1c29453"}]}
