)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"62c9fa95db9d07c8b9080c7125fe3ba562d48cb3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"fde212af_eabe683e","updated":"2026-07-01 07:28:25.000000000","message":"Please add release notes and document the new backup_device\u003dNone contact","commit_id":"6b9fd84cbc369c540b0114d8b73e4550b2f82fc2"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"46fc5cde3849d805c1216f7339394d8a7fe9747b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"062bec99_7efc9353","updated":"2026-06-19 19:26:32.000000000","message":"rechek:timeout in shleve instance","commit_id":"6b9fd84cbc369c540b0114d8b73e4550b2f82fc2"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"6fdc45450d7e4d48fdf966bd1972035e7606ceae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1e001058_4cb844c7","in_reply_to":"062bec99_7efc9353","updated":"2026-06-19 19:29:39.000000000","message":"Acknowledged","commit_id":"6b9fd84cbc369c540b0114d8b73e4550b2f82fc2"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"a06051975154b57c28d2c7957a60647a9c29fbcc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c19cc4df_267b08e5","in_reply_to":"fde212af_eabe683e","updated":"2026-07-01 13:46:27.000000000","message":"Added.","commit_id":"6b9fd84cbc369c540b0114d8b73e4550b2f82fc2"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"1ca630b9a2f191646b8b8033812a2752b2197c99","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"423793fe_099e4806","updated":"2026-07-02 05:49:46.000000000","message":"recheck","commit_id":"bee178a43b851b9161136e2302d365fddf4a8375"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"9860443aadec7d365a1fd5c99b883b5f34524c38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bb1a2d79_0cb55ee1","updated":"2026-07-03 05:59:23.000000000","message":"recheck","commit_id":"bee178a43b851b9161136e2302d365fddf4a8375"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"85850a78645f31d91ecae2b02064819f8e24413c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"57f71cfb_db96cae2","updated":"2026-07-07 06:40:14.000000000","message":"recheck","commit_id":"8c5036289789fcd3a6cdab141121fde0c00b8075"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"ab215c6cdb57d14c6b16a1a7a6fb18343d100890","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"d288ab31_59b9e9f1","updated":"2026-09-10 13:25:54.000000000","message":"recheck","commit_id":"0948974c942a2eef2d49d625ec2b8249b1f43387"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"23a26fbf12c784241fcbdcdd759ce01e11d38315","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"5733f58c_9fac3c28","updated":"2026-09-10 17:11:44.000000000","message":"recheck","commit_id":"d291d7af9f83e9ea84c02866197f271dc043936c"}],"cinder/backup/manager.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"62c9fa95db9d07c8b9080c7125fe3ba562d48cb3","unresolved":true,"context_lines":[{"line_number":514,"context_line":"                else:"},{"line_number":515,"context_line":"                    self.db.volume_update("},{"line_number":516,"context_line":"                        context, volume_id,"},{"line_number":517,"context_line":"                        {\u0027status\u0027: previous_status,"},{"line_number":518,"context_line":"                         \u0027previous_status\u0027: \u0027error_backing-up\u0027})"},{"line_number":519,"context_line":"            except Exception:"},{"line_number":520,"context_line":"                LOG.exception(\"Failed to restore source status for backup %s\","}],"source_content_type":"text/x-python","patch_set":4,"id":"d48ae986_08a19428","line":517,"updated":"2026-07-01 07:28:25.000000000","message":"Please guard the volume restore path when previous_status is missing.\n\nThis path is handling a partially failed backup setup. If previous_status is\nunexpectedly None, the code should not update the source volume status to None.\nPlease either skip the status restore with a warning, or use a safe validated\nfallback based on the existing backup state.","commit_id":"6b9fd84cbc369c540b0114d8b73e4550b2f82fc2"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"a06051975154b57c28d2c7957a60647a9c29fbcc","unresolved":true,"context_lines":[{"line_number":514,"context_line":"                else:"},{"line_number":515,"context_line":"                    self.db.volume_update("},{"line_number":516,"context_line":"                        context, volume_id,"},{"line_number":517,"context_line":"                        {\u0027status\u0027: previous_status,"},{"line_number":518,"context_line":"                         \u0027previous_status\u0027: \u0027error_backing-up\u0027})"},{"line_number":519,"context_line":"            except Exception:"},{"line_number":520,"context_line":"                LOG.exception(\"Failed to restore source status for backup %s\","}],"source_content_type":"text/x-python","patch_set":4,"id":"f7bd0265_9af5c121","line":517,"in_reply_to":"d48ae986_08a19428","updated":"2026-07-01 13:46:27.000000000","message":"Changed. There will be no status restore if prev_status is None. Added the same check and for the older code.","commit_id":"6b9fd84cbc369c540b0114d8b73e4550b2f82fc2"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"cb63198959c144d7fe7e28df302f3207b166d47c","unresolved":false,"context_lines":[{"line_number":514,"context_line":"                else:"},{"line_number":515,"context_line":"                    self.db.volume_update("},{"line_number":516,"context_line":"                        context, volume_id,"},{"line_number":517,"context_line":"                        {\u0027status\u0027: previous_status,"},{"line_number":518,"context_line":"                         \u0027previous_status\u0027: \u0027error_backing-up\u0027})"},{"line_number":519,"context_line":"            except Exception:"},{"line_number":520,"context_line":"                LOG.exception(\"Failed to restore source status for backup %s\","}],"source_content_type":"text/x-python","patch_set":4,"id":"77633566_debf3aaa","line":517,"in_reply_to":"f7bd0265_9af5c121","updated":"2026-09-10 13:45:01.000000000","message":"Acknowledged","commit_id":"6b9fd84cbc369c540b0114d8b73e4550b2f82fc2"},{"author":{"_account_id":39430,"name":"Kim Mingeun","display_name":"mgkim","email":"mgkim128@gmail.com","username":"mgkim"},"change_message_id":"82cafd45f90bedcf8d171b3c5595d5b257e125cf","unresolved":true,"context_lines":[{"line_number":510,"context_line":"                if snapshot:"},{"line_number":511,"context_line":"                    snapshot.status \u003d fields.SnapshotStatus.AVAILABLE"},{"line_number":512,"context_line":"                    snapshot.save()"},{"line_number":513,"context_line":"                elif previous_status is not None:"},{"line_number":514,"context_line":"                    self.db.volume_update("},{"line_number":515,"context_line":"                        context, volume_id,"},{"line_number":516,"context_line":"                        {\u0027status\u0027: previous_status,"}],"source_content_type":"text/x-python","patch_set":8,"id":"f45c41b8_ed8d5030","line":513,"updated":"2026-09-03 01:15:40.000000000","message":"I think the backup_device\u003dNone path needs to be idempotent.\n\ncontinue_backup is an asynchronous RPC callback and may be delivered more\nthan once. The first failure callback restores volume.status from\nprevious_status and then sets previous_status to error_backing-up.\nA duplicate callback reads that marker and writes error_backing-up back to\nvolume.status, leaving the source volume in an error state.\n\nCould we reload/status-gate the backup so source-state restoration runs only\nwhile the persisted backup is still creating, and add a duplicate-callback\nregression test?","commit_id":"68ff7e817a8777b17f4a3a2c1361596dd6fcd0af"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"cb63198959c144d7fe7e28df302f3207b166d47c","unresolved":false,"context_lines":[{"line_number":510,"context_line":"                if snapshot:"},{"line_number":511,"context_line":"                    snapshot.status \u003d fields.SnapshotStatus.AVAILABLE"},{"line_number":512,"context_line":"                    snapshot.save()"},{"line_number":513,"context_line":"                elif previous_status is not None:"},{"line_number":514,"context_line":"                    self.db.volume_update("},{"line_number":515,"context_line":"                        context, volume_id,"},{"line_number":516,"context_line":"                        {\u0027status\u0027: previous_status,"}],"source_content_type":"text/x-python","patch_set":8,"id":"d857cc49_f210a9ca","line":513,"in_reply_to":"f45c41b8_ed8d5030","updated":"2026-09-10 13:45:01.000000000","message":"Changed. @mgkim128@gmail.com","commit_id":"68ff7e817a8777b17f4a3a2c1361596dd6fcd0af"}],"cinder/tests/unit/backup/test_backup.py":[{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"62c9fa95db9d07c8b9080c7125fe3ba562d48cb3","unresolved":true,"context_lines":[{"line_number":950,"context_line":"        }"},{"line_number":951,"context_line":"        mock_volume_update.assert_called_once_with(self.ctxt, vol_id,"},{"line_number":952,"context_line":"                                                   vol_params)"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"    @mock.patch(\u0027cinder.volume.volume_utils.brick_get_connector_properties\u0027)"},{"line_number":955,"context_line":"    @mock.patch(\u0027cinder.volume.rpcapi.VolumeAPI.get_backup_device\u0027)"},{"line_number":956,"context_line":"    @mock.patch(\u0027cinder.utils.temporary_chown\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"d00b9242_8a606ead","line":953,"updated":"2026-07-01 07:28:25.000000000","message":"Please add tests related to message_api.create_from_request_context() and\nbackup_device\u003dNone tests.","commit_id":"6b9fd84cbc369c540b0114d8b73e4550b2f82fc2"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"cb63198959c144d7fe7e28df302f3207b166d47c","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        }"},{"line_number":951,"context_line":"        mock_volume_update.assert_called_once_with(self.ctxt, vol_id,"},{"line_number":952,"context_line":"                                                   vol_params)"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"    @mock.patch(\u0027cinder.volume.volume_utils.brick_get_connector_properties\u0027)"},{"line_number":955,"context_line":"    @mock.patch(\u0027cinder.volume.rpcapi.VolumeAPI.get_backup_device\u0027)"},{"line_number":956,"context_line":"    @mock.patch(\u0027cinder.utils.temporary_chown\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"455774e1_85101bd9","line":953,"in_reply_to":"063cc460_98df2097","updated":"2026-09-10 13:45:01.000000000","message":"Acknowledged","commit_id":"6b9fd84cbc369c540b0114d8b73e4550b2f82fc2"},{"author":{"_account_id":39209,"name":"Anatoli Barzev","email":"anatoli.barzev@digits.schwarz","username":"abarzev"},"change_message_id":"a06051975154b57c28d2c7957a60647a9c29fbcc","unresolved":true,"context_lines":[{"line_number":950,"context_line":"        }"},{"line_number":951,"context_line":"        mock_volume_update.assert_called_once_with(self.ctxt, vol_id,"},{"line_number":952,"context_line":"                                                   vol_params)"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"    @mock.patch(\u0027cinder.volume.volume_utils.brick_get_connector_properties\u0027)"},{"line_number":955,"context_line":"    @mock.patch(\u0027cinder.volume.rpcapi.VolumeAPI.get_backup_device\u0027)"},{"line_number":956,"context_line":"    @mock.patch(\u0027cinder.utils.temporary_chown\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"063cc460_98df2097","line":953,"in_reply_to":"d00b9242_8a606ead","updated":"2026-07-01 13:46:27.000000000","message":"Added more test.","commit_id":"6b9fd84cbc369c540b0114d8b73e4550b2f82fc2"}]}
