)]}'
{"nova/compute/api.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"25eaddb818db16f20c386b2314556dde4c718b64","unresolved":false,"context_lines":[{"line_number":4540,"context_line":"                        if bdm.attachment_id:"},{"line_number":4541,"context_line":"                            self.volume_api.attachment_delete("},{"line_number":4542,"context_line":"                                context, bdm.attachment_id)"},{"line_number":4543,"context_line":"                            bdm.destroy()"},{"line_number":4544,"context_line":"                            # Don\u0027t throw an exception here, we did clean up"},{"line_number":4545,"context_line":"                            return"},{"line_number":4546,"context_line":"                    except Exception:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b96ba31a","line":4543,"updated":"2020-01-30 11:59:26.000000000","message":"This might create races with attachment process if the volume just takes long time to attach, maybe it\u0027s better to do this on the compute side.","commit_id":"ab41b384cac150409767b233d9ffa0f14424e0ee"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"4168ea5b8880eb9febe0d248bd7eb95db1ce6161","unresolved":false,"context_lines":[{"line_number":4531,"context_line":"            # if it is the case, clean up the bdm and volume reservation"},{"line_number":4532,"context_line":"            # (done by the compute)"},{"line_number":4533,"context_line":"            try:"},{"line_number":4534,"context_line":"                objects.BlockDeviceMapping.get_by_volume_and_instance("},{"line_number":4535,"context_line":"                    context, volume[\u0027id\u0027], instance.uuid)"},{"line_number":4536,"context_line":"            except exception.VolumeBDMNotFound:"},{"line_number":4537,"context_line":"                raise exception.InvalidVolume(reason\u003dexc.format_message())"},{"line_number":4538,"context_line":"            # If block device mapping exists, we can try to clean it up in case"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_c7574ef5","line":4535,"range":{"start_line":4534,"start_character":0,"end_line":4535,"end_character":57},"updated":"2020-02-05 09:43:39.000000000","message":"We\u0027re allowing to go further even in case of keystone BadRequest. Probably, it will fail on compute then if keystone is broken.","commit_id":"839d34694ccbfdc936fab82c587263f8f34774ec"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"fbeb7ff28af06c65d8440c0e53707794155b4149","unresolved":false,"context_lines":[{"line_number":4531,"context_line":"            # if it is the case, clean up the bdm and volume reservation"},{"line_number":4532,"context_line":"            # (done by the compute)"},{"line_number":4533,"context_line":"            try:"},{"line_number":4534,"context_line":"                objects.BlockDeviceMapping.get_by_volume_and_instance("},{"line_number":4535,"context_line":"                    context, volume[\u0027id\u0027], instance.uuid)"},{"line_number":4536,"context_line":"            except exception.VolumeBDMNotFound:"},{"line_number":4537,"context_line":"                raise exception.InvalidVolume(reason\u003dexc.format_message())"},{"line_number":4538,"context_line":"            # If block device mapping exists, we can try to clean it up in case"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_e7fcca41","line":4535,"range":{"start_line":4534,"start_character":0,"end_line":4535,"end_character":57},"in_reply_to":"3fa7e38b_c7574ef5","updated":"2020-02-05 09:59:51.000000000","message":"keystone bad request means that the request was malformed I think, so any further api call will fail","commit_id":"839d34694ccbfdc936fab82c587263f8f34774ec"}],"nova/compute/manager.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"4168ea5b8880eb9febe0d248bd7eb95db1ce6161","unresolved":false,"context_lines":[{"line_number":6980,"context_line":"        except exception.DeviceDetachFailed:"},{"line_number":6981,"context_line":"            # We got the request to detach the volume before it was attached,"},{"line_number":6982,"context_line":"            # or it stuck in reserved state. Delete the attachment"},{"line_number":6983,"context_line":"            if bdm.is_volume and bdm.attachment_id:"},{"line_number":6984,"context_line":"                self.volume_api.attachment_delete("},{"line_number":6985,"context_line":"                    context, bdm.attachment_id)"},{"line_number":6986,"context_line":""},{"line_number":6987,"context_line":"        info \u003d dict(volume_id\u003dvolume_id)"},{"line_number":6988,"context_line":"        self._notify_about_instance_usage("}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_2708a2d6","line":6985,"range":{"start_line":6983,"start_character":0,"end_line":6985,"end_character":47},"updated":"2020-02-05 09:43:39.000000000","message":"We can get here for other reason than volume reserved, but ok.","commit_id":"839d34694ccbfdc936fab82c587263f8f34774ec"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"fbeb7ff28af06c65d8440c0e53707794155b4149","unresolved":false,"context_lines":[{"line_number":6980,"context_line":"        except exception.DeviceDetachFailed:"},{"line_number":6981,"context_line":"            # We got the request to detach the volume before it was attached,"},{"line_number":6982,"context_line":"            # or it stuck in reserved state. Delete the attachment"},{"line_number":6983,"context_line":"            if bdm.is_volume and bdm.attachment_id:"},{"line_number":6984,"context_line":"                self.volume_api.attachment_delete("},{"line_number":6985,"context_line":"                    context, bdm.attachment_id)"},{"line_number":6986,"context_line":""},{"line_number":6987,"context_line":"        info \u003d dict(volume_id\u003dvolume_id)"},{"line_number":6988,"context_line":"        self._notify_about_instance_usage("}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_477fdedd","line":6985,"range":{"start_line":6983,"start_character":0,"end_line":6985,"end_character":47},"in_reply_to":"3fa7e38b_2708a2d6","updated":"2020-02-05 09:59:51.000000000","message":"Indeed, better to introduce separate exception here I think","commit_id":"839d34694ccbfdc936fab82c587263f8f34774ec"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"4168ea5b8880eb9febe0d248bd7eb95db1ce6161","unresolved":false,"context_lines":[{"line_number":4115,"context_line":"        side_effect\u003dexception.DeviceDetachFailed(device\u003d\u0027foo\u0027, reason\u003d\u0027bar\u0027))"},{"line_number":4116,"context_line":"    @mock.patch(\u0027nova.compute.utils.notify_about_volume_attach_detach\u0027)"},{"line_number":4117,"context_line":"    @mock.patch(\u0027nova.compute.manager.ComputeManager._delete_disk_metadata\u0027)"},{"line_number":4118,"context_line":"    def test_detach_reserved_volume(self, mock_delete_metadata, _, __, ___):"},{"line_number":4119,"context_line":"        inst_obj \u003d mock.Mock()"},{"line_number":4120,"context_line":"        fake_bdm \u003d fake_block_device.FakeDbBlockDeviceDict("},{"line_number":4121,"context_line":"            {\u0027source_type\u0027: \u0027volume\u0027, \u0027destination_type\u0027: \u0027volume\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_c792ee55","line":4118,"range":{"start_line":4118,"start_character":64,"end_line":4118,"end_character":74},"updated":"2020-02-05 09:43:39.000000000","message":"This can be avoided by specifying second arg for patch(), but your approach saves typing.","commit_id":"839d34694ccbfdc936fab82c587263f8f34774ec"}]}
