)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6b53c5e066042eca1f68d7a198339f5ebdace8e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a75476fb_8d736efd","updated":"2026-08-20 14:16:36.000000000","message":"Code looks good - please add a release note for this change :)","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a85cef7436f5d5f5d1e0a55126ca74f0b3223d8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bf16c233_cf4c87c7","updated":"2026-08-23 09:37:19.000000000","message":"Hey @siddharth.kumar1@dell.com\n\nPTAL at the comments inline","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"055c671f0b06fce101617d556779bd1abcddd272","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"064da4f0_8b948ca7","updated":"2026-08-17 11:07:37.000000000","message":"Please review it.","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"24ec5a08975a13234122d1fcb8ce5a0cf7a2e03c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5dec4d30_7d85a063","updated":"2026-08-25 11:03:58.000000000","message":"LGTM, thank you Siddharth. Could you please add a release note for this change?","commit_id":"9a913747262bd3b58049077b05f30ba929c26651"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"5810ef9e81c5125bd36cfc384e24a51f6bb3bc23","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d5520e7c_09eba23f","updated":"2026-08-26 05:56:37.000000000","message":"manila/share/driver.py: Add a change to the docstring here to suggest that the driver can return `{\u0027status\u0027: \u0027reverting_to_snapshot\u0027}` to defer the operation and have manila poll via `get_share_status`.\n","commit_id":"c9293024748211a5b147118c4232e7ba047d7b54"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"9f022684612e711cbd8b6199e9e347f3d5589e74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7f05b37b_f589d356","in_reply_to":"d5520e7c_09eba23f","updated":"2026-08-26 07:57:12.000000000","message":"Done","commit_id":"c9293024748211a5b147118c4232e7ba047d7b54"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"df345d63f32d7a039be7629a29e45e5fa8703d1a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e8aeecd7_1ea2dfa3","updated":"2026-08-27 00:18:15.000000000","message":"Provisionally +2 on this because we\u0027re running close to the Feature Freeze. Please see comment inline regarding how to handle async quota","commit_id":"c1513a6efd089ba226538f87d1cd4568704440ad"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6b20802b275fb1265ed048d22057e6ee66b0c06b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"236d0ec7_bd127a0a","updated":"2026-08-27 17:09:01.000000000","message":"LGTM, thank you","commit_id":"c8d90083e961caf3c72a1e74252ae67475eca6cf"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"418b8f7a26e31341b375aace85169c5bae53b3c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"4d543174_a7e907dd","updated":"2026-09-01 15:17:37.000000000","message":"LGTM, thank you for the feature!","commit_id":"c8d90083e961caf3c72a1e74252ae67475eca6cf"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"77ac682117e3eed439d48af7824e1d2349fe0d8c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f9bc0bfb_6ea3bc27","updated":"2026-09-02 13:07:36.000000000","message":"Some environment issue. for pep8 failure\n\npep8: 543 W commands[0]\u003e pre-commit run --all-files --show-diff-on-failure [tox/tox_env/api.py:485]\n[INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks.\nAn unexpected error has occurred: CalledProcessError: command: (\u0027/usr/bin/git\u0027, \u0027fetch\u0027, \u0027origin\u0027, \u0027--tags\u0027)\nreturn code: 128\nstdout: (none)\nstderr:\n    fatal: could not read Username for \u0027https://github.com\u0027: No such device or address\n    fatal: expected flush after ref listing\nCheck the log at /home/zuul/.cache/pre-commit/pre-commit.log\npep8: 1480 C exit 3 (0.93 seconds) /home/zuul/src/opendev.org/openstack/manila\u003e pre-commit run --all-files --show-diff-on-failure pid\u003d5402 [tox/execute/api.py:309]\n  pep8: FAIL code 3 (0.95\u003dsetup[0.02]+cmd[0.93] seconds)\n  evaluation failed :( (1.15 seconds)","commit_id":"c8d90083e961caf3c72a1e74252ae67475eca6cf"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"0ee86a464507be9d450998419159e5cdb10d4990","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ca79f1aa_bdf68f6b","updated":"2026-09-02 13:24:04.000000000","message":"recheck","commit_id":"c8d90083e961caf3c72a1e74252ae67475eca6cf"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"6c91fa836a5e5d324a24a41cfa07509919ba63d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b38d791e_fa7e0490","updated":"2026-09-02 09:17:26.000000000","message":"recheck\nSeems like a flaky test","commit_id":"c8d90083e961caf3c72a1e74252ae67475eca6cf"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"0a8cb9effce5812553121e6535819bf197fce581","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"85ffebd5_0631dee0","updated":"2026-09-01 07:19:47.000000000","message":"run-DellEMC PowerScale CI","commit_id":"c8d90083e961caf3c72a1e74252ae67475eca6cf"}],"manila/message/message_field.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a85cef7436f5d5f5d1e0a55126ca74f0b3223d8f","unresolved":true,"context_lines":[{"line_number":228,"context_line":"        TARGETED_RESTORE_UNSUPPORTED,"},{"line_number":229,"context_line":"        NEUTRON_SUBNET_FULL,"},{"line_number":230,"context_line":"        UNSUPPORTED_REPLICA_CREATE_CONFIG,"},{"line_number":231,"context_line":"        DRIVER_FAILED_REVERTING_TO_SNAPSHOT"},{"line_number":232,"context_line":"    )"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    # Exception and detail mappings"}],"source_content_type":"text/x-python","patch_set":1,"id":"e7e1cbf0_f9d84483","line":231,"range":{"start_line":231,"start_character":8,"end_line":231,"end_character":43},"updated":"2026-08-23 09:37:19.000000000","message":"add a trailing comma at the end of this line","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"90f264e01d63302b88acc8a9c72ff8c737579cf7","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        TARGETED_RESTORE_UNSUPPORTED,"},{"line_number":229,"context_line":"        NEUTRON_SUBNET_FULL,"},{"line_number":230,"context_line":"        UNSUPPORTED_REPLICA_CREATE_CONFIG,"},{"line_number":231,"context_line":"        DRIVER_FAILED_REVERTING_TO_SNAPSHOT"},{"line_number":232,"context_line":"    )"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    # Exception and detail mappings"}],"source_content_type":"text/x-python","patch_set":1,"id":"f0a53093_cb620dd7","line":231,"range":{"start_line":231,"start_character":8,"end_line":231,"end_character":43},"in_reply_to":"e7e1cbf0_f9d84483","updated":"2026-08-25 04:54:28.000000000","message":"Added trailing comma after DRIVER_FAILED_REVERTING_TO_SNAPSHOT","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"}],"manila/share/manager.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a85cef7436f5d5f5d1e0a55126ca74f0b3223d8f","unresolved":true,"context_lines":[{"line_number":5864,"context_line":"        for si in share_instances:"},{"line_number":5865,"context_line":"            si_dict \u003d self._get_share_instance_dict(context, si)"},{"line_number":5866,"context_line":"            self._update_share_status(context, si_dict)"},{"line_number":5867,"context_line":""},{"line_number":5868,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.periodic_interval)"},{"line_number":5869,"context_line":"    @utils.require_driver_initialized"},{"line_number":5870,"context_line":"    def periodic_share_revert_status_update(self, context):"},{"line_number":5871,"context_line":"        \"\"\"Invokes share driver to update revert shares status.\"\"\""},{"line_number":5872,"context_line":"        LOG.debug(\"Updating status of revert share instances.\")"},{"line_number":5873,"context_line":"        share_instances \u003d self.db.share_instance_get_all_by_host("},{"line_number":5874,"context_line":"            context, self.host, with_share_data\u003dTrue,"},{"line_number":5875,"context_line":"            status\u003dconstants.STATUS_REVERTING_TO_SNAPSHOT)"},{"line_number":5876,"context_line":""},{"line_number":5877,"context_line":"        for si in share_instances:"},{"line_number":5878,"context_line":"            si_dict \u003d self._get_share_instance_dict(context, si)"},{"line_number":5879,"context_line":"            self._update_share_status(context, si_dict)"},{"line_number":5880,"context_line":""},{"line_number":5881,"context_line":"    def _update_share_status(self, context, share_instance):"},{"line_number":5882,"context_line":"        share_server \u003d self._get_share_server(context, share_instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f48878c_a4f0c3e3","line":5879,"range":{"start_line":5867,"start_character":0,"end_line":5879,"end_character":55},"updated":"2026-08-23 09:37:19.000000000","message":"Why can\u0027t we just add this to the existing periodic task above, i.e., filter by either status","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"90f264e01d63302b88acc8a9c72ff8c737579cf7","unresolved":false,"context_lines":[{"line_number":5864,"context_line":"        for si in share_instances:"},{"line_number":5865,"context_line":"            si_dict \u003d self._get_share_instance_dict(context, si)"},{"line_number":5866,"context_line":"            self._update_share_status(context, si_dict)"},{"line_number":5867,"context_line":""},{"line_number":5868,"context_line":"    @periodic_task.periodic_task(spacing\u003dCONF.periodic_interval)"},{"line_number":5869,"context_line":"    @utils.require_driver_initialized"},{"line_number":5870,"context_line":"    def periodic_share_revert_status_update(self, context):"},{"line_number":5871,"context_line":"        \"\"\"Invokes share driver to update revert shares status.\"\"\""},{"line_number":5872,"context_line":"        LOG.debug(\"Updating status of revert share instances.\")"},{"line_number":5873,"context_line":"        share_instances \u003d self.db.share_instance_get_all_by_host("},{"line_number":5874,"context_line":"            context, self.host, with_share_data\u003dTrue,"},{"line_number":5875,"context_line":"            status\u003dconstants.STATUS_REVERTING_TO_SNAPSHOT)"},{"line_number":5876,"context_line":""},{"line_number":5877,"context_line":"        for si in share_instances:"},{"line_number":5878,"context_line":"            si_dict \u003d self._get_share_instance_dict(context, si)"},{"line_number":5879,"context_line":"            self._update_share_status(context, si_dict)"},{"line_number":5880,"context_line":""},{"line_number":5881,"context_line":"    def _update_share_status(self, context, share_instance):"},{"line_number":5882,"context_line":"        share_server \u003d self._get_share_server(context, share_instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4a5a0bd4_29035b56","line":5879,"range":{"start_line":5867,"start_character":0,"end_line":5879,"end_character":55},"in_reply_to":"9f48878c_a4f0c3e3","updated":"2026-08-25 04:54:28.000000000","message":"Merged periodic_share_revert_status_update into periodic_share_status_update. The periodic task now queries both STATUS_CREATING_FROM_SNAPSHOT and STATUS_REVERTING_TO_SNAPSHOT instances.","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a51dfd25414c00e8b2f60e50ae16e6f323d325d5","unresolved":true,"context_lines":[{"line_number":5893,"context_line":"                {\u0027id\u0027: share_instance[\u0027id\u0027],"},{"line_number":5894,"context_line":"                 \u0027share_id\u0027: share_instance[\u0027share_id\u0027]}"},{"line_number":5895,"context_line":"            )"},{"line_number":5896,"context_line":"            data_updates \u003d {"},{"line_number":5897,"context_line":"                \u0027status\u0027: constants.STATUS_ERROR"},{"line_number":5898,"context_line":"            }"},{"line_number":5899,"context_line":""},{"line_number":5900,"context_line":"        status \u003d data_updates.get(\u0027status\u0027)"},{"line_number":5901,"context_line":"        if (status \u003d\u003d constants.STATUS_ERROR or"}],"source_content_type":"text/x-python","patch_set":1,"id":"64726b14_c700b41e","line":5898,"range":{"start_line":5896,"start_character":12,"end_line":5898,"end_character":13},"updated":"2026-08-23 09:42:11.000000000","message":"if the previous status was \"reverting_to_snapshot\", shouldn\u0027t the new error state be \"reverting_error\", \n\nalso, the snapshot that\u0027s restoring should go back to \"available\"","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"90f264e01d63302b88acc8a9c72ff8c737579cf7","unresolved":false,"context_lines":[{"line_number":5893,"context_line":"                {\u0027id\u0027: share_instance[\u0027id\u0027],"},{"line_number":5894,"context_line":"                 \u0027share_id\u0027: share_instance[\u0027share_id\u0027]}"},{"line_number":5895,"context_line":"            )"},{"line_number":5896,"context_line":"            data_updates \u003d {"},{"line_number":5897,"context_line":"                \u0027status\u0027: constants.STATUS_ERROR"},{"line_number":5898,"context_line":"            }"},{"line_number":5899,"context_line":""},{"line_number":5900,"context_line":"        status \u003d data_updates.get(\u0027status\u0027)"},{"line_number":5901,"context_line":"        if (status \u003d\u003d constants.STATUS_ERROR or"}],"source_content_type":"text/x-python","patch_set":1,"id":"99b8338e_ab675669","line":5898,"range":{"start_line":5896,"start_character":12,"end_line":5898,"end_character":13},"in_reply_to":"64726b14_c700b41e","updated":"2026-08-25 04:54:28.000000000","message":"Updated exception handler in _update_share_status to set STATUS_REVERTING_ERROR (not generic STATUS_ERROR) when previous status was STATUS_REVERTING_TO_SNAPSHOT.","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a85cef7436f5d5f5d1e0a55126ca74f0b3223d8f","unresolved":true,"context_lines":[{"line_number":5898,"context_line":"            }"},{"line_number":5899,"context_line":""},{"line_number":5900,"context_line":"        status \u003d data_updates.get(\u0027status\u0027)"},{"line_number":5901,"context_line":"        if (status \u003d\u003d constants.STATUS_ERROR or"},{"line_number":5902,"context_line":"                status \u003d\u003d constants.STATUS_REVERTING_ERROR):"},{"line_number":5903,"context_line":"            msg \u003d (\"Status of share instance %(id)s that belongs to share \""},{"line_number":5904,"context_line":"                   \"%(share_id)s was updated to \u0027%(status)s\u0027.\""},{"line_number":5905,"context_line":"                   % {\u0027id\u0027: share_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"b63598d9_643906b1","line":5902,"range":{"start_line":5901,"start_character":11,"end_line":5902,"end_character":60},"updated":"2026-08-23 09:37:19.000000000","message":"\"constants.STATUS_ERROR in status\"\n\ncovers both cases","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"90f264e01d63302b88acc8a9c72ff8c737579cf7","unresolved":false,"context_lines":[{"line_number":5898,"context_line":"            }"},{"line_number":5899,"context_line":""},{"line_number":5900,"context_line":"        status \u003d data_updates.get(\u0027status\u0027)"},{"line_number":5901,"context_line":"        if (status \u003d\u003d constants.STATUS_ERROR or"},{"line_number":5902,"context_line":"                status \u003d\u003d constants.STATUS_REVERTING_ERROR):"},{"line_number":5903,"context_line":"            msg \u003d (\"Status of share instance %(id)s that belongs to share \""},{"line_number":5904,"context_line":"                   \"%(share_id)s was updated to \u0027%(status)s\u0027.\""},{"line_number":5905,"context_line":"                   % {\u0027id\u0027: share_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"7fb5736a_ca4f50db","line":5902,"range":{"start_line":5901,"start_character":11,"end_line":5902,"end_character":60},"in_reply_to":"b63598d9_643906b1","updated":"2026-08-25 04:54:28.000000000","message":"Simplified error check from `status \u003d\u003d STATUS_ERROR or status \u003d\u003d STATUS_REVERTING_ERROR` to `constants.STATUS_ERROR in status` (covers both cases since \u0027error\u0027 is a substring).","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a85cef7436f5d5f5d1e0a55126ca74f0b3223d8f","unresolved":true,"context_lines":[{"line_number":5923,"context_line":"                detail\u003dmsg_details)"},{"line_number":5924,"context_line":"            return"},{"line_number":5925,"context_line":""},{"line_number":5926,"context_line":"        export_locations \u003d data_updates.get(\u0027export_locations\u0027)"},{"line_number":5927,"context_line":"        progress \u003d data_updates.get(\u0027progress\u0027)"},{"line_number":5928,"context_line":""},{"line_number":5929,"context_line":"        statuses_requiring_update \u003d ["},{"line_number":5930,"context_line":"            constants.STATUS_AVAILABLE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"2d9ed4fd_e01e8652","line":5927,"range":{"start_line":5926,"start_character":0,"end_line":5927,"end_character":47},"updated":"2026-08-23 09:37:19.000000000","message":"reverted shares will need an updated size reported by the driver. And that size change informs the quota change that we\u0027ll commit. See the revert method.. perhaps extract the quota change logic so it can be reused here as well","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a51dfd25414c00e8b2f60e50ae16e6f323d325d5","unresolved":true,"context_lines":[{"line_number":5923,"context_line":"                detail\u003dmsg_details)"},{"line_number":5924,"context_line":"            return"},{"line_number":5925,"context_line":""},{"line_number":5926,"context_line":"        export_locations \u003d data_updates.get(\u0027export_locations\u0027)"},{"line_number":5927,"context_line":"        progress \u003d data_updates.get(\u0027progress\u0027)"},{"line_number":5928,"context_line":""},{"line_number":5929,"context_line":"        statuses_requiring_update \u003d ["},{"line_number":5930,"context_line":"            constants.STATUS_AVAILABLE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c8cee17c_4d67eb37","line":5927,"range":{"start_line":5926,"start_character":0,"end_line":5927,"end_character":47},"in_reply_to":"2d9ed4fd_e01e8652","updated":"2026-08-23 09:42:11.000000000","message":"for share instances that previously had a \"reverting_from_snapshot\" status, you\u0027ll need to restore the snapshot\u0027s status from \"restoring\" to \"available\" too?","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"90f264e01d63302b88acc8a9c72ff8c737579cf7","unresolved":false,"context_lines":[{"line_number":5923,"context_line":"                detail\u003dmsg_details)"},{"line_number":5924,"context_line":"            return"},{"line_number":5925,"context_line":""},{"line_number":5926,"context_line":"        export_locations \u003d data_updates.get(\u0027export_locations\u0027)"},{"line_number":5927,"context_line":"        progress \u003d data_updates.get(\u0027progress\u0027)"},{"line_number":5928,"context_line":""},{"line_number":5929,"context_line":"        statuses_requiring_update \u003d ["},{"line_number":5930,"context_line":"            constants.STATUS_AVAILABLE,"}],"source_content_type":"text/x-python","patch_set":1,"id":"a8918069_1874bacd","line":5927,"range":{"start_line":5926,"start_character":0,"end_line":5927,"end_character":47},"in_reply_to":"c8cee17c_4d67eb37","updated":"2026-08-25 04:54:28.000000000","message":"Added _restore_snapshot_after_revert() helper to restore snapshots from STATUS_RESTORING to STATUS_AVAILABLE. Called on both success and error paths when previous status was STATUS_REVERTING_TO_SNAPSHOT. This ensures snapshots are restored even if the revert fails, matching the synchronous revert error path behavior.","commit_id":"edadced03969a8ba514af3dfa132df92793dace2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"24ec5a08975a13234122d1fcb8ce5a0cf7a2e03c","unresolved":false,"context_lines":[{"line_number":5959,"context_line":"    def _restore_snapshot_after_revert(self, context, share_instance):"},{"line_number":5960,"context_line":"        \"\"\"Restore snapshots from \u0027restoring\u0027 to \u0027available\u0027 after revert.\"\"\""},{"line_number":5961,"context_line":"        share_id \u003d share_instance[\u0027share_id\u0027]"},{"line_number":5962,"context_line":"        snapshots \u003d self.db.share_snapshot_get_all_for_share("},{"line_number":5963,"context_line":"            context, share_id,"},{"line_number":5964,"context_line":"            filters\u003d{\u0027status\u0027: constants.STATUS_RESTORING})"},{"line_number":5965,"context_line":"        for snap in snapshots:"},{"line_number":5966,"context_line":"            self.db.share_snapshot_update("},{"line_number":5967,"context_line":"                context, snap[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"010c0f6e_83aa8fdf","line":5964,"range":{"start_line":5962,"start_character":8,"end_line":5964,"end_character":59},"updated":"2026-08-25 11:03:58.000000000","message":"we risk also updating other snapshots that might be stuck in restoring but I think it should be fine, as if one share is being restored to a snapshot, it mean other operations should not be happening in parallel, so I\u0027m okay with this and only wanted to leave a note for this possible scenario","commit_id":"9a913747262bd3b58049077b05f30ba929c26651"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"5810ef9e81c5125bd36cfc384e24a51f6bb3bc23","unresolved":true,"context_lines":[{"line_number":3709,"context_line":"            except ValueError:"},{"line_number":3710,"context_line":"                updated_share_size \u003d snapshot[\u0027size\u0027]"},{"line_number":3711,"context_line":""},{"line_number":3712,"context_line":"        if reservations:"},{"line_number":3713,"context_line":"            if updated_share_size \u003d\u003d snapshot[\u0027size\u0027]:"},{"line_number":3714,"context_line":"                QUOTAS.commit("},{"line_number":3715,"context_line":"                    context, reservations, project_id\u003dproject_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"624d64c9_4fb8f994","line":3712,"updated":"2026-08-26 05:56:37.000000000","message":"Quota and size are committed optimistically before the async revert completes. When the driver returns a dict (lines 3671-3672), `updated_share_size` is None, so it becomes `snapshot[\u0027size\u0027]` and if reservations exist and the size matches the snapshot, quota is committed here, but the actual revert hasn\u0027t happened yet. If the async operation later fails (driver returns reverting_error or raises in get_share_status), `_update_share_status` sets the share to reverting_error but never touches quota or size. This\u0027ll leave the system in an inconsistent state: user\u0027s quota reflects the snapshot size, the DB shows the snapshot size, but the share\u0027s actual data is still at the pre-revert size. The quota reservation and size update should be deferred until the async operation completes successfully (when status transitions to available in _update_share_status), similar to how they\u0027re deferred during the create_share_from_snapshot periodic completion path.\n","commit_id":"c9293024748211a5b147118c4232e7ba047d7b54"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"df345d63f32d7a039be7629a29e45e5fa8703d1a","unresolved":false,"context_lines":[{"line_number":3709,"context_line":"            except ValueError:"},{"line_number":3710,"context_line":"                updated_share_size \u003d snapshot[\u0027size\u0027]"},{"line_number":3711,"context_line":""},{"line_number":3712,"context_line":"        if reservations:"},{"line_number":3713,"context_line":"            if updated_share_size \u003d\u003d snapshot[\u0027size\u0027]:"},{"line_number":3714,"context_line":"                QUOTAS.commit("},{"line_number":3715,"context_line":"                    context, reservations, project_id\u003dproject_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a3438c2_cc3f65c5","line":3712,"in_reply_to":"5f7e81b0_d064c9b4","updated":"2026-08-27 00:18:15.000000000","message":"Done","commit_id":"c9293024748211a5b147118c4232e7ba047d7b54"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"9f022684612e711cbd8b6199e9e347f3d5589e74","unresolved":true,"context_lines":[{"line_number":3709,"context_line":"            except ValueError:"},{"line_number":3710,"context_line":"                updated_share_size \u003d snapshot[\u0027size\u0027]"},{"line_number":3711,"context_line":""},{"line_number":3712,"context_line":"        if reservations:"},{"line_number":3713,"context_line":"            if updated_share_size \u003d\u003d snapshot[\u0027size\u0027]:"},{"line_number":3714,"context_line":"                QUOTAS.commit("},{"line_number":3715,"context_line":"                    context, reservations, project_id\u003dproject_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7e81b0_d064c9b4","line":3712,"in_reply_to":"624d64c9_4fb8f994","updated":"2026-08-26 07:57:12.000000000","message":"The quota and size update are now deferred until the async operation completes successfully:\n\nIn _revert_to_snapshot (sync entry point):\n\nWhen driver returns {\u0027status\u0027: \u0027reverting_to_snapshot\u0027}: rollback any quota reservations immediately, set share.status \u003d \u0027reverting_to_snapshot\u0027 only (no size, no snapshot status), then return early\nWhen driver returns sync (None): existing quota commit/rollback logic unchanged\nNew _finalize_async_revert method (called on periodic completion):\n\nFinds the restoring snapshot to determine target size\nComputes size_delta \u003d snapshot_size - share_size (handles both size increase and decrease)\nIf size_delta !\u003d 0: reserves and commits quota (non-fatal if it fails)\nAlways updates share.status \u003d \u0027available\u0027 and share.size \u003d snapshot_size — mirroring exactly what the sync path does\nIn _update_share_status:\n\nCalls _finalize_async_revert before _restore_snapshot_after_revert when an async revert transitions to available","commit_id":"c9293024748211a5b147118c4232e7ba047d7b54"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"df345d63f32d7a039be7629a29e45e5fa8703d1a","unresolved":true,"context_lines":[{"line_number":5995,"context_line":""},{"line_number":5996,"context_line":"        if size_delta:"},{"line_number":5997,"context_line":"            try:"},{"line_number":5998,"context_line":"                reservations \u003d QUOTAS.reserve("},{"line_number":5999,"context_line":"                    context,"},{"line_number":6000,"context_line":"                    project_id\u003dproject_id,"},{"line_number":6001,"context_line":"                    gigabytes\u003dsize_delta,"},{"line_number":6002,"context_line":"                    user_id\u003duser_id,"},{"line_number":6003,"context_line":"                    share_type_id\u003dshare_type_id,"},{"line_number":6004,"context_line":"                )"},{"line_number":6005,"context_line":"                QUOTAS.commit("},{"line_number":6006,"context_line":"                    context, reservations, project_id\u003dproject_id,"},{"line_number":6007,"context_line":"                    user_id\u003duser_id, share_type_id\u003dshare_type_id,"},{"line_number":6008,"context_line":"                )"},{"line_number":6009,"context_line":"            except Exception:"},{"line_number":6010,"context_line":"                LOG.exception(\"Failed to update quota after async \""},{"line_number":6011,"context_line":"                              \"revert of share %s. Quota may need \""}],"source_content_type":"text/x-python","patch_set":4,"id":"4afec858_5354bde5","line":6008,"range":{"start_line":5998,"start_character":16,"end_line":6008,"end_character":17},"updated":"2026-08-27 00:18:15.000000000","message":"We should allow Overquota here instead of logging and forgetting about this quota adjustment:\n\nSee an example here:\n\nhttps://review.opendev.org/c/openstack/manila/+/1001109/3..4/manila/share/manager.py#3147","commit_id":"c1513a6efd089ba226538f87d1cd4568704440ad"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"3207070be742231a262fe45317be908c99da64d7","unresolved":true,"context_lines":[{"line_number":5995,"context_line":""},{"line_number":5996,"context_line":"        if size_delta:"},{"line_number":5997,"context_line":"            try:"},{"line_number":5998,"context_line":"                reservations \u003d QUOTAS.reserve("},{"line_number":5999,"context_line":"                    context,"},{"line_number":6000,"context_line":"                    project_id\u003dproject_id,"},{"line_number":6001,"context_line":"                    gigabytes\u003dsize_delta,"},{"line_number":6002,"context_line":"                    user_id\u003duser_id,"},{"line_number":6003,"context_line":"                    share_type_id\u003dshare_type_id,"},{"line_number":6004,"context_line":"                )"},{"line_number":6005,"context_line":"                QUOTAS.commit("},{"line_number":6006,"context_line":"                    context, reservations, project_id\u003dproject_id,"},{"line_number":6007,"context_line":"                    user_id\u003duser_id, share_type_id\u003dshare_type_id,"},{"line_number":6008,"context_line":"                )"},{"line_number":6009,"context_line":"            except Exception:"},{"line_number":6010,"context_line":"                LOG.exception(\"Failed to update quota after async \""},{"line_number":6011,"context_line":"                              \"revert of share %s. Quota may need \""}],"source_content_type":"text/x-python","patch_set":4,"id":"ec9a068b_7f3c226c","line":6008,"range":{"start_line":5998,"start_character":16,"end_line":6008,"end_character":17},"in_reply_to":"4afec858_5354bde5","updated":"2026-08-27 06:40:15.000000000","message":"Updated _finalize_async_revert to use overquota_allowed\u003dTrue on QUOTAS.reserve() instead of catching all exceptions. This matches the pattern used in manage_share (line 3147-3153).","commit_id":"c1513a6efd089ba226538f87d1cd4568704440ad"},{"author":{"_account_id":38286,"name":"Siddharth Kumar","display_name":"Siddharth","email":"siddharth.kumar1@dell.com","username":"siddhvrth"},"change_message_id":"7555b5bf56259f8ff1fb8964ef692a1a1c8572d4","unresolved":false,"context_lines":[{"line_number":5995,"context_line":""},{"line_number":5996,"context_line":"        if size_delta:"},{"line_number":5997,"context_line":"            try:"},{"line_number":5998,"context_line":"                reservations \u003d QUOTAS.reserve("},{"line_number":5999,"context_line":"                    context,"},{"line_number":6000,"context_line":"                    project_id\u003dproject_id,"},{"line_number":6001,"context_line":"                    gigabytes\u003dsize_delta,"},{"line_number":6002,"context_line":"                    user_id\u003duser_id,"},{"line_number":6003,"context_line":"                    share_type_id\u003dshare_type_id,"},{"line_number":6004,"context_line":"                )"},{"line_number":6005,"context_line":"                QUOTAS.commit("},{"line_number":6006,"context_line":"                    context, reservations, project_id\u003dproject_id,"},{"line_number":6007,"context_line":"                    user_id\u003duser_id, share_type_id\u003dshare_type_id,"},{"line_number":6008,"context_line":"                )"},{"line_number":6009,"context_line":"            except Exception:"},{"line_number":6010,"context_line":"                LOG.exception(\"Failed to update quota after async \""},{"line_number":6011,"context_line":"                              \"revert of share %s. Quota may need \""}],"source_content_type":"text/x-python","patch_set":4,"id":"4948dba3_da4cd3e7","line":6008,"range":{"start_line":5998,"start_character":16,"end_line":6008,"end_character":17},"in_reply_to":"ec9a068b_7f3c226c","updated":"2026-08-31 05:01:31.000000000","message":"Done","commit_id":"c1513a6efd089ba226538f87d1cd4568704440ad"}]}
