)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"300b5a48cd8d0d5f2a39ee1431b03da97ad83478","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"25ff54d5_1b899972","updated":"2025-11-12 10:05:34.000000000","message":"@ces.eduardo98@gmail.com\nThanks for the review, please find the reply, also i started looking in the approach suggested by Goutham.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"7540d05624b4a4c1ba57fde5e0bcea282e21e93a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"88dc63a9_820f362b","updated":"2025-11-06 21:10:28.000000000","message":"Missed to response.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"aee12110ef7c3f9f1f904e6c9043763e419206e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"db3461f1_5accd314","updated":"2025-08-28 05:09:26.000000000","message":"Thanks @gouthampravi@gmail.com, yes this is targeted to Gazoacho","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ccfd3e2df7e9a72ae6a049bcca097766f87701de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"179c9cba_5fd2b2ac","updated":"2025-11-06 18:13:55.000000000","message":"Thanks @nilesh.thathagar@dell.com, some comments inline","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"3140a0b3d6900b56b8c14e7768ca8529e0dd63be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3e7ee835_0061fcf2","updated":"2025-11-06 21:05:22.000000000","message":"Thanks for the review, @gouthampravi@gmail.com.\nI\u0027ve responded to a few comments and will address the remaining ones shortly.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"1062172709e63af722e8504985c191d0c74ecc06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"490c8248_d6048c7c","updated":"2025-11-10 19:32:11.000000000","message":"Thanks for working on this change. I\u0027d like to second Goutham\u0027s comments as well :)","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"b31f2186911411f5277480a27dcff7e535023a44","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e136c6cd_e5b9f4ee","updated":"2025-08-21 21:13:11.000000000","message":"please do a review.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"adbfd93ae1a90db439e0f513ff26ddf0123e38da","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3007e1c9_0aa4b157","updated":"2025-11-17 09:09:34.000000000","message":"run-DellEMC PowerScale CI","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"58aa66d59c03228f7711bcca9013339e8dd8a7b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"46d6892d_547bf9cb","updated":"2025-11-17 09:53:18.000000000","message":"run-DellEMC PowerScale CI","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"f483dbbdf142fee0bfbda1bd3dc658218451eb33","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5e13717a_82ecb598","updated":"2025-11-05 07:06:28.000000000","message":"run-DellEMC PowerScale CI","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"dd0bdc81817eaa5dd623daf3f1b2f05a8d776708","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"6aa8b425_198c8fd2","updated":"2025-08-19 05:01:55.000000000","message":"run-DellEMC PowerScale CI","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":37792,"name":"Dell Openstack CI","display_name":"Dell Openstack CI","email":"dellopenstackci@dell.com","username":"dellopenstackci"},"change_message_id":"299ff8930af461c2909f463d00ad347e38b82612","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"735ac59f_2003a5e7","updated":"2025-11-06 09:15:05.000000000","message":"run-DellEMC PowerScale CI","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":37792,"name":"Dell Openstack CI","display_name":"Dell Openstack CI","email":"dellopenstackci@dell.com","username":"dellopenstackci"},"change_message_id":"2efa24d6ec49a5180a1211c7d17f7c8a7ae1b96b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8af0ab79_a5411f4b","updated":"2025-11-06 08:17:18.000000000","message":"run-DellEMC PowerScale CI","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"cbd9537114153e3485af84d4ed1883a775c68092","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"baee5005_3ce53e68","updated":"2025-11-05 09:51:59.000000000","message":"run-DellEMC PowerScale CI","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c14d3b9ce5f2b4bcbb04ee30caac9a3ead98c6c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b9d7aab4_3376d39e","in_reply_to":"e136c6cd_e5b9f4ee","updated":"2025-08-27 22:39:49.000000000","message":"Hi Nilesh, i see that this is targeted for Gazpacho - we\u0027ll merge Gazpacho patches after RC1 has been shipped: https://releases.openstack.org/flamingo/schedule.html#rc1-target-week","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"53025c7b9ecf8651f813a290a2519da11c201a97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4a5fed22_96c09876","updated":"2025-12-01 12:58:16.000000000","message":"run-DellEMC PowerScale CI","commit_id":"158c04675059a5ffac08113194859042ad2a66ca"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"c72fee039b21879a59fde817db935dc3daab5cc5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5b2a2c58_a23d6bde","updated":"2025-12-01 13:01:14.000000000","message":"run-DellEMC PowerScale CI","commit_id":"158c04675059a5ffac08113194859042ad2a66ca"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"8c0b26b94d8735c25df8fcc06351425b981f723b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a5758a37_213f9b0d","updated":"2025-12-01 12:47:04.000000000","message":"run-DellEMC PowerScale CI","commit_id":"158c04675059a5ffac08113194859042ad2a66ca"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"95d78f6fc368be8b37b04c740380f96ebf5fe72b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"aee0928b_d2e950a3","updated":"2025-12-01 13:16:10.000000000","message":"run-DellEMC PowerScale CI","commit_id":"158c04675059a5ffac08113194859042ad2a66ca"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e30d98b60fb848a56bd5be39b189297ce1033e57","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"41d1d8fa_4310ae22","updated":"2025-12-01 12:46:41.000000000","message":"thanks @gouthampravi@gmail.com and @gouthampravi@gmail.com for the review.\n\nhave updated code, please do a review when you get a time.","commit_id":"158c04675059a5ffac08113194859042ad2a66ca"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"255892b23e1f5d4d38766948c53e9bbcca28d206","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"eb082bfd_cf61bb89","updated":"2026-02-04 18:04:03.000000000","message":"LGTM, thanks Nilesh!","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"64257a5434fee49424fa9218b20c3f571f468ece","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f15b71a5_cf213b95","updated":"2026-02-19 16:07:52.000000000","message":"Please look at the comments. I think Goutham is making an important point as well on the design for timeouts for the revert job.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"36acb6d3f548dba430852e1f21e07809dcf4a023","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7213900c_6ac9703c","updated":"2026-02-05 19:35:29.000000000","message":"Thanks for sharing this in the collab-review, @nilesh.thathagar@dell.com. Some more comments inline","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f7be2787b6e357ae7c14c095308fd1c698ab61b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"cd5932c3_ac211749","updated":"2026-02-24 06:00:43.000000000","message":"Thanks for working on this, provided few comments, please take a look.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"568e5bc5f406d1d78fa67602e31b8f5c1dc9a579","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"3c460871_04728c72","updated":"2026-02-05 11:18:11.000000000","message":"run-DellEMC PowerScale CI","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"2f052d8ab5d73e8d7c89a7209e9436fbe968675a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"fa322d53_09b609eb","updated":"2026-03-06 16:03:00.000000000","message":"run-DellEMC PowerScale CI","commit_id":"06a953d7fe6ff2d965dcb6c00147e839e773807f"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"ba6dd8d2_c32e4bc0","updated":"2026-03-06 07:53:41.000000000","message":"updated the patch, please review when you get a time.","commit_id":"06a953d7fe6ff2d965dcb6c00147e839e773807f"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"39d7d816b6df615d735cf463496bf1f55c7e8afc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"09ccba1e_9f2f4e1b","updated":"2026-03-12 09:12:33.000000000","message":"recheck","commit_id":"5fe68568907b6f7cd4c3591f313ef50a8d0a4149"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"acf464a4f3e5a5846b3588dfcaebe73a14ce2246","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1d3bc2bb_f95b093f","updated":"2026-03-11 22:47:07.000000000","message":"recheck","commit_id":"5fe68568907b6f7cd4c3591f313ef50a8d0a4149"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"33892cd6d3e36efc50f363ffec31aa1a9e8b531e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d560ef15_4e38aca9","updated":"2026-03-06 16:11:13.000000000","message":"run-DellEMC PowerScale CI","commit_id":"5fe68568907b6f7cd4c3591f313ef50a8d0a4149"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"00523f8b4578817bf669d6965d3e5a4e1ae253f6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"b2a9bb39_543c9f00","updated":"2026-04-17 07:42:06.000000000","message":"Please look at the comments below.","commit_id":"82a4eb71793b5e210044a73b860013fad65ca69d"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"f2db44afe181533526efc71038990c28b0a619f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"70e62249_e5651f6e","updated":"2026-05-11 09:24:57.000000000","message":"run-DellEMC PowerScale CI","commit_id":"8931aff0418704a3e8cdc6abcfa9930b97ebef73"}],"doc/source/configuration/shared-file-systems/drivers/dell-emc-powerscale-driver.rst":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ccfd3e2df7e9a72ae6a049bcca097766f87701de","unresolved":true,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":".. code-block:: ini"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    openstack share type set \u003cshare_type_name\u003e --extra-specs\\"},{"line_number":97,"context_line":"    revert_to_snapshot_support\u003dTrue"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"On PowerScale, both domain mark and revert to snapshot operations run as"}],"source_content_type":"text/x-rst","patch_set":3,"id":"21d469f4_8e1bc587","line":96,"range":{"start_line":96,"start_character":60,"end_line":96,"end_character":61},"updated":"2025-11-06 18:13:55.000000000","message":"space before \\","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e30d98b60fb848a56bd5be39b189297ce1033e57","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":".. code-block:: ini"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    openstack share type set \u003cshare_type_name\u003e --extra-specs\\"},{"line_number":97,"context_line":"    revert_to_snapshot_support\u003dTrue"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"On PowerScale, both domain mark and revert to snapshot operations run as"}],"source_content_type":"text/x-rst","patch_set":3,"id":"b5d95054_8c65651f","line":96,"range":{"start_line":96,"start_character":60,"end_line":96,"end_character":61},"in_reply_to":"21d469f4_8e1bc587","updated":"2025-12-01 12:46:41.000000000","message":"Done","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ccfd3e2df7e9a72ae6a049bcca097766f87701de","unresolved":true,"context_lines":[{"line_number":96,"context_line":"    openstack share type set \u003cshare_type_name\u003e --extra-specs\\"},{"line_number":97,"context_line":"    revert_to_snapshot_support\u003dTrue"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"On PowerScale, both domain mark and revert to snapshot operations run as"},{"line_number":100,"context_line":"asynchronous jobs. The PowerScale Manila driver periodically checks"},{"line_number":101,"context_line":"the job status."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"35141a39_9df8371b","line":99,"range":{"start_line":99,"start_character":20,"end_line":99,"end_character":31},"updated":"2025-11-06 18:13:55.000000000","message":"what does this mean?","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e30d98b60fb848a56bd5be39b189297ce1033e57","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    openstack share type set \u003cshare_type_name\u003e --extra-specs\\"},{"line_number":97,"context_line":"    revert_to_snapshot_support\u003dTrue"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"On PowerScale, both domain mark and revert to snapshot operations run as"},{"line_number":100,"context_line":"asynchronous jobs. The PowerScale Manila driver periodically checks"},{"line_number":101,"context_line":"the job status."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"cab53f83_622720a2","line":99,"range":{"start_line":99,"start_character":20,"end_line":99,"end_character":31},"in_reply_to":"060833b2_bac54ee2","updated":"2025-12-01 12:46:41.000000000","message":"Done","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"3140a0b3d6900b56b8c14e7768ca8529e0dd63be","unresolved":true,"context_lines":[{"line_number":96,"context_line":"    openstack share type set \u003cshare_type_name\u003e --extra-specs\\"},{"line_number":97,"context_line":"    revert_to_snapshot_support\u003dTrue"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"On PowerScale, both domain mark and revert to snapshot operations run as"},{"line_number":100,"context_line":"asynchronous jobs. The PowerScale Manila driver periodically checks"},{"line_number":101,"context_line":"the job status."},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"060833b2_bac54ee2","line":99,"range":{"start_line":99,"start_character":20,"end_line":99,"end_character":31},"in_reply_to":"35141a39_9df8371b","updated":"2025-11-06 21:05:22.000000000","message":"please do refer:\n1.https://www.dell.com/community/en/conversations/isilon/protection-domains-and-domain-marks/647f9ce2f4ccf8a8de1122ff\n2.https://www.dell.com/support/manuals/en-us/isilon-onefs/ifs-pub-91000-administration-guide-gui/create-a-snaprevert-domain?guid\u003dguid-85c361ca-91cc-4578-a484-7a2abb6a484f\u0026lang\u003den-us\n3.https://www.dell.com/support/manuals/en-us/isilon-onefs/ifs-pub-91000-administration-guide-gui/revert-a-snapshot?guid\u003dguid-ae61f074-72a9-4c1c-a801-52a7eff5b2f3\u0026lang\u003den-us","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ccfd3e2df7e9a72ae6a049bcca097766f87701de","unresolved":true,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":".. note::"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    The driver supports only a single revert-to-snapshot"},{"line_number":113,"context_line":"    operation at any given time. Concurrent revert requests"},{"line_number":114,"context_line":"    are not allowed currently."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Driver options"},{"line_number":117,"context_line":"~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":3,"id":"03355a4f_f362dcbf","line":114,"range":{"start_line":112,"start_character":0,"end_line":114,"end_character":30},"updated":"2025-11-06 18:13:55.000000000","message":"How is this enforced?","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"3140a0b3d6900b56b8c14e7768ca8529e0dd63be","unresolved":true,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":".. note::"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    The driver supports only a single revert-to-snapshot"},{"line_number":113,"context_line":"    operation at any given time. Concurrent revert requests"},{"line_number":114,"context_line":"    are not allowed currently."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Driver options"},{"line_number":117,"context_line":"~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":3,"id":"124e4be3_f655d4a3","line":114,"range":{"start_line":112,"start_character":0,"end_line":114,"end_character":30},"in_reply_to":"03355a4f_f362dcbf","updated":"2025-11-06 21:05:22.000000000","message":"At line: 635,\nsetting param: \u0027allow_dup\u0027: False,","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e30d98b60fb848a56bd5be39b189297ce1033e57","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":".. note::"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    The driver supports only a single revert-to-snapshot"},{"line_number":113,"context_line":"    operation at any given time. Concurrent revert requests"},{"line_number":114,"context_line":"    are not allowed currently."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"Driver options"},{"line_number":117,"context_line":"~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fe49672e_73474706","line":114,"range":{"start_line":112,"start_character":0,"end_line":114,"end_character":30},"in_reply_to":"124e4be3_f655d4a3","updated":"2025-12-01 12:46:41.000000000","message":"Done","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"255892b23e1f5d4d38766948c53e9bbcca28d206","unresolved":true,"context_lines":[{"line_number":100,"context_line":"asynchronous jobs. The PowerScale Manila driver periodically checks"},{"line_number":101,"context_line":"the job status."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"You can adjust the retry count and polling interval by configuring:"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":".. code-block:: ini"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"e7b06676_a6c33b36","line":103,"range":{"start_line":103,"start_character":0,"end_line":103,"end_character":67},"updated":"2026-02-04 18:04:03.000000000","message":"is this value measured in seconds? If so, please add a mention to it","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":100,"context_line":"asynchronous jobs. The PowerScale Manila driver periodically checks"},{"line_number":101,"context_line":"the job status."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"You can adjust the retry count and polling interval by configuring:"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":".. code-block:: ini"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"0445d7b6_ed2394e3","line":103,"range":{"start_line":103,"start_character":0,"end_line":103,"end_character":67},"in_reply_to":"e7b06676_a6c33b36","updated":"2026-03-06 07:53:41.000000000","message":"Done","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"}],"manila/share/drivers/dell_emc/plugins/powerscale/powerscale.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ccfd3e2df7e9a72ae6a049bcca097766f87701de","unresolved":true,"context_lines":[{"line_number":623,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_access_rules,"},{"line_number":624,"context_line":"                           snapshot_access_rules, share_server):"},{"line_number":625,"context_line":"        provider_location \u003d snapshot.get(\u0027provider_location\u0027)"},{"line_number":626,"context_line":"        if not provider_location:"},{"line_number":627,"context_line":"            LOG.warning("},{"line_number":628,"context_line":"                \"Failed to revert snapshot \u0027%s\u0027: missing provider location\","},{"line_number":629,"context_line":"                snapshot[\u0027id\u0027]"},{"line_number":630,"context_line":"            )"},{"line_number":631,"context_line":"            return"},{"line_number":632,"context_line":"        params \u003d {"},{"line_number":633,"context_line":"            \u0027type\u0027: \u0027SnapRevert\u0027,"},{"line_number":634,"context_line":"            \u0027priority\u0027: 10,"}],"source_content_type":"text/x-python","patch_set":3,"id":"761a487e_0e3f4879","line":631,"range":{"start_line":626,"start_character":0,"end_line":631,"end_character":18},"updated":"2025-11-06 18:13:55.000000000","message":"please raise an exception here.. returning with a warning will cause the share\u0027s status to transition to \"available\" meaning that the revert operation completed as expected.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e30d98b60fb848a56bd5be39b189297ce1033e57","unresolved":false,"context_lines":[{"line_number":623,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_access_rules,"},{"line_number":624,"context_line":"                           snapshot_access_rules, share_server):"},{"line_number":625,"context_line":"        provider_location \u003d snapshot.get(\u0027provider_location\u0027)"},{"line_number":626,"context_line":"        if not provider_location:"},{"line_number":627,"context_line":"            LOG.warning("},{"line_number":628,"context_line":"                \"Failed to revert snapshot \u0027%s\u0027: missing provider location\","},{"line_number":629,"context_line":"                snapshot[\u0027id\u0027]"},{"line_number":630,"context_line":"            )"},{"line_number":631,"context_line":"            return"},{"line_number":632,"context_line":"        params \u003d {"},{"line_number":633,"context_line":"            \u0027type\u0027: \u0027SnapRevert\u0027,"},{"line_number":634,"context_line":"            \u0027priority\u0027: 10,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ca28886f_5ae02ec3","line":631,"range":{"start_line":626,"start_character":0,"end_line":631,"end_character":18},"in_reply_to":"21b5f1a5_4c3358c2","updated":"2025-12-01 12:46:41.000000000","message":"Done, sure make sure to handle during manage/unmanage snapshot.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3b9c81ca04e482c4da2ee299a1cdee7286ad0872","unresolved":true,"context_lines":[{"line_number":623,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_access_rules,"},{"line_number":624,"context_line":"                           snapshot_access_rules, share_server):"},{"line_number":625,"context_line":"        provider_location \u003d snapshot.get(\u0027provider_location\u0027)"},{"line_number":626,"context_line":"        if not provider_location:"},{"line_number":627,"context_line":"            LOG.warning("},{"line_number":628,"context_line":"                \"Failed to revert snapshot \u0027%s\u0027: missing provider location\","},{"line_number":629,"context_line":"                snapshot[\u0027id\u0027]"},{"line_number":630,"context_line":"            )"},{"line_number":631,"context_line":"            return"},{"line_number":632,"context_line":"        params \u003d {"},{"line_number":633,"context_line":"            \u0027type\u0027: \u0027SnapRevert\u0027,"},{"line_number":634,"context_line":"            \u0027priority\u0027: 10,"}],"source_content_type":"text/x-python","patch_set":3,"id":"21b5f1a5_4c3358c2","line":631,"range":{"start_line":626,"start_character":0,"end_line":631,"end_character":18},"in_reply_to":"3a73f122_e29c77f9","updated":"2025-11-10 18:29:21.000000000","message":"Yes; unfortunately. But remember, you can\u0027t revert any existing shares anyway. Administrators have to either set \"revert_to_snapshot_support\" on existing share types or create new share types; and new shares will need to use a share type with that capability to support this feature. When a user creates snapshots of these new shares, with your code, the driver will be able to set the provider_location as expected. \n\nOne way existing shares can take advantage of this is by using the \"unmanage/manage\" workflow - which this driver doesn\u0027t yet support. When you add support for manage/unmanage of shares and snapshots, please ensure that provider location is set appropriately through that interface as well.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"7540d05624b4a4c1ba57fde5e0bcea282e21e93a","unresolved":true,"context_lines":[{"line_number":623,"context_line":"    def revert_to_snapshot(self, context, snapshot, share_access_rules,"},{"line_number":624,"context_line":"                           snapshot_access_rules, share_server):"},{"line_number":625,"context_line":"        provider_location \u003d snapshot.get(\u0027provider_location\u0027)"},{"line_number":626,"context_line":"        if not provider_location:"},{"line_number":627,"context_line":"            LOG.warning("},{"line_number":628,"context_line":"                \"Failed to revert snapshot \u0027%s\u0027: missing provider location\","},{"line_number":629,"context_line":"                snapshot[\u0027id\u0027]"},{"line_number":630,"context_line":"            )"},{"line_number":631,"context_line":"            return"},{"line_number":632,"context_line":"        params \u003d {"},{"line_number":633,"context_line":"            \u0027type\u0027: \u0027SnapRevert\u0027,"},{"line_number":634,"context_line":"            \u0027priority\u0027: 10,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a73f122_e29c77f9","line":631,"range":{"start_line":626,"start_character":0,"end_line":631,"end_character":18},"in_reply_to":"761a487e_0e3f4879","updated":"2025-11-06 21:10:28.000000000","message":"After update to a new version:\n\nWhat should we do if the customer has existing shares that don’t have a provider location, and they attempt to revert a snapshot? Should we fail the operation in such cases?","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"1062172709e63af722e8504985c191d0c74ecc06","unresolved":true,"context_lines":[{"line_number":635,"context_line":"            \u0027allow_dup\u0027: False,"},{"line_number":636,"context_line":"            \u0027policy\u0027: \u0027HIGH\u0027,"},{"line_number":637,"context_line":"            \u0027snaprevert_params\u0027: {"},{"line_number":638,"context_line":"                \u0027snapid\u0027: int(provider_location)"},{"line_number":639,"context_line":"            }"},{"line_number":640,"context_line":"        }"},{"line_number":641,"context_line":"        return self._powerscale_api.create_job(\u0027Revert to SnapShot\u0027, params)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c9563d3c_9b3f87de","line":638,"range":{"start_line":638,"start_character":26,"end_line":638,"end_character":48},"updated":"2025-11-10 19:32:11.000000000","message":"is this actually always going to be an integer? asking because provider location","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"1062172709e63af722e8504985c191d0c74ecc06","unresolved":true,"context_lines":[{"line_number":635,"context_line":"            \u0027allow_dup\u0027: False,"},{"line_number":636,"context_line":"            \u0027policy\u0027: \u0027HIGH\u0027,"},{"line_number":637,"context_line":"            \u0027snaprevert_params\u0027: {"},{"line_number":638,"context_line":"                \u0027snapid\u0027: int(provider_location)"},{"line_number":639,"context_line":"            }"},{"line_number":640,"context_line":"        }"},{"line_number":641,"context_line":"        return self._powerscale_api.create_job(\u0027Revert to SnapShot\u0027, params)"}],"source_content_type":"text/x-python","patch_set":3,"id":"632c2101_c9b60d99","line":638,"range":{"start_line":638,"start_character":25,"end_line":638,"end_character":48},"updated":"2025-11-10 19:32:11.000000000","message":"is this actually always going to be an integer? asking because the provider location in the manila database is a string and mostly it will have the uuid of the snapshot in the storage.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"300b5a48cd8d0d5f2a39ee1431b03da97ad83478","unresolved":true,"context_lines":[{"line_number":635,"context_line":"            \u0027allow_dup\u0027: False,"},{"line_number":636,"context_line":"            \u0027policy\u0027: \u0027HIGH\u0027,"},{"line_number":637,"context_line":"            \u0027snaprevert_params\u0027: {"},{"line_number":638,"context_line":"                \u0027snapid\u0027: int(provider_location)"},{"line_number":639,"context_line":"            }"},{"line_number":640,"context_line":"        }"},{"line_number":641,"context_line":"        return self._powerscale_api.create_job(\u0027Revert to SnapShot\u0027, params)"}],"source_content_type":"text/x-python","patch_set":3,"id":"e9f61449_5ddf5141","line":638,"range":{"start_line":638,"start_character":25,"end_line":638,"end_character":48},"in_reply_to":"632c2101_c9b60d99","updated":"2025-11-12 10:05:34.000000000","message":"Yes, it is always going to be integer,we are getting this value from PowerScale backend.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"2c780d0bba40b1597588ef724b6fb08c53a686ce","unresolved":false,"context_lines":[{"line_number":635,"context_line":"            \u0027allow_dup\u0027: False,"},{"line_number":636,"context_line":"            \u0027policy\u0027: \u0027HIGH\u0027,"},{"line_number":637,"context_line":"            \u0027snaprevert_params\u0027: {"},{"line_number":638,"context_line":"                \u0027snapid\u0027: int(provider_location)"},{"line_number":639,"context_line":"            }"},{"line_number":640,"context_line":"        }"},{"line_number":641,"context_line":"        return self._powerscale_api.create_job(\u0027Revert to SnapShot\u0027, params)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ebb46ac1_e8981364","line":638,"range":{"start_line":638,"start_character":26,"end_line":638,"end_character":48},"in_reply_to":"c9563d3c_9b3f87de","updated":"2025-11-10 19:33:02.000000000","message":"Don\u0027t know how I managed to duplicate this :)","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e30d98b60fb848a56bd5be39b189297ce1033e57","unresolved":false,"context_lines":[{"line_number":635,"context_line":"            \u0027allow_dup\u0027: False,"},{"line_number":636,"context_line":"            \u0027policy\u0027: \u0027HIGH\u0027,"},{"line_number":637,"context_line":"            \u0027snaprevert_params\u0027: {"},{"line_number":638,"context_line":"                \u0027snapid\u0027: int(provider_location)"},{"line_number":639,"context_line":"            }"},{"line_number":640,"context_line":"        }"},{"line_number":641,"context_line":"        return self._powerscale_api.create_job(\u0027Revert to SnapShot\u0027, params)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bdecfd41_01775717","line":638,"range":{"start_line":638,"start_character":25,"end_line":638,"end_character":48},"in_reply_to":"e9f61449_5ddf5141","updated":"2025-12-01 12:46:41.000000000","message":"Done","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"36acb6d3f548dba430852e1f21e07809dcf4a023","unresolved":true,"context_lines":[{"line_number":121,"context_line":"        max_share_size \u003d share[\u0027size\u0027] * units.Gi"},{"line_number":122,"context_line":"        self._powerscale_api.quota_create("},{"line_number":123,"context_line":"            self._get_container_path(share), \u0027directory\u0027, max_share_size)"},{"line_number":124,"context_line":"        self._check_domain_mark(share)"},{"line_number":125,"context_line":"        return location"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _check_domain_mark(self, share):"}],"source_content_type":"text/x-python","patch_set":7,"id":"69b55f72_f8a7c8cf","line":124,"range":{"start_line":124,"start_character":0,"end_line":124,"end_character":38},"updated":"2026-02-05 19:35:29.000000000","message":"my understanding from this change is that the DomainMark is needed for reverting snapshots in a share.\n\ncurious if there is any chance of this sync job failing? What would be the consequence of it? Do you need to think through any more prompting or assistance from the driver?\n\nIf there is, a mitigation I can think of is using the \"ensure_shares\" mechanism to establish the domain mark.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        max_share_size \u003d share[\u0027size\u0027] * units.Gi"},{"line_number":122,"context_line":"        self._powerscale_api.quota_create("},{"line_number":123,"context_line":"            self._get_container_path(share), \u0027directory\u0027, max_share_size)"},{"line_number":124,"context_line":"        self._check_domain_mark(share)"},{"line_number":125,"context_line":"        return location"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _check_domain_mark(self, share):"}],"source_content_type":"text/x-python","patch_set":7,"id":"39764a46_95fdac0f","line":124,"range":{"start_line":124,"start_character":0,"end_line":124,"end_character":38},"in_reply_to":"69b55f72_f8a7c8cf","updated":"2026-03-06 07:53:41.000000000","message":"There are 99% chances the job is not getting failed, because we are creating this job during the share create, and if job is getting failed then in that case share creation also gets fail.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"36acb6d3f548dba430852e1f21e07809dcf4a023","unresolved":true,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _check_domain_mark(self, share):"},{"line_number":128,"context_line":"        share_type_id \u003d share[\u0027share_type_id\u0027]"},{"line_number":129,"context_line":"        revert_snap_support \u003d ("},{"line_number":130,"context_line":"            share_types."},{"line_number":131,"context_line":"            get_share_type_extra_specs(share_type_id,"},{"line_number":132,"context_line":"                                       \"revert_to_snapshot_support\"))"},{"line_number":133,"context_line":"        if revert_snap_support:"},{"line_number":134,"context_line":"            params \u003d {"},{"line_number":135,"context_line":"                \u0027type\u0027: \u0027DomainMark\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"b2582a58_13491d12","line":132,"range":{"start_line":129,"start_character":0,"end_line":132,"end_character":69},"updated":"2026-02-05 19:35:29.000000000","message":"nit: \n\n\n\n```suggestion\n      revert_snap_support \u003d share_types.get_share_type_extra_specs(\n          share_type_id, \"revert_to_snapshot_support\")\n```","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def _check_domain_mark(self, share):"},{"line_number":128,"context_line":"        share_type_id \u003d share[\u0027share_type_id\u0027]"},{"line_number":129,"context_line":"        revert_snap_support \u003d ("},{"line_number":130,"context_line":"            share_types."},{"line_number":131,"context_line":"            get_share_type_extra_specs(share_type_id,"},{"line_number":132,"context_line":"                                       \"revert_to_snapshot_support\"))"},{"line_number":133,"context_line":"        if revert_snap_support:"},{"line_number":134,"context_line":"            params \u003d {"},{"line_number":135,"context_line":"                \u0027type\u0027: \u0027DomainMark\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ad7c7bc_bb024dfb","line":132,"range":{"start_line":129,"start_character":0,"end_line":132,"end_character":69},"in_reply_to":"b2582a58_13491d12","updated":"2026-03-06 07:53:41.000000000","message":"Done","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f7be2787b6e357ae7c14c095308fd1c698ab61b1","unresolved":true,"context_lines":[{"line_number":411,"context_line":"            \u0027max_over_subscription_ratio\u0027:"},{"line_number":412,"context_line":"                self.max_over_subscription_ratio,"},{"line_number":413,"context_line":"            \u0027thin_provisioning\u0027: True,"},{"line_number":414,"context_line":"            \u0027revert_to_snapshot_support\u0027: True,"},{"line_number":415,"context_line":"        }"},{"line_number":416,"context_line":"        spaces \u003d self._powerscale_api.get_space_stats()"},{"line_number":417,"context_line":"        if spaces:"}],"source_content_type":"text/x-python","patch_set":7,"id":"02923c31_326ea810","line":414,"range":{"start_line":414,"start_character":12,"end_line":414,"end_character":47},"updated":"2026-02-24 06:00:43.000000000","message":"Does the user need a license to use this feature? If so, the value should depend on whether the license is installed on the storage.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":411,"context_line":"            \u0027max_over_subscription_ratio\u0027:"},{"line_number":412,"context_line":"                self.max_over_subscription_ratio,"},{"line_number":413,"context_line":"            \u0027thin_provisioning\u0027: True,"},{"line_number":414,"context_line":"            \u0027revert_to_snapshot_support\u0027: True,"},{"line_number":415,"context_line":"        }"},{"line_number":416,"context_line":"        spaces \u003d self._powerscale_api.get_space_stats()"},{"line_number":417,"context_line":"        if spaces:"}],"source_content_type":"text/x-python","patch_set":7,"id":"639f2e33_3ce04aa7","line":414,"range":{"start_line":414,"start_character":12,"end_line":414,"end_character":47},"in_reply_to":"02923c31_326ea810","updated":"2026-03-06 07:53:41.000000000","message":"Does not required any license for this.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"36acb6d3f548dba430852e1f21e07809dcf4a023","unresolved":true,"context_lines":[{"line_number":635,"context_line":"        provider_location \u003d snapshot.get(\u0027provider_location\u0027)"},{"line_number":636,"context_line":"        if not provider_location:"},{"line_number":637,"context_line":"            message \u003d (_(\u0027Failed to revert snapshot %(snap)s, \u0027"},{"line_number":638,"context_line":"                         \u0027missing provider location .\u0027) %"},{"line_number":639,"context_line":"                       {\u0027snap\u0027: snapshot[\u0027name\u0027]})"},{"line_number":640,"context_line":"            LOG.error(message)"},{"line_number":641,"context_line":"            raise exception.ShareBackendException(msg\u003dmessage)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9d02537d_bfe4f978","line":638,"range":{"start_line":638,"start_character":51,"end_line":638,"end_character":52},"updated":"2026-02-05 19:35:29.000000000","message":"nit: extra space","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        provider_location \u003d snapshot.get(\u0027provider_location\u0027)"},{"line_number":636,"context_line":"        if not provider_location:"},{"line_number":637,"context_line":"            message \u003d (_(\u0027Failed to revert snapshot %(snap)s, \u0027"},{"line_number":638,"context_line":"                         \u0027missing provider location .\u0027) %"},{"line_number":639,"context_line":"                       {\u0027snap\u0027: snapshot[\u0027name\u0027]})"},{"line_number":640,"context_line":"            LOG.error(message)"},{"line_number":641,"context_line":"            raise exception.ShareBackendException(msg\u003dmessage)"}],"source_content_type":"text/x-python","patch_set":7,"id":"36c80628_ec29f9e4","line":638,"range":{"start_line":638,"start_character":51,"end_line":638,"end_character":52},"in_reply_to":"9d02537d_bfe4f978","updated":"2026-03-06 07:53:41.000000000","message":"Done","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f7be2787b6e357ae7c14c095308fd1c698ab61b1","unresolved":true,"context_lines":[{"line_number":638,"context_line":"                         \u0027missing provider location .\u0027) %"},{"line_number":639,"context_line":"                       {\u0027snap\u0027: snapshot[\u0027name\u0027]})"},{"line_number":640,"context_line":"            LOG.error(message)"},{"line_number":641,"context_line":"            raise exception.ShareBackendException(msg\u003dmessage)"},{"line_number":642,"context_line":"        params \u003d {"},{"line_number":643,"context_line":"            \u0027type\u0027: \u0027SnapRevert\u0027,"},{"line_number":644,"context_line":"            \u0027priority\u0027: 10,"}],"source_content_type":"text/x-python","patch_set":7,"id":"f910bfa8_e6ab2ea9","line":641,"range":{"start_line":641,"start_character":12,"end_line":641,"end_character":62},"updated":"2026-02-24 06:00:43.000000000","message":"This is a generic exception for share. Since this is driver code, it is better to create the exception class in manila.exception.py file and use that instead. This comment applies to all instances where this generic exception is used.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":638,"context_line":"                         \u0027missing provider location .\u0027) %"},{"line_number":639,"context_line":"                       {\u0027snap\u0027: snapshot[\u0027name\u0027]})"},{"line_number":640,"context_line":"            LOG.error(message)"},{"line_number":641,"context_line":"            raise exception.ShareBackendException(msg\u003dmessage)"},{"line_number":642,"context_line":"        params \u003d {"},{"line_number":643,"context_line":"            \u0027type\u0027: \u0027SnapRevert\u0027,"},{"line_number":644,"context_line":"            \u0027priority\u0027: 10,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7e9ba517_c6b5e4bd","line":641,"range":{"start_line":641,"start_character":12,"end_line":641,"end_character":62},"in_reply_to":"f910bfa8_e6ab2ea9","updated":"2026-03-06 07:53:41.000000000","message":"Yes we are using Generic exception, changing to Class level exception not possible because needs to changes for all exception, keeping this as it is, will discuss with team and check how can we add that.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"}],"manila/share/drivers/dell_emc/plugins/powerscale/powerscale_api.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ccfd3e2df7e9a72ae6a049bcca097766f87701de","unresolved":true,"context_lines":[{"line_number":514,"context_line":"        interval \u003d self.job_interval"},{"line_number":515,"context_line":"        cancel_job \u003d True"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        def _wait_for_job_complete():"},{"line_number":518,"context_line":"            nonlocal retries, status, is_complete, cancel_job"},{"line_number":519,"context_line":"            try:"},{"line_number":520,"context_line":"                retries +\u003d 1"},{"line_number":521,"context_line":"                LOG.debug(\"Checking status for job %s (attempt %d/%d)\","},{"line_number":522,"context_line":"                          job_id, retries, max_retries)"},{"line_number":523,"context_line":"                if not is_complete:"},{"line_number":524,"context_line":"                    (current_job_complete,"},{"line_number":525,"context_line":"                     current_job_status) \u003d self._get_job_status(job_id)"},{"line_number":526,"context_line":"                    if current_job_complete:"},{"line_number":527,"context_line":"                        is_complete \u003d True"},{"line_number":528,"context_line":"                        status \u003d current_job_status"},{"line_number":529,"context_line":"                        cancel_job \u003d False"},{"line_number":530,"context_line":"                        LOG.info(\"Job %s completed with status: \""},{"line_number":531,"context_line":"                                 \"%s (after %d attempts)\","},{"line_number":532,"context_line":"                                 job_id, status, retries)"},{"line_number":533,"context_line":"            except Exception as e:"},{"line_number":534,"context_line":"                exception_message \u003d _(\"Issue encountered waiting for job \""},{"line_number":535,"context_line":"                                      \"%s (attempt %d/%d): %s\") % ("},{"line_number":536,"context_line":"                    job_id, retries, max_retries, str(e))"},{"line_number":537,"context_line":"                LOG.error(exception_message)"},{"line_number":538,"context_line":"                if retries \u003e\u003d max_retries:"},{"line_number":539,"context_line":"                    status \u003d \u0027failed\u0027"},{"line_number":540,"context_line":"                    LOG.error(\"Max retries reached (%d) for job %s. \""},{"line_number":541,"context_line":"                              \"Marking as failed.\","},{"line_number":542,"context_line":"                              max_retries, job_id)"},{"line_number":543,"context_line":"                    raise loopingcall.LoopingCallDone()"},{"line_number":544,"context_line":"                return"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            if retries \u003e\u003d max_retries:"},{"line_number":547,"context_line":"                LOG.error(\"Job %s status check failed after \""},{"line_number":548,"context_line":"                          \"%d attempts (max %d)\","},{"line_number":549,"context_line":"                          job_id, retries, max_retries)"},{"line_number":550,"context_line":"                status \u003d \u0027failed\u0027"},{"line_number":551,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"            if is_complete:"},{"line_number":554,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        retries \u003d 0"},{"line_number":557,"context_line":"        status \u003d \u0027unknown\u0027"},{"line_number":558,"context_line":"        is_complete \u003d False"},{"line_number":559,"context_line":"        LOG.info(\"Starting job status polling for job ID: \""},{"line_number":560,"context_line":"                 \"%s (max retries: %d, interval: %ds)\","},{"line_number":561,"context_line":"                 job_id, max_retries, interval)"},{"line_number":562,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_wait_for_job_complete)"},{"line_number":563,"context_line":"        timer.start(interval\u003dinterval).wait()"},{"line_number":564,"context_line":"        return status, cancel_job"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"    def _get_job_status(self, job_id):"},{"line_number":567,"context_line":"        response \u003d self.send_get_request("}],"source_content_type":"text/x-python","patch_set":3,"id":"0b4b9a6b_28fb9afa","line":564,"range":{"start_line":517,"start_character":0,"end_line":564,"end_character":33},"updated":"2025-11-06 18:13:55.000000000","message":"Can you use the retry decorator in manila.utils? I\u0027d avoid directly relying on loopingcall because that implementation currently depends on the eventlet library; and we\u0027re actively working on removing that from OpenStack [1]. Manila\u0027s \"retry\" functionality depends on tenacity, a different/supported library [2] - even if eventlet\u0027s monkey patching sleep right now, when the code base no longer supports eventlet, your code will be unaffected if you use the retry method.\n\n\n[1] https://governance.openstack.org/tc/goals/selected/remove-eventlet.html\n[2] https://github.com/openstack/manila/blob/5aff8e63620f07fac44e7dc49df0a5706fb59110/manila/utils.py#L383-L390","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e30d98b60fb848a56bd5be39b189297ce1033e57","unresolved":false,"context_lines":[{"line_number":514,"context_line":"        interval \u003d self.job_interval"},{"line_number":515,"context_line":"        cancel_job \u003d True"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        def _wait_for_job_complete():"},{"line_number":518,"context_line":"            nonlocal retries, status, is_complete, cancel_job"},{"line_number":519,"context_line":"            try:"},{"line_number":520,"context_line":"                retries +\u003d 1"},{"line_number":521,"context_line":"                LOG.debug(\"Checking status for job %s (attempt %d/%d)\","},{"line_number":522,"context_line":"                          job_id, retries, max_retries)"},{"line_number":523,"context_line":"                if not is_complete:"},{"line_number":524,"context_line":"                    (current_job_complete,"},{"line_number":525,"context_line":"                     current_job_status) \u003d self._get_job_status(job_id)"},{"line_number":526,"context_line":"                    if current_job_complete:"},{"line_number":527,"context_line":"                        is_complete \u003d True"},{"line_number":528,"context_line":"                        status \u003d current_job_status"},{"line_number":529,"context_line":"                        cancel_job \u003d False"},{"line_number":530,"context_line":"                        LOG.info(\"Job %s completed with status: \""},{"line_number":531,"context_line":"                                 \"%s (after %d attempts)\","},{"line_number":532,"context_line":"                                 job_id, status, retries)"},{"line_number":533,"context_line":"            except Exception as e:"},{"line_number":534,"context_line":"                exception_message \u003d _(\"Issue encountered waiting for job \""},{"line_number":535,"context_line":"                                      \"%s (attempt %d/%d): %s\") % ("},{"line_number":536,"context_line":"                    job_id, retries, max_retries, str(e))"},{"line_number":537,"context_line":"                LOG.error(exception_message)"},{"line_number":538,"context_line":"                if retries \u003e\u003d max_retries:"},{"line_number":539,"context_line":"                    status \u003d \u0027failed\u0027"},{"line_number":540,"context_line":"                    LOG.error(\"Max retries reached (%d) for job %s. \""},{"line_number":541,"context_line":"                              \"Marking as failed.\","},{"line_number":542,"context_line":"                              max_retries, job_id)"},{"line_number":543,"context_line":"                    raise loopingcall.LoopingCallDone()"},{"line_number":544,"context_line":"                return"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            if retries \u003e\u003d max_retries:"},{"line_number":547,"context_line":"                LOG.error(\"Job %s status check failed after \""},{"line_number":548,"context_line":"                          \"%d attempts (max %d)\","},{"line_number":549,"context_line":"                          job_id, retries, max_retries)"},{"line_number":550,"context_line":"                status \u003d \u0027failed\u0027"},{"line_number":551,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"            if is_complete:"},{"line_number":554,"context_line":"                raise loopingcall.LoopingCallDone()"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"        retries \u003d 0"},{"line_number":557,"context_line":"        status \u003d \u0027unknown\u0027"},{"line_number":558,"context_line":"        is_complete \u003d False"},{"line_number":559,"context_line":"        LOG.info(\"Starting job status polling for job ID: \""},{"line_number":560,"context_line":"                 \"%s (max retries: %d, interval: %ds)\","},{"line_number":561,"context_line":"                 job_id, max_retries, interval)"},{"line_number":562,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_wait_for_job_complete)"},{"line_number":563,"context_line":"        timer.start(interval\u003dinterval).wait()"},{"line_number":564,"context_line":"        return status, cancel_job"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"    def _get_job_status(self, job_id):"},{"line_number":567,"context_line":"        response \u003d self.send_get_request("}],"source_content_type":"text/x-python","patch_set":3,"id":"de8fe38d_7ace51b9","line":564,"range":{"start_line":517,"start_character":0,"end_line":564,"end_character":33},"in_reply_to":"0b4b9a6b_28fb9afa","updated":"2025-12-01 12:46:41.000000000","message":"thanks for the update, have updated retry approach.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ccfd3e2df7e9a72ae6a049bcca097766f87701de","unresolved":true,"context_lines":[{"line_number":562,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_wait_for_job_complete)"},{"line_number":563,"context_line":"        timer.start(interval\u003dinterval).wait()"},{"line_number":564,"context_line":"        return status, cancel_job"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"    def _get_job_status(self, job_id):"},{"line_number":567,"context_line":"        response \u003d self.send_get_request("},{"line_number":568,"context_line":"            \u0027{0}/platform/12/job/jobs/{1}\u0027.format(self.host_url, job_id),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ae5c1f0_2fb20fcc","line":565,"updated":"2025-11-06 18:13:55.000000000","message":"Alternatively, a better approach is to introduce a new share status in manila: perhaps, \"REVERTING_TO_SNAPSHOT\". By doing this, the driver can initiate the revert operation and return to the share manager; and, the share manager can poll repeatedly [1] for shares in this state and wait for their completion. The driver needs to implement \"get_share_status\" to facilitate this: \n\nhttps://github.com/openstack/manila/blob/5aff8e63620f07fac44e7dc49df0a5706fb59110/manila/share/manager.py#L5803\n\nWe\u0027ve done this with cloning snapshots into new shares where we recognize the driver setting a \"CREATING_FROM_SNAPSHOT\" status.\n\n[1] https://github.com/openstack/manila/blob/5aff8e63620f07fac44e7dc49df0a5706fb59110/manila/share/manager.py#L5784-L5795","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"e30d98b60fb848a56bd5be39b189297ce1033e57","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        timer \u003d loopingcall.FixedIntervalLoopingCall(_wait_for_job_complete)"},{"line_number":563,"context_line":"        timer.start(interval\u003dinterval).wait()"},{"line_number":564,"context_line":"        return status, cancel_job"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"    def _get_job_status(self, job_id):"},{"line_number":567,"context_line":"        response \u003d self.send_get_request("},{"line_number":568,"context_line":"            \u0027{0}/platform/12/job/jobs/{1}\u0027.format(self.host_url, job_id),"}],"source_content_type":"text/x-python","patch_set":3,"id":"e03c2788_1205cd51","line":565,"in_reply_to":"7ae5c1f0_2fb20fcc","updated":"2025-12-01 12:46:41.000000000","message":"going with rerty approach.","commit_id":"4399d456a1d1c3d8ae486c74f4e0d6b000b238e0"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f7be2787b6e357ae7c14c095308fd1c698ab61b1","unresolved":true,"context_lines":[{"line_number":493,"context_line":"        \"\"\"Create and monitor async job for PowerScale Manila driver.\"\"\""},{"line_number":494,"context_line":"        url \u003d f\"{self.host_url}/platform/12/job/jobs\""},{"line_number":495,"context_line":"        response \u003d self.send_post_request(url, data\u003dparams)"},{"line_number":496,"context_line":"        if response.status_code !\u003d 201:"},{"line_number":497,"context_line":"            message \u003d (_(\"Failed to create job for operation %(operation)s \""},{"line_number":498,"context_line":"                         \"with params %(params)s. Response: %(resp)s\") %"},{"line_number":499,"context_line":"                       {\u0027operation\u0027: operation, \u0027params\u0027: str(params),"}],"source_content_type":"text/x-python","patch_set":7,"id":"f24049fd_b49798e3","line":496,"range":{"start_line":496,"start_character":35,"end_line":496,"end_character":38},"updated":"2026-02-24 06:00:43.000000000","message":"Can you move all the response code to string or enums.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        \"\"\"Create and monitor async job for PowerScale Manila driver.\"\"\""},{"line_number":494,"context_line":"        url \u003d f\"{self.host_url}/platform/12/job/jobs\""},{"line_number":495,"context_line":"        response \u003d self.send_post_request(url, data\u003dparams)"},{"line_number":496,"context_line":"        if response.status_code !\u003d 201:"},{"line_number":497,"context_line":"            message \u003d (_(\"Failed to create job for operation %(operation)s \""},{"line_number":498,"context_line":"                         \"with params %(params)s. Response: %(resp)s\") %"},{"line_number":499,"context_line":"                       {\u0027operation\u0027: operation, \u0027params\u0027: str(params),"}],"source_content_type":"text/x-python","patch_set":7,"id":"cb5004b9_c1cb3f85","line":496,"range":{"start_line":496,"start_character":35,"end_line":496,"end_character":38},"in_reply_to":"f24049fd_b49798e3","updated":"2026-03-06 07:53:41.000000000","message":"This we will consider as next improvement plan for all response.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"36acb6d3f548dba430852e1f21e07809dcf4a023","unresolved":true,"context_lines":[{"line_number":506,"context_line":"                  {\u0027job_id\u0027: job_id, \u0027operation\u0027: operation,"},{"line_number":507,"context_line":"                   \u0027params\u0027: str(params)})"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        @utils.retry("},{"line_number":510,"context_line":"            retry_param\u003dexception.ShareBackendException,"},{"line_number":511,"context_line":"            interval\u003dself.job_interval,"},{"line_number":512,"context_line":"            retries\u003dself.job_retries,"},{"line_number":513,"context_line":"            backoff_rate\u003d1)"},{"line_number":514,"context_line":"        def wait_for_job_complete():"},{"line_number":515,"context_line":"            complete, current_status \u003d self._get_job_status(job_id)"},{"line_number":516,"context_line":"            if complete:"}],"source_content_type":"text/x-python","patch_set":7,"id":"437cb891_f5c6b388","line":513,"range":{"start_line":509,"start_character":8,"end_line":513,"end_character":27},"updated":"2026-02-05 19:35:29.000000000","message":"effectively with default values this is 600s. \n\nHowever, the design is a bit flawed for multiple reasons:\n\n1) If, for any reason the share manager is restarted or gets killed during this wait, the share\u0027s status is stuck at \"reverting_to_snapshot\". The only way for an unprivileged end user of the cloud to recover from this is to consult their cloud administrator to change the share\u0027s status. However, just doing that wouldn\u0027t be safe. We\u0027ve no clue if the revert has succeeded, or is still in progress. The user can\u0027t retry their action because that would fail if the previous job is in progress. \n\n2) Without tweaking the default configuration values, this wait extends to 600s. Is that sufficient for shares of all sizes? As we discussed at the collab review session, i\u0027d like to know if you\u0027ve tested large shares that are terabyte or petabyte sized (if the back end allows this)\n\n3) Thread starvation - a backend thread would wait on this revert to occur, and, as a consequence parallel operations could suffer. With eventlet\u0027s greenthreading, we usually don\u0027t care about this.. but, we\u0027re trying to move to python native threading during this release - in this case, we\u0027d pre-configure this process to spawn a handful of threads to allow for parallel processing, and the effect of these long running operations would be more impactful.\n\n4) The alternative approach that i\u0027m suggesting is a good long term fix. I think, after the driver starts the task, it should immediately return to the share manager with a \"status\" update - perhaps \"reverting_to_snapshot\". The share manager should look for this, and update the share\u0027s status accordingly. you\u0027d then extend the periodic task here to ask for the driver\u0027s update to the share https://github.com/openstack/manila/blob/33b38fa8763b37c58a99d8dc4ee9a4a81ac723e3/manila/share/manager.py#L5786-L5795. This means that the driver should implement update_share_status() and implement a job status check so you can tell the manager when the revert operation completes, or if it errors out. \n\nThis solution will avoid all the three problems above. Can you think of any downsides?","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":506,"context_line":"                  {\u0027job_id\u0027: job_id, \u0027operation\u0027: operation,"},{"line_number":507,"context_line":"                   \u0027params\u0027: str(params)})"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"        @utils.retry("},{"line_number":510,"context_line":"            retry_param\u003dexception.ShareBackendException,"},{"line_number":511,"context_line":"            interval\u003dself.job_interval,"},{"line_number":512,"context_line":"            retries\u003dself.job_retries,"},{"line_number":513,"context_line":"            backoff_rate\u003d1)"},{"line_number":514,"context_line":"        def wait_for_job_complete():"},{"line_number":515,"context_line":"            complete, current_status \u003d self._get_job_status(job_id)"},{"line_number":516,"context_line":"            if complete:"}],"source_content_type":"text/x-python","patch_set":7,"id":"8404e2d5_28ff8259","line":513,"range":{"start_line":509,"start_character":8,"end_line":513,"end_character":27},"in_reply_to":"437cb891_f5c6b388","updated":"2026-03-06 07:53:41.000000000","message":"As suggested have added new status for reverting and checking the status on periodic interval in manager.py file.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f7be2787b6e357ae7c14c095308fd1c698ab61b1","unresolved":true,"context_lines":[{"line_number":517,"context_line":"                LOG.info(\"Job %(job_id)s completed with status: %(status)s.\","},{"line_number":518,"context_line":"                         {\u0027job_id\u0027: job_id, \u0027status\u0027: current_status})"},{"line_number":519,"context_line":"                return current_status"},{"line_number":520,"context_line":"            msg \u003d (_(\"Job %(job_id)s for operation %(operation)s \""},{"line_number":521,"context_line":"                     \"is not complete yet. Retrying...\") %"},{"line_number":522,"context_line":"                   {\u0027job_id\u0027: job_id, \u0027operation\u0027: operation})"},{"line_number":523,"context_line":"            LOG.warning(msg)"},{"line_number":524,"context_line":"            raise exception.ShareBackendException(message\u003dmsg)"},{"line_number":525,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"e7b0fe13_b19f6f50","line":522,"range":{"start_line":520,"start_character":11,"end_line":522,"end_character":62},"updated":"2026-02-24 06:00:43.000000000","message":"We need to add the no of retry that will help in debugging the issue.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                LOG.info(\"Job %(job_id)s completed with status: %(status)s.\","},{"line_number":518,"context_line":"                         {\u0027job_id\u0027: job_id, \u0027status\u0027: current_status})"},{"line_number":519,"context_line":"                return current_status"},{"line_number":520,"context_line":"            msg \u003d (_(\"Job %(job_id)s for operation %(operation)s \""},{"line_number":521,"context_line":"                     \"is not complete yet. Retrying...\") %"},{"line_number":522,"context_line":"                   {\u0027job_id\u0027: job_id, \u0027operation\u0027: operation})"},{"line_number":523,"context_line":"            LOG.warning(msg)"},{"line_number":524,"context_line":"            raise exception.ShareBackendException(message\u003dmsg)"},{"line_number":525,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":7,"id":"866f1375_481dede8","line":522,"range":{"start_line":520,"start_character":11,"end_line":522,"end_character":62},"in_reply_to":"e7b0fe13_b19f6f50","updated":"2026-03-06 07:53:41.000000000","message":"As I know we are not adding any retry count, it will getting handle automatic.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f7be2787b6e357ae7c14c095308fd1c698ab61b1","unresolved":true,"context_lines":[{"line_number":521,"context_line":"                     \"is not complete yet. Retrying...\") %"},{"line_number":522,"context_line":"                   {\u0027job_id\u0027: job_id, \u0027operation\u0027: operation})"},{"line_number":523,"context_line":"            LOG.warning(msg)"},{"line_number":524,"context_line":"            raise exception.ShareBackendException(message\u003dmsg)"},{"line_number":525,"context_line":"        try:"},{"line_number":526,"context_line":"            status \u003d wait_for_job_complete()"},{"line_number":527,"context_line":"            if status.lower() \u003d\u003d \"failed\":"}],"source_content_type":"text/x-python","patch_set":7,"id":"f00af034_0463de95","line":524,"range":{"start_line":524,"start_character":28,"end_line":524,"end_character":49},"updated":"2026-02-24 06:00:43.000000000","message":"As mentioned previously, create the custom exception for driver and use it.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":521,"context_line":"                     \"is not complete yet. Retrying...\") %"},{"line_number":522,"context_line":"                   {\u0027job_id\u0027: job_id, \u0027operation\u0027: operation})"},{"line_number":523,"context_line":"            LOG.warning(msg)"},{"line_number":524,"context_line":"            raise exception.ShareBackendException(message\u003dmsg)"},{"line_number":525,"context_line":"        try:"},{"line_number":526,"context_line":"            status \u003d wait_for_job_complete()"},{"line_number":527,"context_line":"            if status.lower() \u003d\u003d \"failed\":"}],"source_content_type":"text/x-python","patch_set":7,"id":"6871d98b_4bbf97bd","line":524,"range":{"start_line":524,"start_character":28,"end_line":524,"end_character":49},"in_reply_to":"f00af034_0463de95","updated":"2026-03-06 07:53:41.000000000","message":"Yes we are using Generic exception, changing to Class level exception not possible because needs to changes for all exception, keeping this as it is, will discuss with team and check how can we add that.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"f7be2787b6e357ae7c14c095308fd1c698ab61b1","unresolved":true,"context_lines":[{"line_number":549,"context_line":"        )"},{"line_number":550,"context_line":"        if response.status_code \u003d\u003d 200:"},{"line_number":551,"context_line":"            status \u003d response.json()[\u0027jobs\u0027][0][\u0027state\u0027]"},{"line_number":552,"context_line":"            if status.lower() in (\u0027failed\u0027, \u0027succeeded\u0027):"},{"line_number":553,"context_line":"                return True, status"},{"line_number":554,"context_line":"            return False, status"},{"line_number":555,"context_line":"        return True, \u0027failed\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"f45c356d_045e9500","line":552,"range":{"start_line":552,"start_character":12,"end_line":552,"end_character":57},"updated":"2026-02-24 06:00:43.000000000","message":"We have only 2 status for job, you don\u0027t have the status of in-progress or something like that. So, what is the status of job when it not completed.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        )"},{"line_number":550,"context_line":"        if response.status_code \u003d\u003d 200:"},{"line_number":551,"context_line":"            status \u003d response.json()[\u0027jobs\u0027][0][\u0027state\u0027]"},{"line_number":552,"context_line":"            if status.lower() in (\u0027failed\u0027, \u0027succeeded\u0027):"},{"line_number":553,"context_line":"                return True, status"},{"line_number":554,"context_line":"            return False, status"},{"line_number":555,"context_line":"        return True, \u0027failed\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"ec98ea1e_852d9568","line":552,"range":{"start_line":552,"start_character":12,"end_line":552,"end_character":57},"in_reply_to":"f45c356d_045e9500","updated":"2026-03-06 07:53:41.000000000","message":"There are many status but we are checking only failed,succeeded to avoid other statuses check, we assume no one changing the status manual from OneFS UI.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"64257a5434fee49424fa9218b20c3f571f468ece","unresolved":true,"context_lines":[{"line_number":559,"context_line":"            \u0027priority\u0027: 10,"},{"line_number":560,"context_line":"            \u0027state\u0027: \u0027cancel\u0027"},{"line_number":561,"context_line":"        }"},{"line_number":562,"context_line":"        url \u003d (\u0027{0}/platform/12/job/jobs/{1}\u0027"},{"line_number":563,"context_line":"               .format(self.host_url, job_id))"},{"line_number":564,"context_line":"        r \u003d self.send_put_request(url, data\u003ddata)"},{"line_number":565,"context_line":"        return r.status_code \u003d\u003d 204"}],"source_content_type":"text/x-python","patch_set":7,"id":"17a9436a_85a44a22","line":562,"updated":"2026-02-19 16:07:52.000000000","message":"What is the significance of /platform/12/ here? Is 12 a fixed type? If so, should it come from a constant?","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"1ecf5fe6159da46700caa065905223d619d34d04","unresolved":false,"context_lines":[{"line_number":559,"context_line":"            \u0027priority\u0027: 10,"},{"line_number":560,"context_line":"            \u0027state\u0027: \u0027cancel\u0027"},{"line_number":561,"context_line":"        }"},{"line_number":562,"context_line":"        url \u003d (\u0027{0}/platform/12/job/jobs/{1}\u0027"},{"line_number":563,"context_line":"               .format(self.host_url, job_id))"},{"line_number":564,"context_line":"        r \u003d self.send_put_request(url, data\u003ddata)"},{"line_number":565,"context_line":"        return r.status_code \u003d\u003d 204"}],"source_content_type":"text/x-python","patch_set":7,"id":"862af967_40149232","line":562,"in_reply_to":"17a9436a_85a44a22","updated":"2026-03-06 07:53:41.000000000","message":"Added constant for that.","commit_id":"e2f9def744979a107664215d51623ebe3634a03e"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"00523f8b4578817bf669d6965d3e5a4e1ae253f6","unresolved":true,"context_lines":[{"line_number":655,"context_line":"                LOG.error(message)"},{"line_number":656,"context_line":"                raise exception.ShareBackendException(message\u003dmessage)"},{"line_number":657,"context_line":"        except exception.ShareBackendException:"},{"line_number":658,"context_line":"            self._cancel_job(job_id)"},{"line_number":659,"context_line":"            message \u003d (_(\"Job %(job_id)s failed for operation %(operation)s \""},{"line_number":660,"context_line":"                         \"with params %(params)s.\") %"},{"line_number":661,"context_line":"                       {\u0027job_id\u0027: job_id, \u0027operation\u0027: operation,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9d77ce9c_d2a9fd4c","line":658,"updated":"2026-04-17 07:42:06.000000000","message":"Won\u0027t this also get called for failed status? Ideally failed should be a terminal state of job and you should not require to cancel a failed job.","commit_id":"82a4eb71793b5e210044a73b860013fad65ca69d"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"78bfec37a878dbe0192b6fbd4a40fea23ece8e9d","unresolved":false,"context_lines":[{"line_number":655,"context_line":"                LOG.error(message)"},{"line_number":656,"context_line":"                raise exception.ShareBackendException(message\u003dmessage)"},{"line_number":657,"context_line":"        except exception.ShareBackendException:"},{"line_number":658,"context_line":"            self._cancel_job(job_id)"},{"line_number":659,"context_line":"            message \u003d (_(\"Job %(job_id)s failed for operation %(operation)s \""},{"line_number":660,"context_line":"                         \"with params %(params)s.\") %"},{"line_number":661,"context_line":"                       {\u0027job_id\u0027: job_id, \u0027operation\u0027: operation,"}],"source_content_type":"text/x-python","patch_set":13,"id":"8e0242e3_1bb6dce9","line":658,"in_reply_to":"9d77ce9c_d2a9fd4c","updated":"2026-05-11 09:23:54.000000000","message":"No, for a failed status we do not need to call cancel_job.\nThe job will automatically complete with a failed status.\ncancel_job is required only when we are unable to determine a success or failure status within the configured timeout window. In practice, this situation is rare, as we receive a definitive status within the configured time in about 99% of cases.","commit_id":"82a4eb71793b5e210044a73b860013fad65ca69d"}],"manila/share/manager.py":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"00523f8b4578817bf669d6965d3e5a4e1ae253f6","unresolved":true,"context_lines":[{"line_number":3681,"context_line":"            if isinstance(result, dict):"},{"line_number":3682,"context_line":"                status \u003d result.get(\u0027status\u0027, status)"},{"line_number":3683,"context_line":"            else:"},{"line_number":3684,"context_line":"                updated_share_size \u003d result"},{"line_number":3685,"context_line":"        except Exception as excep:"},{"line_number":3686,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3687,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"f6673f23_25d2b04c","line":3684,"updated":"2026-04-17 07:42:06.000000000","message":"Does the provisioned space of a share change on revert? Ideally it should be the used and available space that changes when inplace revert is called.","commit_id":"82a4eb71793b5e210044a73b860013fad65ca69d"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"78bfec37a878dbe0192b6fbd4a40fea23ece8e9d","unresolved":false,"context_lines":[{"line_number":3681,"context_line":"            if isinstance(result, dict):"},{"line_number":3682,"context_line":"                status \u003d result.get(\u0027status\u0027, status)"},{"line_number":3683,"context_line":"            else:"},{"line_number":3684,"context_line":"                updated_share_size \u003d result"},{"line_number":3685,"context_line":"        except Exception as excep:"},{"line_number":3686,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3687,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ed1ba7b2_b1e787d5","line":3684,"in_reply_to":"f6673f23_25d2b04c","updated":"2026-05-11 09:23:54.000000000","message":"We do not require that. I have already tested this scenario, and it is not needed. The system automatically handles the size based on the snapshot size, so there is no need for us to explicitly return or set the size.","commit_id":"82a4eb71793b5e210044a73b860013fad65ca69d"}],"releasenotes/notes/bp-dell-powerscale-revert-to-snapshot-aaf115548e3b43cf.yaml":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"00523f8b4578817bf669d6965d3e5a4e1ae253f6","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for revert to snapshot on Dell PowerScale."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"c6b5d28a_6b9fb521","line":4,"updated":"2026-04-17 07:42:06.000000000","message":"release notes should be detailed. May be you can consider adding more details of the feature including the job retry and timeouts here.","commit_id":"82a4eb71793b5e210044a73b860013fad65ca69d"},{"author":{"_account_id":36725,"name":"Nilesh Thathagar","display_name":"Nilesh Thathagar","email":"nilesh.thathagar@dell.com","username":"NileshT"},"change_message_id":"78bfec37a878dbe0192b6fbd4a40fea23ece8e9d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for revert to snapshot on Dell PowerScale."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"4e745d14_2aa795d4","line":4,"in_reply_to":"c6b5d28a_6b9fb521","updated":"2026-05-11 09:23:54.000000000","message":"Done","commit_id":"82a4eb71793b5e210044a73b860013fad65ca69d"}]}
