)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1c5ac7a80919da2954771ab4ef115befa670c115","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5d3159bf_0f068625","updated":"2026-07-29 13:12:52.000000000","message":"soft -1, because this needs to cover more\noverall seems good to me,\ncan you also add same check and exception for snpashot being backing-up with tests\nthis can also cover restore.","commit_id":"796f3c593608ac220939d4edd12e7525f3a56986"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"511d1ddbd7963f4a663f5808b7caeaf15239bac2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9bc45983_b8270a10","updated":"2026-08-11 18:30:19.000000000","message":"CI green, review appreciated.","commit_id":"3b9342cca52a1af8772281e6e1b6861b45b15c9b"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"e119a3e287a6955ae630647eb9db4b9ec851f448","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3cf780ed_eff3f17d","updated":"2026-08-14 06:37:01.000000000","message":"just a nit, and ask for more test coverage.\n\nthakns for the updats.","commit_id":"3b9342cca52a1af8772281e6e1b6861b45b15c9b"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"aac9b2f59b4262e95df65c55fe4de0834475b6e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"64a0cc57_857491e5","updated":"2026-08-11 11:56:26.000000000","message":"recheck","commit_id":"3b9342cca52a1af8772281e6e1b6861b45b15c9b"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"16fbfd1759a576c1ed44823ed3bcdcf859d801b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0ab0bb57_9fa66103","updated":"2026-08-17 11:16:08.000000000","message":"recheck","commit_id":"a452d74a577be88ca5afcf1032bb2a9cdf0f7c51"}],"cinder/api/contrib/backups.py":[{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"e119a3e287a6955ae630647eb9db4b9ec851f448","unresolved":true,"context_lines":[{"line_number":232,"context_line":"                exception.InvalidVolume,"},{"line_number":233,"context_line":"                exception.InvalidBackup) as error:"},{"line_number":234,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.msg)"},{"line_number":235,"context_line":"        except exception.BackupInProgress as error:"},{"line_number":236,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.msg)"},{"line_number":237,"context_line":"        except (exception.VolumeSizeExceedsAvailableQuota,"},{"line_number":238,"context_line":"                exception.VolumeLimitExceeded) as error:"}],"source_content_type":"text/x-python","patch_set":5,"id":"74103bdc_fab47b23","line":235,"updated":"2026-08-14 06:37:01.000000000","message":"maybe a nit and not need to update, but as you might respin.\n\nabove whicle creation, `BackupInProgress` is caught before invalidVolume, we can follow same here in restore for consistency, \nunless there is particular reason !","commit_id":"3b9342cca52a1af8772281e6e1b6861b45b15c9b"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"db74df53e061e285dae1994787b3cf6243c2d57f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"f3cbcfa0_ee4e36ec","in_reply_to":"74103bdc_fab47b23","updated":"2026-08-16 15:52:10.000000000","message":"Moved BackupInProgress exception handling before InvalidVolume in restore() for consistency with create().","commit_id":"a452d74a577be88ca5afcf1032bb2a9cdf0f7c51"}],"cinder/backup/api.py":[{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1c5ac7a80919da2954771ab4ef115befa670c115","unresolved":true,"context_lines":[{"line_number":245,"context_line":"                       % snapshot[\u0027status\u0027])"},{"line_number":246,"context_line":"                raise exception.InvalidSnapshot(reason\u003dmsg)"},{"line_number":247,"context_line":"        elif volume[\u0027status\u0027] \u003d\u003d fields.VolumeStatus.BACKING_UP:"},{"line_number":248,"context_line":"            # A concurrent backup request against a volume that\u0027s already"},{"line_number":249,"context_line":"            # being backed up is a transient conflict, not a fundamentally"},{"line_number":250,"context_line":"            # invalid request -- raise a distinguishable, retryable error"},{"line_number":251,"context_line":"            # (HTTP 409) instead of grouping it with genuinely invalid"},{"line_number":252,"context_line":"            # volume states under a generic HTTP 400."},{"line_number":253,"context_line":"            raise exception.BackupInProgress(vol_id\u003dvolume_id)"},{"line_number":254,"context_line":"        elif volume[\u0027status\u0027] not in [\"available\", \"in-use\"]:"},{"line_number":255,"context_line":"            msg \u003d (_(\u0027Volume to be backed up must be available \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"2134fbe2_f5b46864","line":252,"range":{"start_line":248,"start_character":13,"end_line":252,"end_character":53},"updated":"2026-07-29 13:12:52.000000000","message":"we may not need this, commit and exception  msg is enough","commit_id":"796f3c593608ac220939d4edd12e7525f3a56986"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"ee21ba6091a711335e9f44a6b77bbc918d310e16","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                       % snapshot[\u0027status\u0027])"},{"line_number":246,"context_line":"                raise exception.InvalidSnapshot(reason\u003dmsg)"},{"line_number":247,"context_line":"        elif volume[\u0027status\u0027] \u003d\u003d fields.VolumeStatus.BACKING_UP:"},{"line_number":248,"context_line":"            # A concurrent backup request against a volume that\u0027s already"},{"line_number":249,"context_line":"            # being backed up is a transient conflict, not a fundamentally"},{"line_number":250,"context_line":"            # invalid request -- raise a distinguishable, retryable error"},{"line_number":251,"context_line":"            # (HTTP 409) instead of grouping it with genuinely invalid"},{"line_number":252,"context_line":"            # volume states under a generic HTTP 400."},{"line_number":253,"context_line":"            raise exception.BackupInProgress(vol_id\u003dvolume_id)"},{"line_number":254,"context_line":"        elif volume[\u0027status\u0027] not in [\"available\", \"in-use\"]:"},{"line_number":255,"context_line":"            msg \u003d (_(\u0027Volume to be backed up must be available \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"0a11b9c1_5a1ec357","line":252,"range":{"start_line":248,"start_character":13,"end_line":252,"end_character":53},"in_reply_to":"2134fbe2_f5b46864","updated":"2026-08-08 18:21:10.000000000","message":"Done","commit_id":"796f3c593608ac220939d4edd12e7525f3a56986"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"e119a3e287a6955ae630647eb9db4b9ec851f448","unresolved":true,"context_lines":[{"line_number":232,"context_line":"        snapshot \u003d None"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if volume[\u0027status\u0027] \u003d\u003d fields.VolumeStatus.BACKING_UP:"},{"line_number":235,"context_line":"            raise exception.BackupInProgress(vol_id\u003dvolume_id)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if snapshot_id:"},{"line_number":238,"context_line":"            snapshot \u003d self.volume_api.get_snapshot(context, snapshot_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"486f6487_86aefa79","line":235,"updated":"2026-08-14 06:37:01.000000000","message":"should! like restore create should also check for status being restoring?","commit_id":"3b9342cca52a1af8772281e6e1b6861b45b15c9b"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"db74df53e061e285dae1994787b3cf6243c2d57f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"27333ba0_11abcba5","in_reply_to":"486f6487_86aefa79","updated":"2026-08-16 15:52:10.000000000","message":"Updated create() in cinder/backup/api.py to check for both fields.VolumeStatus.RESTORING_BACKUP on volumes and fields.SnapshotStatus.RESTORING on snapshots.","commit_id":"a452d74a577be88ca5afcf1032bb2a9cdf0f7c51"}],"cinder/tests/unit/api/contrib/test_backups.py":[{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"1c5ac7a80919da2954771ab4ef115befa670c115","unresolved":true,"context_lines":[{"line_number":1109,"context_line":"        res \u003d req.get_response(fakes.wsgi_app("},{"line_number":1110,"context_line":"            fake_auth_context\u003dself.user_context))"},{"line_number":1111,"context_line":"        res_dict \u003d jsonutils.loads(res.body)"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"        self.assertEqual(HTTPStatus.BAD_REQUEST, res.status_int)"},{"line_number":1114,"context_line":"        self.assertEqual(HTTPStatus.BAD_REQUEST,"},{"line_number":1115,"context_line":"                         res_dict[\u0027badRequest\u0027][\u0027code\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"56935c13_4547fbae","line":1112,"updated":"2026-07-29 13:12:52.000000000","message":"can you assert same here as well.","commit_id":"796f3c593608ac220939d4edd12e7525f3a56986"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"ee21ba6091a711335e9f44a6b77bbc918d310e16","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"        res \u003d req.get_response(fakes.wsgi_app("},{"line_number":1110,"context_line":"            fake_auth_context\u003dself.user_context))"},{"line_number":1111,"context_line":"        res_dict \u003d jsonutils.loads(res.body)"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"        self.assertEqual(HTTPStatus.BAD_REQUEST, res.status_int)"},{"line_number":1114,"context_line":"        self.assertEqual(HTTPStatus.BAD_REQUEST,"},{"line_number":1115,"context_line":"                         res_dict[\u0027badRequest\u0027][\u0027code\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"838b5f77_b48c295f","line":1112,"in_reply_to":"56935c13_4547fbae","updated":"2026-08-08 18:21:10.000000000","message":"Done","commit_id":"796f3c593608ac220939d4edd12e7525f3a56986"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"e119a3e287a6955ae630647eb9db4b9ec851f448","unresolved":true,"context_lines":[{"line_number":1109,"context_line":"        res \u003d req.get_response(fakes.wsgi_app("},{"line_number":1110,"context_line":"            fake_auth_context\u003dself.user_context))"},{"line_number":1111,"context_line":"        res_dict \u003d jsonutils.loads(res.body)"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"        self.assertEqual(HTTPStatus.BAD_REQUEST, res.status_int)"},{"line_number":1114,"context_line":"        self.assertEqual(HTTPStatus.BAD_REQUEST,"},{"line_number":1115,"context_line":"                         res_dict[\u0027badRequest\u0027][\u0027code\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"5e8a0a78_3f3d0cbb","line":1112,"in_reply_to":"838b5f77_b48c295f","updated":"2026-08-14 06:37:01.000000000","message":"minor commets are fine to resolve\nbut please do not resolve all comments, reviewer will do, unresolve comments helps with loading context in our mind w.r.t last reviews.","commit_id":"796f3c593608ac220939d4edd12e7525f3a56986"},{"author":{"_account_id":34860,"name":"Amit Uniyal","email":"auniyal@redhat.com","username":"auniyal"},"change_message_id":"e119a3e287a6955ae630647eb9db4b9ec851f448","unresolved":true,"context_lines":[{"line_number":1855,"context_line":"    def test_restore_backup_with_volume_already_backing_up(self):"},{"line_number":1856,"context_line":"        backup \u003d utils.create_backup(self.context,"},{"line_number":1857,"context_line":"                                     status\u003dfields.BackupStatus.AVAILABLE)"},{"line_number":1858,"context_line":"        volume \u003d utils.create_volume(self.context, size\u003d5, status\u003d\u0027backing-up\u0027)"},{"line_number":1859,"context_line":""},{"line_number":1860,"context_line":"        body \u003d {\"restore\": {\"volume_id\": volume.id}}"},{"line_number":1861,"context_line":"        req \u003d webob.Request.blank(\u0027/v3/%s/backups/%s/restore\u0027 % ("}],"source_content_type":"text/x-python","patch_set":5,"id":"48c1fb15_6b3d7df1","line":1858,"updated":"2026-08-14 06:37:01.000000000","message":"+1\n\ncan ypu also add for `status\u003d\u0027restoring-backup\u0027`","commit_id":"3b9342cca52a1af8772281e6e1b6861b45b15c9b"},{"author":{"_account_id":39353,"name":"Akash Roshan Chaurasia","display_name":"Akash Roshan Chaurasia","email":"akashroshanchaurasia@gmail.com","username":"akash-roshan"},"change_message_id":"db74df53e061e285dae1994787b3cf6243c2d57f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"8016169e_5f6e6f63","in_reply_to":"48c1fb15_6b3d7df1","updated":"2026-08-16 15:52:10.000000000","message":"Added test_restore_backup_with_volume_already_restoring_backup, test_create_backup_with_volume_already_restoring_backup, and test_create_backup_with_snapshot_already_restoring in test_backups.py.","commit_id":"a452d74a577be88ca5afcf1032bb2a9cdf0f7c51"}]}
