)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"b096a45b2b3f80dfc0bb9027458dde018c362ea4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"3378edcc_2a8f89ad","updated":"2026-07-29 12:39:23.000000000","message":"Started reviewing the code.","commit_id":"4b37a4900d334098111df92f2c916e3b3d579067"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"ea8fd70902a6f6b366f70204b5fd0c9ec73cff52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"be829364_d2169881","updated":"2026-07-29 13:05:36.000000000","message":"Provided some comments. Please take a look.","commit_id":"2db49c6241807d5be493a60b4fcccb794aa72bf7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":37,"id":"1160bb8c_e00cb5f5","updated":"2026-07-31 14:47:34.000000000","message":"Thanks for working on this change, Gireesh. I\u0027m still going through share/manager and share/api code but wanted to post some of the thoughts here.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"908e99b2_cb5adddb","updated":"2026-08-05 19:46:54.000000000","message":"Thanks @ces.eduardo98@gmail.com, @anoop.shukla@netapp.com and @kinpaa@gmail.com for your review comments. I have incorporated those, please take a look and feel free to reopen the comment if you are not agree with my point.","commit_id":"e3380f15072b0cf980b1979bbe2721d0377a7d19"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"543fe50a2438dac159a8f3f0a2bb835e3bcd3967","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"f75f2ba7_bbc053fc","updated":"2026-08-06 12:47:23.000000000","message":"@manideep.openstack@gmail.com, Added few comments on promote, please take look.","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"b396d59f_1fb14022","updated":"2026-08-06 06:17:26.000000000","message":"started looking throiugh this; not done yet.. just noting some early comments","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":47,"id":"10ebd879_6d290dd6","updated":"2026-08-08 11:10:37.000000000","message":"Thanks @gouthampravi@gmail.com and @kinpaa@gmail.com for you valuable review comments, please take a look and feel free to reopen the comment if require.","commit_id":"5293abc1476ddf3fc02ad931872ec72b487bdf34"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"6c75012357779b0f43a25051187af943592601e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":50,"id":"161706c8_dc78a78c","updated":"2026-08-16 06:03:57.000000000","message":"@manideep.openstack@gmail.com Added few comments on check_for_unplanned_share_server_replica_failover() lifecycle hook, please address them.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"d0d40127136953041d2a64ca1b378ec3be12fbc4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":50,"id":"df016824_c2cd316f","updated":"2026-08-13 05:32:05.000000000","message":"recheck","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"bd91f57fd9bab96317867b93605923c22b3b735b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":55,"id":"6c8c8e03_6f0a0ff5","updated":"2026-08-19 13:27:54.000000000","message":"@manideep.openstack@gmail.com Please address this comment","commit_id":"7dfd23926136b300fc723f70bb7d163f0e889658"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"b991f5a4d1801d06e640490429355c1f419e7af7","unresolved":true,"context_lines":[{"line_number":3840,"context_line":"share_server_replica_status:"},{"line_number":3841,"context_line":"  description: |"},{"line_number":3842,"context_line":"    The status of a share server replica. List of possible values:"},{"line_number":3843,"context_line":"    ``available``, ``inactive``, ``creating``, ``deleting``, ``active``,"},{"line_number":3844,"context_line":"    ``error``, or ``error_deleting``."},{"line_number":3845,"context_line":"  in: body"},{"line_number":3846,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"3dd654d2_7fff6fd6","line":3843,"updated":"2026-08-03 09:32:42.000000000","message":"We will need \u0027promoting\u0027 when the ssr is getting promoted.","commit_id":"abb7ab9b0320e3c1aebc1c54b4c87c2047cde385"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":3840,"context_line":"share_server_replica_status:"},{"line_number":3841,"context_line":"  description: |"},{"line_number":3842,"context_line":"    The status of a share server replica. List of possible values:"},{"line_number":3843,"context_line":"    ``available``, ``inactive``, ``creating``, ``deleting``, ``active``,"},{"line_number":3844,"context_line":"    ``error``, or ``error_deleting``."},{"line_number":3845,"context_line":"  in: body"},{"line_number":3846,"context_line":"  required: true"}],"source_content_type":"text/x-yaml","patch_set":39,"id":"351df10c_d23683ba","line":3843,"in_reply_to":"3dd654d2_7fff6fd6","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"abb7ab9b0320e3c1aebc1c54b4c87c2047cde385"}],"api-ref/source/share-server-replicas.inc":[{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"b991f5a4d1801d06e640490429355c1f419e7af7","unresolved":true,"context_lines":[{"line_number":121,"context_line":"List share server replicas with details"},{"line_number":122,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. rest_method::  GET /v2/share-server-replicas/detail"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":".. versionadded:: 2.98"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":39,"id":"a7a3efb6_ad31d596","line":124,"updated":"2026-08-03 09:32:42.000000000","message":"Is it possible to make detail a query param ?","commit_id":"abb7ab9b0320e3c1aebc1c54b4c87c2047cde385"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":121,"context_line":"List share server replicas with details"},{"line_number":122,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. rest_method::  GET /v2/share-server-replicas/detail"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":".. versionadded:: 2.98"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":39,"id":"297d6ef5_ad479654","line":124,"in_reply_to":"a7a3efb6_ad31d596","updated":"2026-08-05 19:46:54.000000000","message":"It is inline with exising API support for other obejct, so wanted to same with share server replica.\nexp: \n/v2/snapshot-instances/detail\nList share snapshot instances with details","commit_id":"abb7ab9b0320e3c1aebc1c54b4c87c2047cde385"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"Share server replicas provide replication and failover controls for"},{"line_number":7,"context_line":"multi-tenant share servers."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Create share server replica"}],"source_content_type":"text/x-c++src","patch_set":42,"id":"201ac1ef_454f012d","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":13},"updated":"2026-08-06 06:17:26.000000000","message":"drop","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"Share server replicas provide replication and failover controls for"},{"line_number":7,"context_line":"multi-tenant share servers."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Create share server replica"}],"source_content_type":"text/x-c++src","patch_set":42,"id":"f5ea2b49_b6ea06fa","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":13},"in_reply_to":"201ac1ef_454f012d","updated":"2026-08-08 11:10:37.000000000","message":"Done","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":40,"context_line":"   - share_server: share_server_replica_share_server"},{"line_number":41,"context_line":"   - availability_zone: share_replica_az"},{"line_number":42,"context_line":"   - metadata: share_replica_metadata_request"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Request example"},{"line_number":45,"context_line":"---------------"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":42,"id":"0aa518aa_21f6873e","line":43,"updated":"2026-08-06 06:17:26.000000000","message":"network?","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"   - share_server: share_server_replica_share_server"},{"line_number":41,"context_line":"   - availability_zone: share_replica_az"},{"line_number":42,"context_line":"   - metadata: share_replica_metadata_request"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Request example"},{"line_number":45,"context_line":"---------------"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":42,"id":"8245d29e_0ac77c55","line":43,"in_reply_to":"0aa518aa_21f6873e","updated":"2026-08-08 11:10:37.000000000","message":"Added.","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":97,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"   - project_id: project_id_path"},{"line_number":100,"context_line":"   - share_server_id: share_server_id_path"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Response parameters"},{"line_number":103,"context_line":"-------------------"}],"source_content_type":"text/x-c++src","patch_set":42,"id":"b438f928_8819e670","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":42},"updated":"2026-08-06 06:17:26.000000000","message":"list doesn\u0027t need this","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":97,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"   - project_id: project_id_path"},{"line_number":100,"context_line":"   - share_server_id: share_server_id_path"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Response parameters"},{"line_number":103,"context_line":"-------------------"}],"source_content_type":"text/x-c++src","patch_set":42,"id":"efe9f099_e0c99f0e","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":42},"in_reply_to":"b438f928_8819e670","updated":"2026-08-08 11:10:37.000000000","message":"I change it to share_server_id_query, user can list the replica based on share server query filter.","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":146,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"   - project_id: project_id_path"},{"line_number":149,"context_line":"   - share_server_id: share_server_id_path"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Response parameters"},{"line_number":152,"context_line":"-------------------"}],"source_content_type":"text/x-c++src","patch_set":42,"id":"35c7c210_163aee42","line":149,"range":{"start_line":149,"start_character":0,"end_line":149,"end_character":42},"updated":"2026-08-06 06:17:26.000000000","message":"same","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":146,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"   - project_id: project_id_path"},{"line_number":149,"context_line":"   - share_server_id: share_server_id_path"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Response parameters"},{"line_number":152,"context_line":"-------------------"}],"source_content_type":"text/x-c++src","patch_set":42,"id":"178ccfbc_9f4783ec","line":149,"range":{"start_line":149,"start_character":0,"end_line":149,"end_character":42},"in_reply_to":"35c7c210_163aee42","updated":"2026-08-08 11:10:37.000000000","message":"Same as above","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"495602f579181a3e7237395e8291e65ac13015fc","unresolved":true,"context_lines":[{"line_number":432,"context_line":""},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"Share server replica metadata (since API v2.99)"},{"line_number":435,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"Show all share server replica metadata"},{"line_number":438,"context_line":"---------------------------------------"}],"source_content_type":"text/x-c++src","patch_set":44,"id":"764ba844_a6602752","line":435,"updated":"2026-08-07 13:32:23.000000000","message":"no need to mention version since this is new resource and eveything is since 2.99","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":432,"context_line":""},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"Share server replica metadata (since API v2.99)"},{"line_number":435,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"Show all share server replica metadata"},{"line_number":438,"context_line":"---------------------------------------"}],"source_content_type":"text/x-c++src","patch_set":44,"id":"720c9a6d_034fbe31","line":435,"in_reply_to":"764ba844_a6602752","updated":"2026-08-08 11:10:37.000000000","message":"Done","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"495602f579181a3e7237395e8291e65ac13015fc","unresolved":true,"context_lines":[{"line_number":612,"context_line":".. literalinclude:: samples/share-server-replica-update-metadata-response.json"},{"line_number":613,"context_line":"   :language: javascript"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"To delete all existing metadata items on a share server replica,"},{"line_number":616,"context_line":"the request object needs to specify a null metadata object:"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"Request example"}],"source_content_type":"text/x-c++src","patch_set":44,"id":"49347c4c_ec697f4c","line":615,"updated":"2026-08-07 13:32:23.000000000","message":"can this be done using command line request also ?","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":612,"context_line":".. literalinclude:: samples/share-server-replica-update-metadata-response.json"},{"line_number":613,"context_line":"   :language: javascript"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"To delete all existing metadata items on a share server replica,"},{"line_number":616,"context_line":"the request object needs to specify a null metadata object:"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"Request example"}],"source_content_type":"text/x-c++src","patch_set":44,"id":"63d8e40f_d200f8bd","line":615,"in_reply_to":"49347c4c_ec697f4c","updated":"2026-08-08 11:10:37.000000000","message":"Yes, user can do using , unset --property key1  --property key2 ..","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"}],"doc/source/admin/netapp_cluster_mode_driver.rst":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"1. Create a destination share server replica in the target availability"},{"line_number":137,"context_line":"   zone."},{"line_number":138,"context_line":"2. Wait until the replica reaches a healthy replication state."},{"line_number":139,"context_line":"3. Promote the destination replica during failover/switchover workflows"},{"line_number":140,"context_line":"   when needed."},{"line_number":141,"context_line":"4. Resync replicas after topology changes, and clean up stale replicas"}],"source_content_type":"text/x-rst","patch_set":37,"id":"3b9bbbfb_d8a5488f","line":138,"range":{"start_line":138,"start_character":36,"end_line":138,"end_character":43},"updated":"2026-07-31 14:47:34.000000000","message":"synchronized?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"1. Create a destination share server replica in the target availability"},{"line_number":137,"context_line":"   zone."},{"line_number":138,"context_line":"2. Wait until the replica reaches a healthy replication state."},{"line_number":139,"context_line":"3. Promote the destination replica during failover/switchover workflows"},{"line_number":140,"context_line":"   when needed."},{"line_number":141,"context_line":"4. Resync replicas after topology changes, and clean up stale replicas"}],"source_content_type":"text/x-rst","patch_set":37,"id":"440c3eb4_edc0967c","line":138,"range":{"start_line":138,"start_character":36,"end_line":138,"end_character":43},"in_reply_to":"3b9bbbfb_d8a5488f","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"b991f5a4d1801d06e640490429355c1f419e7af7","unresolved":true,"context_lines":[{"line_number":140,"context_line":"   when needed."},{"line_number":141,"context_line":"4. Resync replicas after topology changes, and clean up stale replicas"},{"line_number":142,"context_line":"   when they are no longer required."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Network approach"},{"line_number":145,"context_line":"----------------"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rst","patch_set":39,"id":"2e325d61_54716f95","line":143,"updated":"2026-08-03 09:32:42.000000000","message":"Mention about delete.","commit_id":"abb7ab9b0320e3c1aebc1c54b4c87c2047cde385"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":140,"context_line":"   when needed."},{"line_number":141,"context_line":"4. Resync replicas after topology changes, and clean up stale replicas"},{"line_number":142,"context_line":"   when they are no longer required."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Network approach"},{"line_number":145,"context_line":"----------------"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rst","patch_set":39,"id":"ea513592_fd17351c","line":143,"in_reply_to":"2e325d61_54716f95","updated":"2026-08-05 19:46:54.000000000","message":"It is already there, will change cleanup to delete \nand clean up stale replicas\n   when they are no longer required.","commit_id":"abb7ab9b0320e3c1aebc1c54b4c87c2047cde385"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":62,"context_line":"- Update a replica (DHSS\u003dFalse)"},{"line_number":63,"context_line":"- Create a replicated snapshot (DHSS\u003dFalse)"},{"line_number":64,"context_line":"- Delete a replicated snapshot (DHSS\u003dFalse)"},{"line_number":65,"context_line":"- Update a replicated snapshot (DHSS\u003dFalse)"},{"line_number":66,"context_line":"- Create a share server replica (DHSS\u003dTrue)"},{"line_number":67,"context_line":"- Promote a share server replica (DHSS\u003dTrue)"},{"line_number":68,"context_line":"- Update a share server replica (DHSS\u003dTrue)"},{"line_number":69,"context_line":"- Delete a share server replica (DHSS\u003dTrue)"},{"line_number":70,"context_line":"- Migrate share"},{"line_number":71,"context_line":"- Migrate share server"},{"line_number":72,"context_line":"- Create share backup"}],"source_content_type":"text/x-rst","patch_set":42,"id":"bc31a24c_5f7a1911","line":69,"range":{"start_line":65,"start_character":43,"end_line":69,"end_character":43},"updated":"2026-08-06 06:17:26.000000000","message":"This should come with the NetApp driver implementation","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"- Update a replica (DHSS\u003dFalse)"},{"line_number":63,"context_line":"- Create a replicated snapshot (DHSS\u003dFalse)"},{"line_number":64,"context_line":"- Delete a replicated snapshot (DHSS\u003dFalse)"},{"line_number":65,"context_line":"- Update a replicated snapshot (DHSS\u003dFalse)"},{"line_number":66,"context_line":"- Create a share server replica (DHSS\u003dTrue)"},{"line_number":67,"context_line":"- Promote a share server replica (DHSS\u003dTrue)"},{"line_number":68,"context_line":"- Update a share server replica (DHSS\u003dTrue)"},{"line_number":69,"context_line":"- Delete a share server replica (DHSS\u003dTrue)"},{"line_number":70,"context_line":"- Migrate share"},{"line_number":71,"context_line":"- Migrate share server"},{"line_number":72,"context_line":"- Create share backup"}],"source_content_type":"text/x-rst","patch_set":42,"id":"63e1bcfb_4b5140ad","line":69,"range":{"start_line":65,"start_character":43,"end_line":69,"end_character":43},"in_reply_to":"bc31a24c_5f7a1911","updated":"2026-08-08 11:10:37.000000000","message":"sure","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":121,"context_line":"top of the infrastructure DNS (security-service entries first). The"},{"line_number":122,"context_line":"driver reconciles DNS on service restart via ``ensure_shares``."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"Share Server Replicas (DHSS\u003dTrue)"},{"line_number":125,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"The NetApp cDOT driver supports share server replica operations when"}],"source_content_type":"text/x-rst","patch_set":42,"id":"ebc65a6b_9bb1f1b1","line":124,"updated":"2026-08-06 06:17:26.000000000","message":"revert changes to this file. This should come with the NetApp driver change that adds supprt for server replication","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":121,"context_line":"top of the infrastructure DNS (security-service entries first). The"},{"line_number":122,"context_line":"driver reconciles DNS on service restart via ``ensure_shares``."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"Share Server Replicas (DHSS\u003dTrue)"},{"line_number":125,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"The NetApp cDOT driver supports share server replica operations when"}],"source_content_type":"text/x-rst","patch_set":42,"id":"da4ed82b_5a50f679","line":124,"in_reply_to":"ebc65a6b_9bb1f1b1","updated":"2026-08-08 11:10:37.000000000","message":"Sure, will revert the changes and remove this file from commit.","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"}],"manila/api/openstack/api_version_request.py":[{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"17002385f8c68a938d707fb69de7a584770fbfcd","unresolved":true,"context_lines":[{"line_number":215,"context_line":"    * 2.94 - Added QoS type and specs APIs."},{"line_number":216,"context_line":"    * 2.95 - Added Share Replica Metadata to Metadata API"},{"line_number":217,"context_line":"    * 2.96 - Share migration APIs are no longer considered experimental."},{"line_number":218,"context_line":"    * 2.97 - Added Share Server Replica APIs."},{"line_number":219,"context_line":"\"\"\""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":21,"id":"efdc9b4f_46cd945b","line":218,"updated":"2026-07-13 03:49:42.000000000","message":"This version might conflict with\nhttps://review.opendev.org/c/openstack/manila/+/989941/6/manila/api/openstack/api_version_request.py","commit_id":"6aa98667a1f98f6119b1dcb20b1eb48dba141c9e"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    * 2.94 - Added QoS type and specs APIs."},{"line_number":216,"context_line":"    * 2.95 - Added Share Replica Metadata to Metadata API"},{"line_number":217,"context_line":"    * 2.96 - Share migration APIs are no longer considered experimental."},{"line_number":218,"context_line":"    * 2.97 - Added Share Server Replica APIs."},{"line_number":219,"context_line":"\"\"\""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":21,"id":"a558e5a6_0a3cb87d","line":218,"in_reply_to":"efdc9b4f_46cd945b","updated":"2026-08-05 19:46:54.000000000","message":"I change it 2.99","commit_id":"6aa98667a1f98f6119b1dcb20b1eb48dba141c9e"}],"manila/api/v2/metadata.py":[{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"d0197f1afd82dd32b8d75c98ff0590304961ada1","unresolved":true,"context_lines":[{"line_number":30,"context_line":"        \"share_network_subnet\": \"share_network_subnet_get\","},{"line_number":31,"context_line":"        \"share_export_location\": \"export_location_get_by_uuid\","},{"line_number":32,"context_line":"        \"share_replica\": \"share_replica_get\","},{"line_number":33,"context_line":"        \"share_server_replica\": \"share_server_get\","},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    resource_metadata_get \u003d {"}],"source_content_type":"text/x-python","patch_set":26,"id":"ac73148f_74459198","line":33,"updated":"2026-07-21 14:22:27.000000000","message":"share_server_replica_get","commit_id":"dc75edfaeaa0061eb77fbb844e7d2d56e16ac045"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \"share_network_subnet\": \"share_network_subnet_get\","},{"line_number":31,"context_line":"        \"share_export_location\": \"export_location_get_by_uuid\","},{"line_number":32,"context_line":"        \"share_replica\": \"share_replica_get\","},{"line_number":33,"context_line":"        \"share_server_replica\": \"share_server_get\","},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    resource_metadata_get \u003d {"}],"source_content_type":"text/x-python","patch_set":26,"id":"8defa2bc_61d1f28c","line":33,"in_reply_to":"ac73148f_74459198","updated":"2026-08-05 19:46:54.000000000","message":"We already have a shared server table and corresponding db method , so I didn’t implement a new DB method for this. However, for shared server replica metadata, I created a new DB method since those are new.","commit_id":"dc75edfaeaa0061eb77fbb844e7d2d56e16ac045"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":39,"context_line":"        \"share_network_subnet\": \"share_network_subnet_metadata_get\","},{"line_number":40,"context_line":"        \"share_export_location\": \"export_location_metadata_get\","},{"line_number":41,"context_line":"        \"share_replica\": \"share_replica_metadata_get\","},{"line_number":42,"context_line":"        \"share_server_replica\": \"share_server_replica_metadata_get\","},{"line_number":43,"context_line":"    }"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    resource_metadata_get_item \u003d {"}],"source_content_type":"text/x-python","patch_set":37,"id":"31c6325e_10d96736","line":42,"range":{"start_line":42,"start_character":9,"end_line":42,"end_character":29},"updated":"2026-07-31 14:47:34.000000000","message":"why can\u0027t we just use share_server?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \"share_network_subnet\": \"share_network_subnet_metadata_get\","},{"line_number":40,"context_line":"        \"share_export_location\": \"export_location_metadata_get\","},{"line_number":41,"context_line":"        \"share_replica\": \"share_replica_metadata_get\","},{"line_number":42,"context_line":"        \"share_server_replica\": \"share_server_replica_metadata_get\","},{"line_number":43,"context_line":"    }"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    resource_metadata_get_item \u003d {"}],"source_content_type":"text/x-python","patch_set":37,"id":"367d6c65_ca55059d","line":42,"range":{"start_line":42,"start_character":9,"end_line":42,"end_character":29},"in_reply_to":"31c6325e_10d96736","updated":"2026-08-05 19:46:54.000000000","message":"We could also use share_server, but this approach makes it clear to the end user that the action is being performed on the shared server replica, not on the shared server itself.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"}],"manila/api/v2/router.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":49,"context_line":"from manila.api.v2 import share_replica_export_locations"},{"line_number":50,"context_line":"from manila.api.v2 import share_replicas"},{"line_number":51,"context_line":"from manila.api.v2 import share_servers"},{"line_number":52,"context_line":"from manila.api.v2 import share_server_replicas"},{"line_number":53,"context_line":"from manila.api.v2 import share_snapshot_export_locations"},{"line_number":54,"context_line":"from manila.api.v2 import share_snapshot_instance_export_locations"},{"line_number":55,"context_line":"from manila.api.v2 import share_snapshot_instances"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f99d2f5_7f825c75","line":52,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H306: imports not in alphabetical order (manila.api.v2.share_servers, manila.api.v2.share_server_replicas)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"}],"manila/api/v2/share_server_replicas.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"REST API Controller for Share Server Replicas."},{"line_number":18,"context_line":"Handles HTTP requests for creating, managing, and promoting share server replicas."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from http import client as http_client"}],"source_content_type":"text/x-python","patch_set":1,"id":"677004f3_1ebd3509","line":18,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":83,"context_line":"    @wsgi.Controller.authorize(\u0027create\u0027)"},{"line_number":84,"context_line":"    def create(self, req, body):"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Create a share server replica."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4b4b6eb1_f696eb53","line":85,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":83,"context_line":"    @wsgi.Controller.authorize(\u0027create\u0027)"},{"line_number":84,"context_line":"    def create(self, req, body):"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Create a share server replica."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"f328099a_bdeb60c0","line":85,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    @wsgi.Controller.authorize(\u0027create\u0027)"},{"line_number":84,"context_line":"    def create(self, req, body):"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Create a share server replica."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"}],"source_content_type":"text/x-python","patch_set":1,"id":"8f9656a6_a984e8cd","line":86,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    @wsgi.Controller.authorize(\u0027create\u0027)"},{"line_number":84,"context_line":"    def create(self, req, body):"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Create a share server replica."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"}],"source_content_type":"text/x-python","patch_set":1,"id":"4bdb711e_a38ee9c7","line":86,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def create(self, req, body):"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Create a share server replica."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"}],"source_content_type":"text/x-python","patch_set":1,"id":"90699657_42fd2729","line":87,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def create(self, req, body):"},{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Create a share server replica."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"}],"source_content_type":"text/x-python","patch_set":1,"id":"8a65091b_edee3a97","line":87,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Create a share server replica."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"aa81d077_fa4c828d","line":88,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        \"\"\""},{"line_number":86,"context_line":"        Create a share server replica."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"224c7f61_41f592ff","line":88,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        Create a share server replica."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1bd34256_ab65a93a","line":89,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        Create a share server replica."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"318c9b9f_4401228d","line":89,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"},{"line_number":93,"context_line":"            HTTP 202 Accepted response with replica details"}],"source_content_type":"text/x-python","patch_set":1,"id":"407fd485_2e4b1625","line":90,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"},{"line_number":93,"context_line":"            HTTP 202 Accepted response with replica details"}],"source_content_type":"text/x-python","patch_set":1,"id":"0f2ec296_487095cd","line":90,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"},{"line_number":93,"context_line":"            HTTP 202 Accepted response with replica details"},{"line_number":94,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"35229011_2df2b262","line":91,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        Args:"},{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"},{"line_number":93,"context_line":"            HTTP 202 Accepted response with replica details"},{"line_number":94,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"684ae7cf_b55a5a1f","line":91,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"},{"line_number":93,"context_line":"            HTTP 202 Accepted response with replica details"},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7abbe457_6038edd0","line":92,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            req: Request object"},{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"},{"line_number":93,"context_line":"            HTTP 202 Accepted response with replica details"},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"ad6159cb_48a71afc","line":92,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"},{"line_number":93,"context_line":"            HTTP 202 Accepted response with replica details"},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":96,"context_line":"        replica_data \u003d body.get(\u0027share_server_replica\u0027, {})"}],"source_content_type":"text/x-python","patch_set":1,"id":"1621e0e8_92090065","line":93,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            body: Request body containing replica creation parameters"},{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"},{"line_number":93,"context_line":"            HTTP 202 Accepted response with replica details"},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":96,"context_line":"        replica_data \u003d body.get(\u0027share_server_replica\u0027, {})"}],"source_content_type":"text/x-python","patch_set":1,"id":"bb1332e1_6c7ba43a","line":93,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"},{"line_number":93,"context_line":"            HTTP 202 Accepted response with replica details"},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":96,"context_line":"        replica_data \u003d body.get(\u0027share_server_replica\u0027, {})"},{"line_number":97,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"8ca579cc_d26d6d48","line":94,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        "},{"line_number":92,"context_line":"        Returns:"},{"line_number":93,"context_line":"            HTTP 202 Accepted response with replica details"},{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":96,"context_line":"        replica_data \u003d body.get(\u0027share_server_replica\u0027, {})"},{"line_number":97,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"99b800d4_d0503871","line":94,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                )"},{"line_number":107,"context_line":"            if not replication_type:"},{"line_number":108,"context_line":"                raise exc.HTTPBadRequest("},{"line_number":109,"context_line":"                    explanation\u003d_(\u0027Missing required parameter: replication_type\u0027)"},{"line_number":110,"context_line":"                )"},{"line_number":111,"context_line":"            "},{"line_number":112,"context_line":"            # Validate replication_type is a non-empty string"}],"source_content_type":"text/x-python","patch_set":1,"id":"4a4d8b23_3c06b982","line":109,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                )"},{"line_number":111,"context_line":"            "},{"line_number":112,"context_line":"            # Validate replication_type is a non-empty string"},{"line_number":113,"context_line":"            if not isinstance(replication_type, str) or not replication_type.strip():"},{"line_number":114,"context_line":"                raise exc.HTTPBadRequest("},{"line_number":115,"context_line":"                    explanation\u003d_(\u0027Parameter replication_type must be a \u0027"},{"line_number":116,"context_line":"                                  \u0027non-empty string\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"67411c81_a63e42b3","line":113,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                                      \u0027a string\u0027)"},{"line_number":131,"context_line":"                    )"},{"line_number":132,"context_line":"                try:"},{"line_number":133,"context_line":"                    az_obj \u003d db.availability_zone_get(context, availability_zone)"},{"line_number":134,"context_line":"                    availability_zone_id \u003d az_obj.get(\u0027id\u0027)"},{"line_number":135,"context_line":"                except exception.AvailabilityZoneNotFound:"},{"line_number":136,"context_line":"                    raise exc.HTTPNotFound("}],"source_content_type":"text/x-python","patch_set":1,"id":"bb6ee306_7479ab66","line":133,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                except exception.AvailabilityZoneNotFound:"},{"line_number":136,"context_line":"                    raise exc.HTTPNotFound("},{"line_number":137,"context_line":"                        explanation\u003d_(\u0027Availability zone %s not found.\u0027) % "},{"line_number":138,"context_line":"                                    availability_zone"},{"line_number":139,"context_line":"                    )"},{"line_number":140,"context_line":"            "},{"line_number":141,"context_line":"            # Validate optional parameter types"}],"source_content_type":"text/x-python","patch_set":1,"id":"de7ef27e_29134ce4","line":138,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E131 continuation line unaligned for hanging indent","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                    explanation\u003d_(\u0027Parameter property must be a dictionary\u0027)"},{"line_number":150,"context_line":"                )"},{"line_number":151,"context_line":"            "},{"line_number":152,"context_line":"            # Create replica via API (host is determined by scheduler/availability zone)"},{"line_number":153,"context_line":"            replica \u003d self.replica_api.create_share_server_replica("},{"line_number":154,"context_line":"                context,"},{"line_number":155,"context_line":"                share_server_id\u003dshare_server_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"e1919930_8ad60b40","line":152,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (88 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            replica \u003d self.replica_api.create_share_server_replica("},{"line_number":154,"context_line":"                context,"},{"line_number":155,"context_line":"                share_server_id\u003dshare_server_id,"},{"line_number":156,"context_line":"                host\u003dNone,  # Host is auto-selected by scheduler or availability zone"},{"line_number":157,"context_line":"                availability_zone_id\u003davailability_zone_id,"},{"line_number":158,"context_line":"                share_network_id\u003dshare_network_id,"},{"line_number":159,"context_line":"                replication_type\u003dreplication_type,"}],"source_content_type":"text/x-python","patch_set":1,"id":"e417d70c_ab13b290","line":156,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":175,"context_line":"    @wsgi.Controller.authorize(\u0027index\u0027)"},{"line_number":176,"context_line":"    def index(self, req):"},{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        List share server replicas."},{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"c16c3e0f_592bbee2","line":177,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":175,"context_line":"    @wsgi.Controller.authorize(\u0027index\u0027)"},{"line_number":176,"context_line":"    def index(self, req):"},{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        List share server replicas."},{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"a5752a37_98e60671","line":177,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    @wsgi.Controller.authorize(\u0027index\u0027)"},{"line_number":176,"context_line":"    def index(self, req):"},{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        List share server replicas."},{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"}],"source_content_type":"text/x-python","patch_set":1,"id":"ed6a1364_324400d3","line":178,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    @wsgi.Controller.authorize(\u0027index\u0027)"},{"line_number":176,"context_line":"    def index(self, req):"},{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        List share server replicas."},{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"}],"source_content_type":"text/x-python","patch_set":1,"id":"40d46f9f_1a254671","line":178,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    def index(self, req):"},{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        List share server replicas."},{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"d9d447cf_d2bff924","line":179,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    def index(self, req):"},{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        List share server replicas."},{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"03fb7134_2383b3b3","line":179,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        List share server replicas."},{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"61f35698_f0db36c4","line":180,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        List share server replicas."},{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f1d0077_7e0a6cd9","line":180,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        List share server replicas."},{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"},{"line_number":184,"context_line":"            List of share server replicas"}],"source_content_type":"text/x-python","patch_set":1,"id":"6eadf301_d7e669c5","line":181,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        List share server replicas."},{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"},{"line_number":184,"context_line":"            List of share server replicas"}],"source_content_type":"text/x-python","patch_set":1,"id":"3faddc84_64b11bb6","line":181,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"},{"line_number":184,"context_line":"            List of share server replicas"},{"line_number":185,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"2b6a8054_c40c04f5","line":182,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        "},{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"},{"line_number":184,"context_line":"            List of share server replicas"},{"line_number":185,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"841239f5_e5259108","line":182,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"},{"line_number":184,"context_line":"            List of share server replicas"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"acc5f58d_6533ea4a","line":183,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        Args:"},{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"},{"line_number":184,"context_line":"            List of share server replicas"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"a0c4e31f_03b1929f","line":183,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"},{"line_number":184,"context_line":"            List of share server replicas"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":187,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"37f5c9f4_c0b4191b","line":184,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            req: Request object"},{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"},{"line_number":184,"context_line":"            List of share server replicas"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":187,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"8555da14_3a5eea23","line":184,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"},{"line_number":184,"context_line":"            List of share server replicas"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":187,"context_line":"        "},{"line_number":188,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"45b5d15d_fd755741","line":185,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        "},{"line_number":183,"context_line":"        Returns:"},{"line_number":184,"context_line":"            List of share server replicas"},{"line_number":185,"context_line":"        \"\"\""},{"line_number":186,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":187,"context_line":"        "},{"line_number":188,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"d580d8f7_c1c4bbef","line":185,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":245,"context_line":"    @wsgi.Controller.authorize(\u0027show\u0027)"},{"line_number":246,"context_line":"    def show(self, req, id):"},{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        Show details of a share server replica."},{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"e2ec5657_9d5b5ec4","line":247,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":245,"context_line":"    @wsgi.Controller.authorize(\u0027show\u0027)"},{"line_number":246,"context_line":"    def show(self, req, id):"},{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        Show details of a share server replica."},{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"83ca0be3_7530117d","line":247,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    @wsgi.Controller.authorize(\u0027show\u0027)"},{"line_number":246,"context_line":"    def show(self, req, id):"},{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        Show details of a share server replica."},{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"}],"source_content_type":"text/x-python","patch_set":1,"id":"36cb659f_e9f90b16","line":248,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    @wsgi.Controller.authorize(\u0027show\u0027)"},{"line_number":246,"context_line":"    def show(self, req, id):"},{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        Show details of a share server replica."},{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"}],"source_content_type":"text/x-python","patch_set":1,"id":"13a7b64d_a4d89d7b","line":248,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    def show(self, req, id):"},{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        Show details of a share server replica."},{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"}],"source_content_type":"text/x-python","patch_set":1,"id":"7dc2ac3e_cb9120d0","line":249,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    def show(self, req, id):"},{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        Show details of a share server replica."},{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"}],"source_content_type":"text/x-python","patch_set":1,"id":"741ebc85_659e05e5","line":249,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        Show details of a share server replica."},{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"52e40ee3_75573f1a","line":250,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        \"\"\""},{"line_number":248,"context_line":"        Show details of a share server replica."},{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"5566cc32_0c399cf8","line":250,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        Show details of a share server replica."},{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"a530110b_8f7cc27e","line":251,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        Show details of a share server replica."},{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"19343230_a9a49a4c","line":251,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"},{"line_number":255,"context_line":"            Share server replica details"}],"source_content_type":"text/x-python","patch_set":1,"id":"f5ae11e4_7866783a","line":252,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        "},{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"},{"line_number":255,"context_line":"            Share server replica details"}],"source_content_type":"text/x-python","patch_set":1,"id":"2dab45db_a035f3c5","line":252,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"},{"line_number":255,"context_line":"            Share server replica details"},{"line_number":256,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"72b0c3c6_e0be11f9","line":253,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        Args:"},{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"},{"line_number":255,"context_line":"            Share server replica details"},{"line_number":256,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"dbfd9481_acee5fca","line":253,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"},{"line_number":255,"context_line":"            Share server replica details"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"40eb2311_87f61b6d","line":254,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            req: Request object"},{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"},{"line_number":255,"context_line":"            Share server replica details"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"28a8dc30_bda1f715","line":254,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"},{"line_number":255,"context_line":"            Share server replica details"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":258,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"11daec26_445fc4a1","line":255,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            id: Replica ID"},{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"},{"line_number":255,"context_line":"            Share server replica details"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":258,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"6a3e7176_1f95d85e","line":255,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"},{"line_number":255,"context_line":"            Share server replica details"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":258,"context_line":"        "},{"line_number":259,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4acd4ebf_27f6c35e","line":256,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        "},{"line_number":254,"context_line":"        Returns:"},{"line_number":255,"context_line":"            Share server replica details"},{"line_number":256,"context_line":"        \"\"\""},{"line_number":257,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":258,"context_line":"        "},{"line_number":259,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"e5e9afff_54f8ef6f","line":256,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":269,"context_line":"    @wsgi.Controller.authorize(\u0027delete\u0027)"},{"line_number":270,"context_line":"    def delete(self, req, id):"},{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":"        Delete a share server replica."},{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dd20dda2_2a28effe","line":271,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":268,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":269,"context_line":"    @wsgi.Controller.authorize(\u0027delete\u0027)"},{"line_number":270,"context_line":"    def delete(self, req, id):"},{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":"        Delete a share server replica."},{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"db8b348c_6a93a6e6","line":271,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    @wsgi.Controller.authorize(\u0027delete\u0027)"},{"line_number":270,"context_line":"    def delete(self, req, id):"},{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":"        Delete a share server replica."},{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"}],"source_content_type":"text/x-python","patch_set":1,"id":"456974f5_c1ef191b","line":272,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":269,"context_line":"    @wsgi.Controller.authorize(\u0027delete\u0027)"},{"line_number":270,"context_line":"    def delete(self, req, id):"},{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":"        Delete a share server replica."},{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"}],"source_content_type":"text/x-python","patch_set":1,"id":"876fc3ce_94157f25","line":272,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    def delete(self, req, id):"},{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":"        Delete a share server replica."},{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"}],"source_content_type":"text/x-python","patch_set":1,"id":"725e1bca_77275a15","line":273,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    def delete(self, req, id):"},{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":"        Delete a share server replica."},{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"}],"source_content_type":"text/x-python","patch_set":1,"id":"45e925c2_93762bfc","line":273,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":"        Delete a share server replica."},{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"ecfb187d_2034d236","line":274,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":"        Delete a share server replica."},{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"547c6903_bbf8c235","line":274,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        Delete a share server replica."},{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"475941ee_f155ca43","line":275,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        Delete a share server replica."},{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dceb66b5_420ec8a8","line":275,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"},{"line_number":279,"context_line":"            HTTP 202 Accepted response"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfbdc8e5_2d2ff606","line":276,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        "},{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"},{"line_number":279,"context_line":"            HTTP 202 Accepted response"}],"source_content_type":"text/x-python","patch_set":1,"id":"864318b0_7ea5e880","line":276,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"},{"line_number":279,"context_line":"            HTTP 202 Accepted response"},{"line_number":280,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"99a0f15f_b88f1c1e","line":277,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        Args:"},{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"},{"line_number":279,"context_line":"            HTTP 202 Accepted response"},{"line_number":280,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"b743a991_d0f387f6","line":277,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"},{"line_number":279,"context_line":"            HTTP 202 Accepted response"},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f05fa9d_eeca287e","line":278,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            req: Request object"},{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"},{"line_number":279,"context_line":"            HTTP 202 Accepted response"},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"6028e236_a26dca18","line":278,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"},{"line_number":279,"context_line":"            HTTP 202 Accepted response"},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":282,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"c103151e_ec38d5dc","line":279,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            id: Replica ID"},{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"},{"line_number":279,"context_line":"            HTTP 202 Accepted response"},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":282,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"fe080b70_7ba7c040","line":279,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"},{"line_number":279,"context_line":"            HTTP 202 Accepted response"},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":282,"context_line":"        "},{"line_number":283,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"df13312a_5f4b9bd1","line":280,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        "},{"line_number":278,"context_line":"        Returns:"},{"line_number":279,"context_line":"            HTTP 202 Accepted response"},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":282,"context_line":"        "},{"line_number":283,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"756e29f3_67e5674d","line":280,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        "},{"line_number":283,"context_line":"        try:"},{"line_number":284,"context_line":"            force \u003d req.GET.get(\u0027force\u0027, \u0027false\u0027).lower() \u003d\u003d \u0027true\u0027"},{"line_number":285,"context_line":"            self.replica_api.delete_share_server_replica(context, id, force\u003dforce)"},{"line_number":286,"context_line":"            return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":287,"context_line":"        "},{"line_number":288,"context_line":"        except exception.InvalidInput as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"f51cd56b_427d457b","line":285,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (82 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":296,"context_line":"    @wsgi.Controller.authorize(\u0027update\u0027)"},{"line_number":297,"context_line":"    def update(self, req, id, body):"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        Update a share server replica."},{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"333f4860_4c41bbd4","line":298,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":296,"context_line":"    @wsgi.Controller.authorize(\u0027update\u0027)"},{"line_number":297,"context_line":"    def update(self, req, id, body):"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        Update a share server replica."},{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"66843ff8_e76378f9","line":298,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    @wsgi.Controller.authorize(\u0027update\u0027)"},{"line_number":297,"context_line":"    def update(self, req, id, body):"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        Update a share server replica."},{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"}],"source_content_type":"text/x-python","patch_set":1,"id":"3831efce_ca5bdfcc","line":299,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    @wsgi.Controller.authorize(\u0027update\u0027)"},{"line_number":297,"context_line":"    def update(self, req, id, body):"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        Update a share server replica."},{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"}],"source_content_type":"text/x-python","patch_set":1,"id":"313a8b07_437fc232","line":299,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    def update(self, req, id, body):"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        Update a share server replica."},{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"}],"source_content_type":"text/x-python","patch_set":1,"id":"55b10956_6f619be6","line":300,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":297,"context_line":"    def update(self, req, id, body):"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        Update a share server replica."},{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"}],"source_content_type":"text/x-python","patch_set":1,"id":"cd928712_d27ed4eb","line":300,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        Update a share server replica."},{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"}],"source_content_type":"text/x-python","patch_set":1,"id":"87b5b735_25b897ca","line":301,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        Update a share server replica."},{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"}],"source_content_type":"text/x-python","patch_set":1,"id":"6e38aa6c_b544866f","line":301,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        Update a share server replica."},{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"0e4a6f4b_ef4135dc","line":302,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        Update a share server replica."},{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"3c7084ff_c6c05c76","line":302,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"8791cd84_c70c5491","line":303,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        "},{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"cb523c24_fd0df8a7","line":303,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"},{"line_number":307,"context_line":"            Updated replica details"}],"source_content_type":"text/x-python","patch_set":1,"id":"4cd6dd3d_55ee505b","line":304,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        Args:"},{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"},{"line_number":307,"context_line":"            Updated replica details"}],"source_content_type":"text/x-python","patch_set":1,"id":"8d1d1efe_f9ec0147","line":304,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"},{"line_number":307,"context_line":"            Updated replica details"},{"line_number":308,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"17e727b4_bd4c1824","line":305,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            req: Request object"},{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"},{"line_number":307,"context_line":"            Updated replica details"},{"line_number":308,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"755090d8_2a64c578","line":305,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"},{"line_number":307,"context_line":"            Updated replica details"},{"line_number":308,"context_line":"        \"\"\""},{"line_number":309,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f1a671c_64589e57","line":306,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            id: Replica ID"},{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"},{"line_number":307,"context_line":"            Updated replica details"},{"line_number":308,"context_line":"        \"\"\""},{"line_number":309,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"ed697c50_d3cc318a","line":306,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"},{"line_number":307,"context_line":"            Updated replica details"},{"line_number":308,"context_line":"        \"\"\""},{"line_number":309,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":310,"context_line":"        replica_data \u003d body.get(\u0027share_server_replica\u0027, {})"}],"source_content_type":"text/x-python","patch_set":1,"id":"c2dbc274_23ae0f3d","line":307,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            body: Request body with update fields"},{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"},{"line_number":307,"context_line":"            Updated replica details"},{"line_number":308,"context_line":"        \"\"\""},{"line_number":309,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":310,"context_line":"        replica_data \u003d body.get(\u0027share_server_replica\u0027, {})"}],"source_content_type":"text/x-python","patch_set":1,"id":"2f92170a_68a1d6ee","line":307,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"},{"line_number":307,"context_line":"            Updated replica details"},{"line_number":308,"context_line":"        \"\"\""},{"line_number":309,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":310,"context_line":"        replica_data \u003d body.get(\u0027share_server_replica\u0027, {})"},{"line_number":311,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"1f42612b_a7f0c31e","line":308,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        "},{"line_number":306,"context_line":"        Returns:"},{"line_number":307,"context_line":"            Updated replica details"},{"line_number":308,"context_line":"        \"\"\""},{"line_number":309,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":310,"context_line":"        replica_data \u003d body.get(\u0027share_server_replica\u0027, {})"},{"line_number":311,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"3812a3cd_dd6e77c4","line":308,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        try:"},{"line_number":346,"context_line":"            if not isinstance(body, dict):"},{"line_number":347,"context_line":"                raise exc.HTTPBadRequest(explanation\u003d_(\u0027Invalid request body.\u0027))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"            if \u0027promote\u0027 in body:"},{"line_number":350,"context_line":"                promote_data \u003d body.get(\u0027promote\u0027, {})"}],"source_content_type":"text/x-python","patch_set":1,"id":"7528f6d6_f5654b15","line":347,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                promote_data \u003d {} if promote_data is None else promote_data"},{"line_number":352,"context_line":"                if not isinstance(promote_data, dict):"},{"line_number":353,"context_line":"                    raise exc.HTTPBadRequest("},{"line_number":354,"context_line":"                        explanation\u003d_(\"\u0027promote\u0027 action payload must be an object.\"))"},{"line_number":355,"context_line":"                wait \u003d promote_data.get(\u0027wait\u0027, False)"},{"line_number":356,"context_line":"                self.replica_api.promote_share_server_replica(context, id, wait\u003dwait)"},{"line_number":357,"context_line":"                return webob.Response(status_int\u003dhttp_client.ACCEPTED)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e9e904f2_cb925593","line":354,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                    raise exc.HTTPBadRequest("},{"line_number":354,"context_line":"                        explanation\u003d_(\"\u0027promote\u0027 action payload must be an object.\"))"},{"line_number":355,"context_line":"                wait \u003d promote_data.get(\u0027wait\u0027, False)"},{"line_number":356,"context_line":"                self.replica_api.promote_share_server_replica(context, id, wait\u003dwait)"},{"line_number":357,"context_line":"                return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"            if \u0027resync\u0027 in body:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bd9b5230_b6b688e9","line":356,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":364,"context_line":"                explanation\u003d_(\"Invalid action. Supported actions are \u0027promote\u0027 \""},{"line_number":365,"context_line":"                              \"and \u0027resync\u0027.\"))"},{"line_number":366,"context_line":"        except exception.InvalidInput as e:"},{"line_number":367,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"d9d2a7ef_80567755","line":364,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"575ac5fced596ff3bc9336a19f2030f21ad071f3","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":102,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":103,"context_line":"    @wsgi.Controller.authorize(\u0027create\u0027)"},{"line_number":104,"context_line":"    def create(self, req, body):"}],"source_content_type":"text/x-python","patch_set":18,"id":"11ebbc60_e4769d5a","line":101,"updated":"2026-07-06 13:49:39.000000000","message":"pep8: E303 too many blank lines (2)","commit_id":"47a6c885a8394ae0e9a4095e17cbb4dcd8389a4b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"575ac5fced596ff3bc9336a19f2030f21ad071f3","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":257,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":258,"context_line":"    def action(self, req, id, body):"},{"line_number":259,"context_line":"        \"\"\"Perform share server replica actions (promote, resync, "},{"line_number":260,"context_line":"        reset_replica_state).\"\"\""},{"line_number":261,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"8ec8e010_8618f76c","line":259,"updated":"2026-07-06 13:49:39.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"47a6c885a8394ae0e9a4095e17cbb4dcd8389a4b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"575ac5fced596ff3bc9336a19f2030f21ad071f3","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":257,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":258,"context_line":"    def action(self, req, id, body):"},{"line_number":259,"context_line":"        \"\"\"Perform share server replica actions (promote, resync, "},{"line_number":260,"context_line":"        reset_replica_state).\"\"\""},{"line_number":261,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"4e31014c_61a6c8f7","line":259,"updated":"2026-07-06 13:49:39.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"47a6c885a8394ae0e9a4095e17cbb4dcd8389a4b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"575ac5fced596ff3bc9336a19f2030f21ad071f3","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":258,"context_line":"    def action(self, req, id, body):"},{"line_number":259,"context_line":"        \"\"\"Perform share server replica actions (promote, resync, "},{"line_number":260,"context_line":"        reset_replica_state).\"\"\""},{"line_number":261,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"08a8a4e8_1e82f61b","line":260,"updated":"2026-07-06 13:49:39.000000000","message":"pep8: H403: multi line docstrings should end on a new line","commit_id":"47a6c885a8394ae0e9a4095e17cbb4dcd8389a4b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"575ac5fced596ff3bc9336a19f2030f21ad071f3","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":258,"context_line":"    def action(self, req, id, body):"},{"line_number":259,"context_line":"        \"\"\"Perform share server replica actions (promote, resync, "},{"line_number":260,"context_line":"        reset_replica_state).\"\"\""},{"line_number":261,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"b70cea06_59bc3bed","line":260,"updated":"2026-07-06 13:49:39.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"47a6c885a8394ae0e9a4095e17cbb4dcd8389a4b"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"d0197f1afd82dd32b8d75c98ff0590304961ada1","unresolved":true,"context_lines":[{"line_number":120,"context_line":"            availability_zone \u003d replica_data.get(\u0027availability_zone\u0027)"},{"line_number":121,"context_line":"            metadata_data \u003d replica_data.get(\u0027metadata\u0027, {})"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            # Handle availability zone name to ID conversion"},{"line_number":124,"context_line":"            availability_zone_id \u003d None"},{"line_number":125,"context_line":"            if availability_zone:"},{"line_number":126,"context_line":"                if not isinstance(availability_zone, str):"}],"source_content_type":"text/x-python","patch_set":26,"id":"878ff826_c7298fb0","line":123,"updated":"2026-07-21 14:22:27.000000000","message":"We dont need such kind of restriction. Check manila/api/v2/shares.py\n\n```\n        availability_zone_id \u003d None\n        availability_zone \u003d share.get(\u0027availability_zone\u0027)\n        if availability_zone:\n            try:\n                availability_zone_db \u003d db.availability_zone_get(\n                    context, availability_zone)\n                availability_zone_id \u003d availability_zone_db.id\n                availability_zone \u003d availability_zone_db.name\n            except exception.AvailabilityZoneNotFound as e:\n                raise exc.HTTPNotFound(explanation\u003de.msg)\n```","commit_id":"dc75edfaeaa0061eb77fbb844e7d2d56e16ac045"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            availability_zone \u003d replica_data.get(\u0027availability_zone\u0027)"},{"line_number":121,"context_line":"            metadata_data \u003d replica_data.get(\u0027metadata\u0027, {})"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            # Handle availability zone name to ID conversion"},{"line_number":124,"context_line":"            availability_zone_id \u003d None"},{"line_number":125,"context_line":"            if availability_zone:"},{"line_number":126,"context_line":"                if not isinstance(availability_zone, str):"}],"source_content_type":"text/x-python","patch_set":26,"id":"9ca1bedb_44aa6a30","line":123,"in_reply_to":"230d2276_cf594a2f","updated":"2026-08-05 19:46:54.000000000","message":"This is done so making it resolved","commit_id":"dc75edfaeaa0061eb77fbb844e7d2d56e16ac045"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":120,"context_line":"            availability_zone \u003d replica_data.get(\u0027availability_zone\u0027)"},{"line_number":121,"context_line":"            metadata_data \u003d replica_data.get(\u0027metadata\u0027, {})"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            # Handle availability zone name to ID conversion"},{"line_number":124,"context_line":"            availability_zone_id \u003d None"},{"line_number":125,"context_line":"            if availability_zone:"},{"line_number":126,"context_line":"                if not isinstance(availability_zone, str):"}],"source_content_type":"text/x-python","patch_set":26,"id":"230d2276_cf594a2f","line":123,"in_reply_to":"878ff826_c7298fb0","updated":"2026-07-31 14:47:34.000000000","message":"please make resolved comments resolved.","commit_id":"dc75edfaeaa0061eb77fbb844e7d2d56e16ac045"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"745c2d9adf42d62b66195124509e9ff1e3764feb","unresolved":true,"context_lines":[{"line_number":165,"context_line":"        except Exception as e:"},{"line_number":166,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":169,"context_line":"    def action(self, req, id, body):"},{"line_number":170,"context_line":"        \"\"\"Dispatch action requests for share server replicas."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        Keep this explicit dispatcher for unit tests and compatibility with"},{"line_number":173,"context_line":"        callers that invoke controller.action() directly."},{"line_number":174,"context_line":"        \"\"\""},{"line_number":175,"context_line":"        if not isinstance(body, dict):"},{"line_number":176,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Invalid request body.\"))"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        if len(body) !\u003d 1:"},{"line_number":179,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Malformed request body.\"))"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        action_name \u003d next(iter(body))"},{"line_number":182,"context_line":"        if action_name \u003d\u003d \u0027os-reset_replica_state\u0027:"},{"line_number":183,"context_line":"            action_name \u003d \u0027reset_replica_state\u0027"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        if action_name not in self.wsgi_actions:"},{"line_number":186,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Unknown action.\"))"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        action_method \u003d getattr(self, self.wsgi_actions[action_name])"},{"line_number":189,"context_line":"        return action_method(req, id, body)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":192,"context_line":"    @wsgi.Controller.authorize(\u0027index\u0027)"},{"line_number":193,"context_line":"    def index(self, req):"}],"source_content_type":"text/x-python","patch_set":30,"id":"d3ae7879_9e6b2847","line":190,"range":{"start_line":168,"start_character":4,"end_line":190,"end_character":0},"updated":"2026-07-27 15:02:24.000000000","message":"This method seems to be redundant, can be removed","commit_id":"928bb60ff353ba1003f07dc119cc0404061e7d75"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"265c706f0ade2faf91c368657ad36cf71c54bb0b","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        except Exception as e:"},{"line_number":166,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":169,"context_line":"    def action(self, req, id, body):"},{"line_number":170,"context_line":"        \"\"\"Dispatch action requests for share server replicas."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        Keep this explicit dispatcher for unit tests and compatibility with"},{"line_number":173,"context_line":"        callers that invoke controller.action() directly."},{"line_number":174,"context_line":"        \"\"\""},{"line_number":175,"context_line":"        if not isinstance(body, dict):"},{"line_number":176,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Invalid request body.\"))"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        if len(body) !\u003d 1:"},{"line_number":179,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Malformed request body.\"))"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        action_name \u003d next(iter(body))"},{"line_number":182,"context_line":"        if action_name \u003d\u003d \u0027os-reset_replica_state\u0027:"},{"line_number":183,"context_line":"            action_name \u003d \u0027reset_replica_state\u0027"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        if action_name not in self.wsgi_actions:"},{"line_number":186,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Unknown action.\"))"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        action_method \u003d getattr(self, self.wsgi_actions[action_name])"},{"line_number":189,"context_line":"        return action_method(req, id, body)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":192,"context_line":"    @wsgi.Controller.authorize(\u0027index\u0027)"},{"line_number":193,"context_line":"    def index(self, req):"}],"source_content_type":"text/x-python","patch_set":30,"id":"17c9300f_23916d45","line":190,"range":{"start_line":168,"start_character":4,"end_line":190,"end_character":0},"in_reply_to":"d3ae7879_9e6b2847","updated":"2026-07-30 12:58:32.000000000","message":"Done","commit_id":"928bb60ff353ba1003f07dc119cc0404061e7d75"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self):"},{"line_number":45,"context_line":"        super(ShareServerReplicaController, self).__init__()"},{"line_number":46,"context_line":"        self.replica_api \u003d share_api.API()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _update(self, *args, **kwargs):"},{"line_number":49,"context_line":"        \"\"\"Update share server replica in DB.\"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"1e467ffd_7843b7a9","line":46,"range":{"start_line":46,"start_character":13,"end_line":46,"end_character":24},"updated":"2026-07-31 14:47:34.000000000","message":"this is not replica api, it\u0027s share API, please rename","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self):"},{"line_number":45,"context_line":"        super(ShareServerReplicaController, self).__init__()"},{"line_number":46,"context_line":"        self.replica_api \u003d share_api.API()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _update(self, *args, **kwargs):"},{"line_number":49,"context_line":"        \"\"\"Update share server replica in DB.\"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"a97175bf_2952aac3","line":46,"range":{"start_line":46,"start_character":13,"end_line":46,"end_character":24},"in_reply_to":"1e467ffd_7843b7a9","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"            if not share_server_id:"},{"line_number":115,"context_line":"                raise exc.HTTPBadRequest("},{"line_number":116,"context_line":"                    explanation\u003d_(\u0027Missing required parameter: share_server\u0027)"},{"line_number":117,"context_line":"                )"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"            # Extract optional parameters"}],"source_content_type":"text/x-python","patch_set":37,"id":"9f9382d2_03b3974b","line":116,"range":{"start_line":116,"start_character":35,"end_line":116,"end_character":75},"updated":"2026-07-31 14:47:34.000000000","message":"Must supply \u0027share_server\u0027 attribute.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"            if not share_server_id:"},{"line_number":115,"context_line":"                raise exc.HTTPBadRequest("},{"line_number":116,"context_line":"                    explanation\u003d_(\u0027Missing required parameter: share_server\u0027)"},{"line_number":117,"context_line":"                )"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"            # Extract optional parameters"}],"source_content_type":"text/x-python","patch_set":37,"id":"249744f5_cf9c3c5a","line":116,"range":{"start_line":116,"start_character":35,"end_line":116,"end_character":75},"in_reply_to":"9f9382d2_03b3974b","updated":"2026-08-05 19:46:54.000000000","message":"Done. Change it to below \n\nMust provide Share Server ID to create share server replica.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"            # Validate share_network_id if provided"},{"line_number":125,"context_line":"            if share_network_id:"},{"line_number":126,"context_line":"                if not isinstance(share_network_id, str):"},{"line_number":127,"context_line":"                    raise exc.HTTPBadRequest("},{"line_number":128,"context_line":"                        explanation\u003d_(\u0027Parameter share_network_id must be \u0027"},{"line_number":129,"context_line":"                                      \u0027a string\u0027)"}],"source_content_type":"text/x-python","patch_set":37,"id":"2cf7cdfc_8eb568b9","line":126,"range":{"start_line":126,"start_character":16,"end_line":126,"end_character":57},"updated":"2026-07-31 14:47:34.000000000","message":"```suggestion\n                if not uuidutils.is_uuid_like(share_network_id):\n```","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"            # Validate share_network_id if provided"},{"line_number":125,"context_line":"            if share_network_id:"},{"line_number":126,"context_line":"                if not isinstance(share_network_id, str):"},{"line_number":127,"context_line":"                    raise exc.HTTPBadRequest("},{"line_number":128,"context_line":"                        explanation\u003d_(\u0027Parameter share_network_id must be \u0027"},{"line_number":129,"context_line":"                                      \u0027a string\u0027)"}],"source_content_type":"text/x-python","patch_set":37,"id":"099c0719_1d7e74e1","line":126,"range":{"start_line":126,"start_character":16,"end_line":126,"end_character":57},"in_reply_to":"2cf7cdfc_8eb568b9","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":125,"context_line":"            if share_network_id:"},{"line_number":126,"context_line":"                if not isinstance(share_network_id, str):"},{"line_number":127,"context_line":"                    raise exc.HTTPBadRequest("},{"line_number":128,"context_line":"                        explanation\u003d_(\u0027Parameter share_network_id must be \u0027"},{"line_number":129,"context_line":"                                      \u0027a string\u0027)"},{"line_number":130,"context_line":"                    )"},{"line_number":131,"context_line":"                try:"},{"line_number":132,"context_line":"                    db.share_network_get(context, share_network_id)"}],"source_content_type":"text/x-python","patch_set":37,"id":"4b35e6e6_b1a229cf","line":129,"range":{"start_line":128,"start_character":39,"end_line":129,"end_character":47},"updated":"2026-07-31 14:47:34.000000000","message":"```suggestion\n                        explanation\u003d_(\u0027The \u0027share_network_id\u0027 attribute must be \u0027\n                        \t      \u0027a uuid.\u0027)\n```","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            if share_network_id:"},{"line_number":126,"context_line":"                if not isinstance(share_network_id, str):"},{"line_number":127,"context_line":"                    raise exc.HTTPBadRequest("},{"line_number":128,"context_line":"                        explanation\u003d_(\u0027Parameter share_network_id must be \u0027"},{"line_number":129,"context_line":"                                      \u0027a string\u0027)"},{"line_number":130,"context_line":"                    )"},{"line_number":131,"context_line":"                try:"},{"line_number":132,"context_line":"                    db.share_network_get(context, share_network_id)"}],"source_content_type":"text/x-python","patch_set":37,"id":"a8b8bd67_01f4f691","line":129,"range":{"start_line":128,"start_character":39,"end_line":129,"end_character":47},"in_reply_to":"4b35e6e6_b1a229cf","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":189,"context_line":"        except exception.NotFound:"},{"line_number":190,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":191,"context_line":"        except Exception as e:"},{"line_number":192,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":195,"context_line":"    @wsgi.Controller.authorize(\u0027delete\u0027)"}],"source_content_type":"text/x-python","patch_set":37,"id":"7367f37f_466dae86","line":192,"range":{"start_line":192,"start_character":12,"end_line":192,"end_character":65},"updated":"2026-07-31 14:47:34.000000000","message":"please don\u0027t raise 500 - we try never doing it in the Manila code base, as it indicates a bug. Please be specific with the exceptions.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        except exception.NotFound:"},{"line_number":190,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":191,"context_line":"        except Exception as e:"},{"line_number":192,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":195,"context_line":"    @wsgi.Controller.authorize(\u0027delete\u0027)"}],"source_content_type":"text/x-python","patch_set":37,"id":"5c5f132e_ba013af1","line":192,"range":{"start_line":192,"start_character":12,"end_line":192,"end_character":65},"in_reply_to":"7367f37f_466dae86","updated":"2026-08-05 19:46:54.000000000","message":"Remove this, only raising the specific exception","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":208,"context_line":"        except exception.NotFound:"},{"line_number":209,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":210,"context_line":"        except Exception as e:"},{"line_number":211,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":214,"context_line":"    @wsgi.Controller.authorize(\u0027update\u0027)"}],"source_content_type":"text/x-python","patch_set":37,"id":"87aef8b5_9220cbd8","line":211,"range":{"start_line":211,"start_character":12,"end_line":211,"end_character":65},"updated":"2026-07-31 14:47:34.000000000","message":"again, please drop this. we should be really specific about this.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        except exception.NotFound:"},{"line_number":209,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":210,"context_line":"        except Exception as e:"},{"line_number":211,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":214,"context_line":"    @wsgi.Controller.authorize(\u0027update\u0027)"}],"source_content_type":"text/x-python","patch_set":37,"id":"8115bbf0_75da50dd","line":211,"range":{"start_line":211,"start_character":12,"end_line":211,"end_character":65},"in_reply_to":"87aef8b5_9220cbd8","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":237,"context_line":"                    explanation\u003d_(\u0027Parameter metadata must be a dictionary\u0027)"},{"line_number":238,"context_line":"                )"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"            replica \u003d self.replica_api.update_share_server_replica("},{"line_number":241,"context_line":"                context,"},{"line_number":242,"context_line":"                replica_id\u003did,"},{"line_number":243,"context_line":"                metadata\u003dmetadata_data,"},{"line_number":244,"context_line":"            )"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            return self._view_builder.detail(req, replica)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        except exception.InvalidInput as e:"}],"source_content_type":"text/x-python","patch_set":37,"id":"e4b9ccae_c49b7799","line":245,"range":{"start_line":240,"start_character":12,"end_line":245,"end_character":1},"updated":"2026-07-31 14:47:34.000000000","message":"if we do this, what would be the purpose of the metadata controller update methods?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                    explanation\u003d_(\u0027Parameter metadata must be a dictionary\u0027)"},{"line_number":238,"context_line":"                )"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"            replica \u003d self.replica_api.update_share_server_replica("},{"line_number":241,"context_line":"                context,"},{"line_number":242,"context_line":"                replica_id\u003did,"},{"line_number":243,"context_line":"                metadata\u003dmetadata_data,"},{"line_number":244,"context_line":"            )"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            return self._view_builder.detail(req, replica)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        except exception.InvalidInput as e:"}],"source_content_type":"text/x-python","patch_set":37,"id":"d6e7db60_7f92aaa7","line":245,"range":{"start_line":240,"start_character":12,"end_line":245,"end_character":1},"in_reply_to":"e4b9ccae_c49b7799","updated":"2026-08-05 19:46:54.000000000","message":"make the changes, calling base calls metat data method to update the share server replica metadata.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":249,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":250,"context_line":"        except exception.NotFound:"},{"line_number":251,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":252,"context_line":"        except Exception as e:"},{"line_number":253,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":256,"context_line":"    @wsgi.action(\u0027promote\u0027)"}],"source_content_type":"text/x-python","patch_set":37,"id":"84c62d44_f774d6b4","line":253,"range":{"start_line":252,"start_character":7,"end_line":253,"end_character":65},"updated":"2026-07-31 14:47:34.000000000","message":"same","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":250,"context_line":"        except exception.NotFound:"},{"line_number":251,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":252,"context_line":"        except Exception as e:"},{"line_number":253,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":256,"context_line":"    @wsgi.action(\u0027promote\u0027)"}],"source_content_type":"text/x-python","patch_set":37,"id":"2b4dd011_fc285279","line":253,"range":{"start_line":252,"start_character":7,"end_line":253,"end_character":65},"in_reply_to":"84c62d44_f774d6b4","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":271,"context_line":"        except exception.InvalidInput as e:"},{"line_number":272,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":273,"context_line":"        except (exception.NotFound, exception.ShareServerReplicaNotFound):"},{"line_number":274,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":275,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":37,"id":"33d8bbce_697be238","line":274,"range":{"start_line":274,"start_character":12,"end_line":274,"end_character":36},"updated":"2026-07-31 14:47:34.000000000","message":"HTTP not found instead?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":true,"context_lines":[{"line_number":271,"context_line":"        except exception.InvalidInput as e:"},{"line_number":272,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":273,"context_line":"        except (exception.NotFound, exception.ShareServerReplicaNotFound):"},{"line_number":274,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":275,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa52b26c_4b49a381","line":274,"range":{"start_line":274,"start_character":12,"end_line":274,"end_character":36},"in_reply_to":"33d8bbce_697be238","updated":"2026-08-05 19:46:54.000000000","message":"Can you elaborate this comment, not getting it completely.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        except exception.InvalidInput as e:"},{"line_number":272,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":273,"context_line":"        except (exception.NotFound, exception.ShareServerReplicaNotFound):"},{"line_number":274,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":275,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":37,"id":"5b0a93e1_11e3132b","line":274,"range":{"start_line":274,"start_character":12,"end_line":274,"end_character":36},"in_reply_to":"fa52b26c_4b49a381","updated":"2026-08-20 12:43:49.000000000","message":"Closing this comment, as several changes have been made to the file to optimize the code. Please feel free to reopen it if you think your comment has not been addressed.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":297,"context_line":"        \"\"\"Reset the replica_state of a share server replica.\"\"\""},{"line_number":298,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":299,"context_line":"        inner \u003d body.get(\u0027reset_replica_state\u0027,"},{"line_number":300,"context_line":"                         body.get(\u0027os-reset_replica_state\u0027))"},{"line_number":301,"context_line":"        update \u003d self.validate_update(inner, status_attr\u003d\u0027replica_state\u0027)"},{"line_number":302,"context_line":"        try:"},{"line_number":303,"context_line":"            resource \u003d self._get(context, id)"}],"source_content_type":"text/x-python","patch_set":37,"id":"738c72b5_abaa4c4a","line":300,"range":{"start_line":300,"start_character":25,"end_line":300,"end_character":59},"updated":"2026-07-31 14:47:34.000000000","message":"this doesn\u0027t apply here. the whole reason why we had os-*reset_state was because it used to be old APIs that got moved somewhere, so we needed to keep supporting the older version. This is the first time we\u0027re implementing reset state for a share replica, so there\u0027s no reason why we should be defensive about something that did not exist.\n\nActually, for reset state I think we should pretty much inherit from the Admin actions mixin as all other resources that support it are doing, can you please look into it?\n\nit will look something like:\n```\ndef reset_replica_state(self, req, id, body):\n      return self._reset_status(req, id, body, status_attr\u003d\u0027replica_state\u0027)\n```","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\"Reset the replica_state of a share server replica.\"\"\""},{"line_number":298,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":299,"context_line":"        inner \u003d body.get(\u0027reset_replica_state\u0027,"},{"line_number":300,"context_line":"                         body.get(\u0027os-reset_replica_state\u0027))"},{"line_number":301,"context_line":"        update \u003d self.validate_update(inner, status_attr\u003d\u0027replica_state\u0027)"},{"line_number":302,"context_line":"        try:"},{"line_number":303,"context_line":"            resource \u003d self._get(context, id)"}],"source_content_type":"text/x-python","patch_set":37,"id":"c813ca46_c4e2032e","line":300,"range":{"start_line":300,"start_character":25,"end_line":300,"end_character":59},"in_reply_to":"738c72b5_abaa4c4a","updated":"2026-08-05 19:46:54.000000000","message":"I tried to make the same changes as we have for share replica but it is failing. \nBut I have remove  body.get(\u0027os-reset_replica_state\u0027).","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        \"\"\"Reset the replica_state of a share server replica.\"\"\""},{"line_number":298,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":299,"context_line":"        inner \u003d body.get(\u0027reset_replica_state\u0027,"},{"line_number":300,"context_line":"                         body.get(\u0027os-reset_replica_state\u0027))"},{"line_number":301,"context_line":"        update \u003d self.validate_update(inner, status_attr\u003d\u0027replica_state\u0027)"},{"line_number":302,"context_line":"        try:"},{"line_number":303,"context_line":"            resource \u003d self._get(context, id)"}],"source_content_type":"text/x-python","patch_set":37,"id":"7b73dc16_d97c3a10","line":300,"range":{"start_line":300,"start_character":25,"end_line":300,"end_character":59},"in_reply_to":"c813ca46_c4e2032e","updated":"2026-08-08 11:10:37.000000000","message":"I have added the policy for status, after that it works. So, Made the require changes as you suggested.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":42,"id":"44ac67dc_0a2547c8","line":1,"range":{"start_line":1,"start_character":17,"end_line":1,"end_character":37},"updated":"2026-08-06 06:17:26.000000000","message":"there\u0027s no longer any such entity; and the OpenInfra Foundation doesn\u0027t need this line","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":42,"id":"1901ceb9_45f30a67","line":1,"range":{"start_line":1,"start_character":17,"end_line":1,"end_character":37},"in_reply_to":"44ac67dc_0a2547c8","updated":"2026-08-08 11:10:37.000000000","message":"I have added company name, hope that will be fine","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":31,"context_line":"from manila.i18n import _"},{"line_number":32,"context_line":"from manila.share import api as share_api"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"MIN_SUPPORTED_API_VERSION \u003d \u00272.98\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class ShareServerReplicaController(wsgi.Controller,"}],"source_content_type":"text/x-python","patch_set":42,"id":"3f9bc2e7_853110a7","line":34,"range":{"start_line":34,"start_character":29,"end_line":34,"end_character":33},"updated":"2026-08-06 06:17:26.000000000","message":"version mismatch?","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from manila.i18n import _"},{"line_number":32,"context_line":"from manila.share import api as share_api"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"MIN_SUPPORTED_API_VERSION \u003d \u00272.98\u0027"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class ShareServerReplicaController(wsgi.Controller,"}],"source_content_type":"text/x-python","patch_set":42,"id":"69acaa41_fe6712e2","line":34,"range":{"start_line":34,"start_character":29,"end_line":34,"end_character":33},"in_reply_to":"3f9bc2e7_853110a7","updated":"2026-08-08 11:10:37.000000000","message":"Done","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        except exception.InvalidInput as e:"},{"line_number":98,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":99,"context_line":"        except Exception as e:"},{"line_number":100,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":103,"context_line":"    @wsgi.response(http_client.ACCEPTED)"}],"source_content_type":"text/x-python","patch_set":42,"id":"bf0bd679_e24ee01c","line":100,"range":{"start_line":99,"start_character":8,"end_line":100,"end_character":65},"updated":"2026-08-06 06:17:26.000000000","message":"Nope. Don\u0027t raise HTTP500 plumbing up the exception. That\u0027s internal details that don\u0027t belong in API responses. What do you anticipate going wrong? can you handle specific exceptions?","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"495602f579181a3e7237395e8291e65ac13015fc","unresolved":true,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        except exception.InvalidInput as e:"},{"line_number":98,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":99,"context_line":"        except Exception as e:"},{"line_number":100,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":103,"context_line":"    @wsgi.response(http_client.ACCEPTED)"}],"source_content_type":"text/x-python","patch_set":42,"id":"dc88600b_bcc4086f","line":100,"range":{"start_line":99,"start_character":8,"end_line":100,"end_character":65},"in_reply_to":"bf0bd679_e24ee01c","updated":"2026-08-07 13:32:23.000000000","message":"+1","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        except exception.InvalidInput as e:"},{"line_number":98,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.msg)"},{"line_number":99,"context_line":"        except Exception as e:"},{"line_number":100,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":103,"context_line":"    @wsgi.response(http_client.ACCEPTED)"}],"source_content_type":"text/x-python","patch_set":42,"id":"e4af2051_793944f4","line":100,"range":{"start_line":99,"start_character":8,"end_line":100,"end_character":65},"in_reply_to":"dc88600b_bcc4086f","updated":"2026-08-08 11:10:37.000000000","message":"Done","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":169,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":172,"context_line":"    @wsgi.Controller.authorize(\u0027index\u0027)"},{"line_number":173,"context_line":"    def index(self, req):"},{"line_number":174,"context_line":"        \"\"\"Return a summary list of share server replicas.\"\"\""},{"line_number":175,"context_line":"        return self._get_share_server_replicas(req)"}],"source_content_type":"text/x-python","patch_set":42,"id":"69c0bae4_d99faa9f","line":172,"range":{"start_line":172,"start_character":30,"end_line":172,"end_character":39},"updated":"2026-08-06 06:17:26.000000000","message":"the parameter \"(\u0027index\u0027)\" . the authorize decorator tries to use the method name","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            raise exc.HTTPInternalServerError(explanation\u003dstr(e))"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":172,"context_line":"    @wsgi.Controller.authorize(\u0027index\u0027)"},{"line_number":173,"context_line":"    def index(self, req):"},{"line_number":174,"context_line":"        \"\"\"Return a summary list of share server replicas.\"\"\""},{"line_number":175,"context_line":"        return self._get_share_server_replicas(req)"}],"source_content_type":"text/x-python","patch_set":42,"id":"d7f47673_e30d4ac3","line":172,"range":{"start_line":172,"start_character":30,"end_line":172,"end_character":39},"in_reply_to":"69c0bae4_d99faa9f","updated":"2026-08-08 11:10:37.000000000","message":"You mean to say no need mention the method name, if no method is added it it will use the function name automatically. I made the change here and other places wherever it require.","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":181,"context_line":"        return self._get_share_server_replicas(req, is_detail\u003dTrue)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":184,"context_line":"    @wsgi.Controller.authorize(\u0027show\u0027)"},{"line_number":185,"context_line":"    def show(self, req, id):"},{"line_number":186,"context_line":"        \"\"\"Show details of a share server replica.\"\"\""},{"line_number":187,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":42,"id":"fbb9994e_93d57766","line":184,"range":{"start_line":184,"start_character":30,"end_line":184,"end_character":38},"updated":"2026-08-06 06:17:26.000000000","message":"same comment as above","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        return self._get_share_server_replicas(req, is_detail\u003dTrue)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":184,"context_line":"    @wsgi.Controller.authorize(\u0027show\u0027)"},{"line_number":185,"context_line":"    def show(self, req, id):"},{"line_number":186,"context_line":"        \"\"\"Show details of a share server replica.\"\"\""},{"line_number":187,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"}],"source_content_type":"text/x-python","patch_set":42,"id":"e1ec9aae_18f3d7e0","line":184,"range":{"start_line":184,"start_character":30,"end_line":184,"end_character":38},"in_reply_to":"fbb9994e_93d57766","updated":"2026-08-08 11:10:37.000000000","message":"Done","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":198,"context_line":"    def delete(self, req, id):"},{"line_number":199,"context_line":"        \"\"\"Delete a share server replica.\"\"\""},{"line_number":200,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":201,"context_line":"        force \u003d req.GET.get(\u0027force\u0027, \u0027false\u0027).lower() \u003d\u003d \u0027true\u0027"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        try:"},{"line_number":204,"context_line":"            replica \u003d self.share_api.get_share_server_replica(context, id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"463b9ed5_3b89e6d9","line":201,"range":{"start_line":201,"start_character":0,"end_line":201,"end_character":63},"updated":"2026-08-06 06:17:26.000000000","message":"DELETE can\u0027t accept body content. Force deletions are implemented as `POST /resource/action` APIs","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    def delete(self, req, id):"},{"line_number":199,"context_line":"        \"\"\"Delete a share server replica.\"\"\""},{"line_number":200,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":201,"context_line":"        force \u003d req.GET.get(\u0027force\u0027, \u0027false\u0027).lower() \u003d\u003d \u0027true\u0027"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        try:"},{"line_number":204,"context_line":"            replica \u003d self.share_api.get_share_server_replica(context, id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"a677b365_1a324d11","line":201,"range":{"start_line":201,"start_character":0,"end_line":201,"end_character":63},"in_reply_to":"463b9ed5_3b89e6d9","updated":"2026-08-08 11:10:37.000000000","message":"Thanks for pointing this, I made the changes accordingly.","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":262,"context_line":"        if not isinstance(promote_data, dict):"},{"line_number":263,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":264,"context_line":"                explanation\u003d_(\"\u0027promote\u0027 action payload must be an object.\"))"},{"line_number":265,"context_line":"        wait \u003d promote_data.get(\u0027wait\u0027, False)"},{"line_number":266,"context_line":"        try:"},{"line_number":267,"context_line":"            self.share_api.promote_share_server_replica("},{"line_number":268,"context_line":"                context, id, wait\u003dwait)"}],"source_content_type":"text/x-python","patch_set":42,"id":"716bbf3d_05ced4d4","line":265,"range":{"start_line":265,"start_character":0,"end_line":265,"end_character":46},"updated":"2026-08-06 06:17:26.000000000","message":"Hmmm, this wasn\u0027t in the spec. You can\u0027t make the API request wait (and you don\u0027t seem to be)..","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        if not isinstance(promote_data, dict):"},{"line_number":263,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":264,"context_line":"                explanation\u003d_(\"\u0027promote\u0027 action payload must be an object.\"))"},{"line_number":265,"context_line":"        wait \u003d promote_data.get(\u0027wait\u0027, False)"},{"line_number":266,"context_line":"        try:"},{"line_number":267,"context_line":"            self.share_api.promote_share_server_replica("},{"line_number":268,"context_line":"                context, id, wait\u003dwait)"}],"source_content_type":"text/x-python","patch_set":42,"id":"b9aef81c_d387fad0","line":265,"range":{"start_line":265,"start_character":0,"end_line":265,"end_character":46},"in_reply_to":"716bbf3d_05ced4d4","updated":"2026-08-08 11:10:37.000000000","message":"It was there in spec, copying same here.\nopenstack share server replica promote [--wait] \u003creplica\u003e\n\nEven we support the same for share replica.","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"823d53fca271464d714cfeba44fb123d32b35f6c","unresolved":true,"context_lines":[{"line_number":293,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":294,"context_line":"    def reset_replica_state(self, req, id, body):"},{"line_number":295,"context_line":"        \"\"\"Reset the replica_state of a share server replica.\"\"\""},{"line_number":296,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":297,"context_line":"        inner \u003d body.get(\u0027reset_replica_state\u0027)"},{"line_number":298,"context_line":"        update \u003d self.validate_update(inner, status_attr\u003d\u0027replica_state\u0027)"},{"line_number":299,"context_line":"        try:"},{"line_number":300,"context_line":"            resource \u003d self._get(context, id)"},{"line_number":301,"context_line":"        except exception.NotFound as e:"},{"line_number":302,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.msg)"},{"line_number":303,"context_line":"        if resource.get(\u0027replica_state\u0027) \u003d\u003d constants.REPLICA_STATE_ACTIVE:"},{"line_number":304,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":305,"context_line":"                explanation\u003d_("},{"line_number":306,"context_line":"                    \u0027Cannot reset replica_state of an active replica\u0027))"},{"line_number":307,"context_line":"        self._update(context, id, update)"},{"line_number":308,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    @wsgi.Controller.api_version(\"2.98\")"},{"line_number":311,"context_line":"    @wsgi.Controller.authorize(\"get_metadata\")"}],"source_content_type":"text/x-python","patch_set":42,"id":"cbe936f8_a43b2df7","line":308,"range":{"start_line":296,"start_character":0,"end_line":308,"end_character":62},"updated":"2026-08-06 06:17:26.000000000","message":"This logic already exists in `AdminActionsMixin._reset_status`","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":294,"context_line":"    def reset_replica_state(self, req, id, body):"},{"line_number":295,"context_line":"        \"\"\"Reset the replica_state of a share server replica.\"\"\""},{"line_number":296,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":297,"context_line":"        inner \u003d body.get(\u0027reset_replica_state\u0027)"},{"line_number":298,"context_line":"        update \u003d self.validate_update(inner, status_attr\u003d\u0027replica_state\u0027)"},{"line_number":299,"context_line":"        try:"},{"line_number":300,"context_line":"            resource \u003d self._get(context, id)"},{"line_number":301,"context_line":"        except exception.NotFound as e:"},{"line_number":302,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.msg)"},{"line_number":303,"context_line":"        if resource.get(\u0027replica_state\u0027) \u003d\u003d constants.REPLICA_STATE_ACTIVE:"},{"line_number":304,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":305,"context_line":"                explanation\u003d_("},{"line_number":306,"context_line":"                    \u0027Cannot reset replica_state of an active replica\u0027))"},{"line_number":307,"context_line":"        self._update(context, id, update)"},{"line_number":308,"context_line":"        return webob.Response(status_int\u003dhttp_client.ACCEPTED)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    @wsgi.Controller.api_version(\"2.98\")"},{"line_number":311,"context_line":"    @wsgi.Controller.authorize(\"get_metadata\")"}],"source_content_type":"text/x-python","patch_set":42,"id":"82d58d56_80e9fa0b","line":308,"range":{"start_line":296,"start_character":0,"end_line":308,"end_character":62},"in_reply_to":"cbe936f8_a43b2df7","updated":"2026-08-08 11:10:37.000000000","message":"Done","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"495602f579181a3e7237395e8291e65ac13015fc","unresolved":true,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"            # Validate share_network_id if provided"},{"line_number":129,"context_line":"            if share_network_id:"},{"line_number":130,"context_line":"                if not uuidutils.is_uuid_like(share_network_id):"},{"line_number":131,"context_line":"                    raise exc.HTTPBadRequest("},{"line_number":132,"context_line":"                        explanation\u003d_(\u0027Parameter share_network_id must be \u0027"},{"line_number":133,"context_line":"                                      \u0027a valid UUID\u0027)"}],"source_content_type":"text/x-python","patch_set":44,"id":"4dc00989_9be3b8e8","line":130,"updated":"2026-08-07 13:32:23.000000000","message":"we dont need to validated UUID, if wrong entry is provided here the share_network_get is anyways going to raise exception.","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"            # Validate share_network_id if provided"},{"line_number":129,"context_line":"            if share_network_id:"},{"line_number":130,"context_line":"                if not uuidutils.is_uuid_like(share_network_id):"},{"line_number":131,"context_line":"                    raise exc.HTTPBadRequest("},{"line_number":132,"context_line":"                        explanation\u003d_(\u0027Parameter share_network_id must be \u0027"},{"line_number":133,"context_line":"                                      \u0027a valid UUID\u0027)"}],"source_content_type":"text/x-python","patch_set":44,"id":"24eb91dd_1cefacbb","line":130,"in_reply_to":"4dc00989_9be3b8e8","updated":"2026-08-08 11:10:37.000000000","message":"Make sense, remove the validation","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":104,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":105,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":106,"context_line":"    @wsgi.Controller.authorize"},{"line_number":107,"context_line":"    def create(self, req, body):"},{"line_number":108,"context_line":"        \"\"\"Create a share server replica.\"\"\""},{"line_number":109,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":110,"context_line":"        self._validate_body(body)"}],"source_content_type":"text/x-python","patch_set":50,"id":"82aa1368_9148f66b","line":107,"updated":"2026-08-14 06:32:26.000000000","message":"`create` is 63 lines vs `share_replicas._create` at ~50 (which does more work). The `isinstance(metadata_data, dict)` check is handled by the JSON schema, the share_network_id validation belongs in `api.py` not the controller, and the narrating comments should go. `delete` and `force_delete` are near-identical (22 + 23 lines); share code via a helper or the AdminActionsMixin like `share_replicas.py`. The docstrings on `_update`, `_get`, and the metadata methods restate the method name; the existing `share_replicas.py` has none on these.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    @wsgi.Controller.api_version(MIN_SUPPORTED_API_VERSION)"},{"line_number":105,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":106,"context_line":"    @wsgi.Controller.authorize"},{"line_number":107,"context_line":"    def create(self, req, body):"},{"line_number":108,"context_line":"        \"\"\"Create a share server replica.\"\"\""},{"line_number":109,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":110,"context_line":"        self._validate_body(body)"}],"source_content_type":"text/x-python","patch_set":50,"id":"0489f91a_40e8fbbd","line":107,"in_reply_to":"82aa1368_9148f66b","updated":"2026-08-20 12:43:49.000000000","message":"Done","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":277,"context_line":"    @wsgi.action(\u0027promote\u0027)"},{"line_number":278,"context_line":"    @wsgi.Controller.authorize"},{"line_number":279,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":280,"context_line":"    def promote(self, req, id, body):"},{"line_number":281,"context_line":"        \"\"\"Promote a share server replica.\"\"\""},{"line_number":282,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":283,"context_line":"        promote_data \u003d body.get(\u0027promote\u0027, {})"}],"source_content_type":"text/x-python","patch_set":50,"id":"3be59f85_7519b2f7","line":280,"updated":"2026-08-14 06:32:26.000000000","message":"`promote` returns an empty 202 body (line 296: bare `webob.Response(status_int\u003d...)`). The existing `share_replicas._promote` returns `self._view_builder.detail(req, replica)` so the caller can see the promoted resource state. Same for `resync` (line 311). Also, `share_replicas._promote` returns 200 when the replica is already active (idempotent); this version raises 400 via `InvalidInput` at api.py:4946. Please match the existing behavior.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    @wsgi.action(\u0027promote\u0027)"},{"line_number":278,"context_line":"    @wsgi.Controller.authorize"},{"line_number":279,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":280,"context_line":"    def promote(self, req, id, body):"},{"line_number":281,"context_line":"        \"\"\"Promote a share server replica.\"\"\""},{"line_number":282,"context_line":"        context \u003d req.environ[\u0027manila.context\u0027]"},{"line_number":283,"context_line":"        promote_data \u003d body.get(\u0027promote\u0027, {})"}],"source_content_type":"text/x-python","patch_set":50,"id":"2ae9db3c_00ac596f","line":280,"in_reply_to":"3be59f85_7519b2f7","updated":"2026-08-20 12:43:49.000000000","message":"Done, matching with share replica.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":314,"context_line":"    @wsgi.action(\u0027reset_replica_state\u0027)"},{"line_number":315,"context_line":"    @wsgi.Controller.authorize"},{"line_number":316,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":317,"context_line":"    def reset_replica_state(self, req, id, body):"},{"line_number":318,"context_line":"        \"\"\"Reset the replica_state of a share server replica.\"\"\""},{"line_number":319,"context_line":"        return self._reset_status(req, id, body, status_attr\u003d\u0027replica_state\u0027)"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"e2fbfe4a_39e6a37a","line":317,"updated":"2026-08-14 06:32:26.000000000","message":"There is `reset_replica_state` and `force_delete`, but no `reset_status` action. The existing `share_replicas.py` has all three. If a share server replica gets stuck in `creating` or `deleting`, there is no admin action to reset its status without force-deleting it. Also, share servers use `STATUS_ACTIVE` (\u0027active\u0027) but `AdminActionsMixin.valid_statuses[\u0027status\u0027]` does not include it, so if you do add `reset_status`, you will need to override `valid_statuses` to include `STATUS_ACTIVE`.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":314,"context_line":"    @wsgi.action(\u0027reset_replica_state\u0027)"},{"line_number":315,"context_line":"    @wsgi.Controller.authorize"},{"line_number":316,"context_line":"    @wsgi.response(http_client.ACCEPTED)"},{"line_number":317,"context_line":"    def reset_replica_state(self, req, id, body):"},{"line_number":318,"context_line":"        \"\"\"Reset the replica_state of a share server replica.\"\"\""},{"line_number":319,"context_line":"        return self._reset_status(req, id, body, status_attr\u003d\u0027replica_state\u0027)"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"c0624fd5_c55426ef","line":317,"in_reply_to":"e2fbfe4a_39e6a37a","updated":"2026-08-20 12:43:49.000000000","message":"Initially we decided to use the share server set command to update the status but that seems to misleading, so I have added the reset_status method for share server replica also. Added the same support in python manila client \nos share server replica set --help\nusage: openstack share server replica set [-h] [--replica-state \u003creplica-state\u003e] [--status \u003cstatus\u003e]\n                                          [--property \u003ckey\u003dvalue\u003e]\n                                          \u003creplica\u003e","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/api/v2/shares.py":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"d1bf8570f2b5014f798a251bc7ab6c57a538c643","unresolved":true,"context_lines":[{"line_number":1560,"context_line":"                if add_protected_via_ssr:"},{"line_number":1561,"context_line":"                    share_obj[\u0027protected_via_share_server_replica\u0027] \u003d ("},{"line_number":1562,"context_line":"                        share_utils."},{"line_number":1563,"context_line":"                        is_share_protected_via_share_server_replica("},{"line_number":1564,"context_line":"                            context, db, share_obj)"},{"line_number":1565,"context_line":"                    )"},{"line_number":1566,"context_line":"            shares \u003d self._view_builder.detail_list(req, shares, total_count)"}],"source_content_type":"text/x-python","patch_set":24,"id":"d70486a7_51e09d47","line":1563,"range":{"start_line":1563,"start_character":24,"end_line":1563,"end_character":67},"updated":"2026-07-16 06:23:39.000000000","message":"Make sure if replica status and state is in error state, we should not consider \"protected_via_share_server_replica\" to true.","commit_id":"20fca733a15d6d54d9e0d1f25724c2efd185dc5f"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":1560,"context_line":"                if add_protected_via_ssr:"},{"line_number":1561,"context_line":"                    share_obj[\u0027protected_via_share_server_replica\u0027] \u003d ("},{"line_number":1562,"context_line":"                        share_utils."},{"line_number":1563,"context_line":"                        is_share_protected_via_share_server_replica("},{"line_number":1564,"context_line":"                            context, db, share_obj)"},{"line_number":1565,"context_line":"                    )"},{"line_number":1566,"context_line":"            shares \u003d self._view_builder.detail_list(req, shares, total_count)"}],"source_content_type":"text/x-python","patch_set":24,"id":"ddd94e84_09670e58","line":1563,"range":{"start_line":1563,"start_character":24,"end_line":1563,"end_character":67},"in_reply_to":"436e1857_4b342cff","updated":"2026-08-05 19:46:54.000000000","message":"done","commit_id":"20fca733a15d6d54d9e0d1f25724c2efd185dc5f"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"b096a45b2b3f80dfc0bb9027458dde018c362ea4","unresolved":true,"context_lines":[{"line_number":1560,"context_line":"                if add_protected_via_ssr:"},{"line_number":1561,"context_line":"                    share_obj[\u0027protected_via_share_server_replica\u0027] \u003d ("},{"line_number":1562,"context_line":"                        share_utils."},{"line_number":1563,"context_line":"                        is_share_protected_via_share_server_replica("},{"line_number":1564,"context_line":"                            context, db, share_obj)"},{"line_number":1565,"context_line":"                    )"},{"line_number":1566,"context_line":"            shares \u003d self._view_builder.detail_list(req, shares, total_count)"}],"source_content_type":"text/x-python","patch_set":24,"id":"436e1857_4b342cff","line":1563,"range":{"start_line":1563,"start_character":24,"end_line":1563,"end_character":67},"in_reply_to":"d70486a7_51e09d47","updated":"2026-07-29 12:39:23.000000000","message":"This needs fixing. Share should not be in protected state if the share server replica is in error state.","commit_id":"20fca733a15d6d54d9e0d1f25724c2efd185dc5f"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":1406,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":1407,"context_line":""},{"line_number":1408,"context_line":"        if req.api_version_request \u003e\u003d api_version.APIVersionRequest(\u00272.98\u0027):"},{"line_number":1409,"context_line":"            share[\u0027protected_via_share_server_replica\u0027] \u003d ("},{"line_number":1410,"context_line":"                share_utils.is_share_protected_via_share_server_replica("},{"line_number":1411,"context_line":"                    context, db, share)"},{"line_number":1412,"context_line":"            )"},{"line_number":1413,"context_line":""},{"line_number":1414,"context_line":"        return self._view_builder.detail(req, share)"},{"line_number":1415,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"afd9e6d2_a005bca7","line":1412,"range":{"start_line":1409,"start_character":12,"end_line":1412,"end_character":13},"updated":"2026-07-31 14:47:34.000000000","message":"This was discussed in the spec: https://review.opendev.org/c/openstack/manila-specs/+/988495/comment/bb990949_c825d8cf/ - instead of making several calls over this files to check whether something is \"protected\" or not, why not make it a property in the database, calculate it once and just consume in the API?\n\nAlso, this has a big performance implication as well, for every time is called","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":true,"context_lines":[{"line_number":1406,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":1407,"context_line":""},{"line_number":1408,"context_line":"        if req.api_version_request \u003e\u003d api_version.APIVersionRequest(\u00272.98\u0027):"},{"line_number":1409,"context_line":"            share[\u0027protected_via_share_server_replica\u0027] \u003d ("},{"line_number":1410,"context_line":"                share_utils.is_share_protected_via_share_server_replica("},{"line_number":1411,"context_line":"                    context, db, share)"},{"line_number":1412,"context_line":"            )"},{"line_number":1413,"context_line":""},{"line_number":1414,"context_line":"        return self._view_builder.detail(req, share)"},{"line_number":1415,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"87a73545_e97e2530","line":1412,"range":{"start_line":1409,"start_character":12,"end_line":1412,"end_character":13},"in_reply_to":"afd9e6d2_a005bca7","updated":"2026-08-05 19:46:54.000000000","message":"Initially that was the plan, then I think Goutham suggested to calculate this value on fly. Waiting for other to comment on this","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":1553,"context_line":"                sort_dir\u003dsort_dir)"},{"line_number":1554,"context_line":""},{"line_number":1555,"context_line":"        if is_detail:"},{"line_number":1556,"context_line":"            add_protected_via_ssr \u003d ("},{"line_number":1557,"context_line":"                req.api_version_request \u003e\u003d"},{"line_number":1558,"context_line":"                api_version.APIVersionRequest(\u00272.98\u0027))"},{"line_number":1559,"context_line":"            for share_obj in shares:"},{"line_number":1560,"context_line":"                if add_protected_via_ssr:"},{"line_number":1561,"context_line":"                    share_obj[\u0027protected_via_share_server_replica\u0027] \u003d ("},{"line_number":1562,"context_line":"                        share_utils."},{"line_number":1563,"context_line":"                        is_share_protected_via_share_server_replica("},{"line_number":1564,"context_line":"                            context, db, share_obj)"},{"line_number":1565,"context_line":"                    )"},{"line_number":1566,"context_line":"            shares \u003d self._view_builder.detail_list(req, shares, total_count)"},{"line_number":1567,"context_line":"        else:"},{"line_number":1568,"context_line":"            shares \u003d self._view_builder.summary_list(req, shares, total_count)"}],"source_content_type":"text/x-python","patch_set":37,"id":"f586e33b_759096e7","line":1565,"range":{"start_line":1556,"start_character":12,"end_line":1565,"end_character":21},"updated":"2026-07-31 14:47:34.000000000","message":"we\u0027re doing views manipulations here - I think we should go the property route and just update the views with what we need.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":1553,"context_line":"                sort_dir\u003dsort_dir)"},{"line_number":1554,"context_line":""},{"line_number":1555,"context_line":"        if is_detail:"},{"line_number":1556,"context_line":"            add_protected_via_ssr \u003d ("},{"line_number":1557,"context_line":"                req.api_version_request \u003e\u003d"},{"line_number":1558,"context_line":"                api_version.APIVersionRequest(\u00272.98\u0027))"},{"line_number":1559,"context_line":"            for share_obj in shares:"},{"line_number":1560,"context_line":"                if add_protected_via_ssr:"},{"line_number":1561,"context_line":"                    share_obj[\u0027protected_via_share_server_replica\u0027] \u003d ("},{"line_number":1562,"context_line":"                        share_utils."},{"line_number":1563,"context_line":"                        is_share_protected_via_share_server_replica("},{"line_number":1564,"context_line":"                            context, db, share_obj)"},{"line_number":1565,"context_line":"                    )"},{"line_number":1566,"context_line":"            shares \u003d self._view_builder.detail_list(req, shares, total_count)"},{"line_number":1567,"context_line":"        else:"},{"line_number":1568,"context_line":"            shares \u003d self._view_builder.summary_list(req, shares, total_count)"}],"source_content_type":"text/x-python","patch_set":37,"id":"6d726b70_6646921a","line":1565,"range":{"start_line":1556,"start_character":12,"end_line":1565,"end_character":21},"in_reply_to":"f586e33b_759096e7","updated":"2026-08-05 19:46:54.000000000","message":"This is good point, I removed this code and added in view builder.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"}],"manila/api/views/share_server_replicas.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    _detail_version_modifiers \u003d [\"property\"]"},{"line_number":26,"context_line":"    "},{"line_number":27,"context_line":"    def build_replica(self, replica, detailed\u003dTrue):"},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        Build the view for a single replica."},{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"0aa3beef_3f7c2c23","line":28,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    _detail_version_modifiers \u003d [\"property\"]"},{"line_number":26,"context_line":"    "},{"line_number":27,"context_line":"    def build_replica(self, replica, detailed\u003dTrue):"},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        Build the view for a single replica."},{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"d7689c2c_ef595be0","line":28,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    "},{"line_number":27,"context_line":"    def build_replica(self, replica, detailed\u003dTrue):"},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        Build the view for a single replica."},{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"}],"source_content_type":"text/x-python","patch_set":1,"id":"858fe904_9ff7abe0","line":29,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    "},{"line_number":27,"context_line":"    def build_replica(self, replica, detailed\u003dTrue):"},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        Build the view for a single replica."},{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"}],"source_content_type":"text/x-python","patch_set":1,"id":"0f565d20_3df4a40f","line":29,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    def build_replica(self, replica, detailed\u003dTrue):"},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        Build the view for a single replica."},{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"}],"source_content_type":"text/x-python","patch_set":1,"id":"73a6ce42_a78495f6","line":30,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    def build_replica(self, replica, detailed\u003dTrue):"},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        Build the view for a single replica."},{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"}],"source_content_type":"text/x-python","patch_set":1,"id":"5e9ab126_aa707a49","line":30,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        Build the view for a single replica."},{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"b9ab6127_7343153c","line":31,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        Build the view for a single replica."},{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"2aae810e_642bbd81","line":31,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        Build the view for a single replica."},{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"f332f203_30a66b68","line":32,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        Build the view for a single replica."},{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"d84fdf1f_688e9013","line":32,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"},{"line_number":36,"context_line":"            Dictionary representation of replica for API response"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f743fb9_b009e0f0","line":33,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        "},{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"},{"line_number":36,"context_line":"            Dictionary representation of replica for API response"}],"source_content_type":"text/x-python","patch_set":1,"id":"fed80a92_19cfb4a3","line":33,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"},{"line_number":36,"context_line":"            Dictionary representation of replica for API response"},{"line_number":37,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"cd444769_1057901b","line":34,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        Args:"},{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"},{"line_number":36,"context_line":"            Dictionary representation of replica for API response"},{"line_number":37,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9b3cfdad_1ce6f1fa","line":34,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"},{"line_number":36,"context_line":"            Dictionary representation of replica for API response"},{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        replica_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"755586f2_9f773680","line":35,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            replica: Replica database object"},{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"},{"line_number":36,"context_line":"            Dictionary representation of replica for API response"},{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        replica_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"0ebab6cb_2820aebc","line":35,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"},{"line_number":36,"context_line":"            Dictionary representation of replica for API response"},{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        replica_dict \u003d {"},{"line_number":39,"context_line":"            \"id\": replica.get(\"id\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"f1494747_d1d5dff1","line":36,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"},{"line_number":36,"context_line":"            Dictionary representation of replica for API response"},{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        replica_dict \u003d {"},{"line_number":39,"context_line":"            \"id\": replica.get(\"id\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"0f4439ae_81251fb5","line":36,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"},{"line_number":36,"context_line":"            Dictionary representation of replica for API response"},{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        replica_dict \u003d {"},{"line_number":39,"context_line":"            \"id\": replica.get(\"id\"),"},{"line_number":40,"context_line":"            \"share_server_id\": replica.get(\"share_server_id\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"b530c889_06f2d64b","line":37,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        "},{"line_number":35,"context_line":"        Returns:"},{"line_number":36,"context_line":"            Dictionary representation of replica for API response"},{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        replica_dict \u003d {"},{"line_number":39,"context_line":"            \"id\": replica.get(\"id\"),"},{"line_number":40,"context_line":"            \"share_server_id\": replica.get(\"share_server_id\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"2cebcd39_799d964d","line":37,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return {\"share_server_replica\": replica_dict}"},{"line_number":57,"context_line":"    "},{"line_number":58,"context_line":"    def build_replicas(self, replicas, detailed\u003dTrue):"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Build the view for a list of replicas."},{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"694b95ec_bab1b73d","line":59,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        return {\"share_server_replica\": replica_dict}"},{"line_number":57,"context_line":"    "},{"line_number":58,"context_line":"    def build_replicas(self, replicas, detailed\u003dTrue):"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Build the view for a list of replicas."},{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fe24882d_c2ddb1a0","line":59,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    "},{"line_number":58,"context_line":"    def build_replicas(self, replicas, detailed\u003dTrue):"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Build the view for a list of replicas."},{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"}],"source_content_type":"text/x-python","patch_set":1,"id":"df186404_04043fca","line":60,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    "},{"line_number":58,"context_line":"    def build_replicas(self, replicas, detailed\u003dTrue):"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Build the view for a list of replicas."},{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"}],"source_content_type":"text/x-python","patch_set":1,"id":"b76659a2_878e46d6","line":60,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def build_replicas(self, replicas, detailed\u003dTrue):"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Build the view for a list of replicas."},{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"}],"source_content_type":"text/x-python","patch_set":1,"id":"8838eda7_d98bfaeb","line":61,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def build_replicas(self, replicas, detailed\u003dTrue):"},{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Build the view for a list of replicas."},{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"}],"source_content_type":"text/x-python","patch_set":1,"id":"f017a718_f3827511","line":61,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Build the view for a list of replicas."},{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"7072f0e7_d40243a5","line":62,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \"\"\""},{"line_number":60,"context_line":"        Build the view for a list of replicas."},{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"540dbf1e_2b286fc6","line":62,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        Build the view for a list of replicas."},{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"61f30cd7_d66ee725","line":63,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        Build the view for a list of replicas."},{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3847dcff_f28f98c2","line":63,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"},{"line_number":67,"context_line":"            Dictionary representation of replica list for API response"}],"source_content_type":"text/x-python","patch_set":1,"id":"33caf6e4_72638126","line":64,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        "},{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"},{"line_number":67,"context_line":"            Dictionary representation of replica list for API response"}],"source_content_type":"text/x-python","patch_set":1,"id":"b6c0b996_3ae479cc","line":64,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"},{"line_number":67,"context_line":"            Dictionary representation of replica list for API response"},{"line_number":68,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"2938e805_afb8d5a6","line":65,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        Args:"},{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"},{"line_number":67,"context_line":"            Dictionary representation of replica list for API response"},{"line_number":68,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fd98a4c6_83beffe9","line":65,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"},{"line_number":67,"context_line":"            Dictionary representation of replica list for API response"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        replica_list \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"d763336f_08dfa083","line":66,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            replicas: List of replica database objects"},{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"},{"line_number":67,"context_line":"            Dictionary representation of replica list for API response"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        replica_list \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"cb85c833_913e2d0d","line":66,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"},{"line_number":67,"context_line":"            Dictionary representation of replica list for API response"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        replica_list \u003d []"},{"line_number":70,"context_line":"        for replica in replicas:"}],"source_content_type":"text/x-python","patch_set":1,"id":"19f01497_11b98510","line":67,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            detailed: If True, include all detailed fields"},{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"},{"line_number":67,"context_line":"            Dictionary representation of replica list for API response"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        replica_list \u003d []"},{"line_number":70,"context_line":"        for replica in replicas:"}],"source_content_type":"text/x-python","patch_set":1,"id":"b1c16068_16f8b8ad","line":67,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"},{"line_number":67,"context_line":"            Dictionary representation of replica list for API response"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        replica_list \u003d []"},{"line_number":70,"context_line":"        for replica in replicas:"},{"line_number":71,"context_line":"            replica_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"85bf0b14_76ddf19c","line":68,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        "},{"line_number":66,"context_line":"        Returns:"},{"line_number":67,"context_line":"            Dictionary representation of replica list for API response"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        replica_list \u003d []"},{"line_number":70,"context_line":"        for replica in replicas:"},{"line_number":71,"context_line":"            replica_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"de657f57_da5142a2","line":68,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":36,"context_line":"            status \u003d\u003d constants.STATUS_INACTIVE"},{"line_number":37,"context_line":"            and replica_state !\u003d constants.REPLICA_STATE_ACTIVE"},{"line_number":38,"context_line":"        ):"},{"line_number":39,"context_line":"            return constants.STATUS_AVAILABLE"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        return status"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"10d8c91d_763bb84d","line":39,"range":{"start_line":39,"start_character":29,"end_line":39,"end_character":45},"updated":"2026-07-31 14:47:34.000000000","message":"shouldn\u0027t we stick to active/inactive?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            status \u003d\u003d constants.STATUS_INACTIVE"},{"line_number":37,"context_line":"            and replica_state !\u003d constants.REPLICA_STATE_ACTIVE"},{"line_number":38,"context_line":"        ):"},{"line_number":39,"context_line":"            return constants.STATUS_AVAILABLE"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        return status"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"597ec9cd_86effb03","line":39,"range":{"start_line":39,"start_character":29,"end_line":39,"end_character":45},"in_reply_to":"10d8c91d_763bb84d","updated":"2026-08-05 19:46:54.000000000","message":"For Share Replica, we display the status as Available. To stay consistent, we want to show the same Available status for Share Server Replica as well. This keeps the behaviour consistent and avoids confusing customers. This change affects only the status shown in the API and CLI; internally, we will continue to maintain the status as Active and Inactive.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a662c78efb3d40f95dfd30a789c9485f1eea1bc9","unresolved":true,"context_lines":[{"line_number":66,"context_line":"        \"\"\"Detailed view of a single share server replica.\"\"\""},{"line_number":67,"context_line":"        replica_dict \u003d self.summary(request, replica)[\"share_server_replica\"]"},{"line_number":68,"context_line":"        replica_dict.update({"},{"line_number":69,"context_line":"            \"created_at\": replica.get(\"created_at\"),"},{"line_number":70,"context_line":"            \"updated_at\": replica.get(\"updated_at\"),"},{"line_number":71,"context_line":"        })"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"49c78ea4_c051719f","line":69,"updated":"2026-08-13 07:35:22.000000000","message":"updated_at should be part of summary.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        \"\"\"Detailed view of a single share server replica.\"\"\""},{"line_number":67,"context_line":"        replica_dict \u003d self.summary(request, replica)[\"share_server_replica\"]"},{"line_number":68,"context_line":"        replica_dict.update({"},{"line_number":69,"context_line":"            \"created_at\": replica.get(\"created_at\"),"},{"line_number":70,"context_line":"            \"updated_at\": replica.get(\"updated_at\"),"},{"line_number":71,"context_line":"        })"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"f909e75e_31d60980","line":69,"in_reply_to":"49c78ea4_c051719f","updated":"2026-08-20 12:43:49.000000000","message":"This is align with share replica, in share replica also adding below in details \n\u0027updated_at\u0027: replica.get(\u0027updated_at\u0027),","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/api/views/shares.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":224,"context_line":"    def add_protected_via_share_server_replica_field("},{"line_number":225,"context_line":"            self, context, share_dict, share):"},{"line_number":226,"context_line":"        share_dict[\u0027protected_via_share_server_replica\u0027] \u003d ("},{"line_number":227,"context_line":"            share_utils.is_share_protected_via_share_server_replica("},{"line_number":228,"context_line":"                context, db, share)"},{"line_number":229,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":50,"id":"5572d230_045319fb","line":227,"updated":"2026-08-14 06:32:26.000000000","message":"`is_share_protected_via_share_server_replica()` makes 2 DB queries per share (`share_server_get` + `share_server_get_all_with_filters`). This is called from the view builder for every share in a list response, so a list returning 100 shares triggers 200 extra DB queries. The view builder should not make DB calls. Compute this at the API layer or include it in the share query\u0027s eager loading.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    def add_protected_via_share_server_replica_field("},{"line_number":225,"context_line":"            self, context, share_dict, share):"},{"line_number":226,"context_line":"        share_dict[\u0027protected_via_share_server_replica\u0027] \u003d ("},{"line_number":227,"context_line":"            share_utils.is_share_protected_via_share_server_replica("},{"line_number":228,"context_line":"                context, db, share)"},{"line_number":229,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":50,"id":"b16d93f1_5ca90690","line":227,"in_reply_to":"5572d230_045319fb","updated":"2026-08-20 12:43:49.000000000","message":"Moved the logic to Share controller, getting the protected_via_share_server_replica from share object. protected_via_share_server_replica field will be only applicable for one share, mean, we only show this filed for openstack share show \u003cshare\u003e command.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/db/api.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":2011,"context_line":""},{"line_number":2012,"context_line":"####################"},{"line_number":2013,"context_line":""},{"line_number":2014,"context_line":"def share_server_replica_create(context, values):"},{"line_number":2015,"context_line":"    \"\"\"Create a share server replica.\"\"\""},{"line_number":2016,"context_line":"    return IMPL.share_server_replica_create(context, values)"},{"line_number":2017,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"19d9be5f_76d15289","line":2014,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":2070,"context_line":"    \"\"\"Delete metadata property for a share server replica.\"\"\""},{"line_number":2071,"context_line":"    return IMPL.share_server_replica_property_delete(context, replica_id, key)"},{"line_number":2072,"context_line":""},{"line_number":2073,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7b9d9b84_163c777c","line":2073,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: W391 blank line at end of file","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"###################"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def service_destroy(context, service_id):"},{"line_number":87,"context_line":"    \"\"\"Destroy the service or raise if it does not exist.\"\"\""},{"line_number":88,"context_line":"    return IMPL.service_destroy(context, service_id)"}],"source_content_type":"text/x-python","patch_set":37,"id":"b3a39c36_31687b7e","side":"PARENT","line":85,"updated":"2026-07-31 14:47:34.000000000","message":"please undo","commit_id":"f476edebb0246ecc08244aec81799c8a74b9ef42"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"###################"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"def service_destroy(context, service_id):"},{"line_number":87,"context_line":"    \"\"\"Destroy the service or raise if it does not exist.\"\"\""},{"line_number":88,"context_line":"    return IMPL.service_destroy(context, service_id)"}],"source_content_type":"text/x-python","patch_set":37,"id":"92f7173a_69774e66","side":"PARENT","line":85,"in_reply_to":"b3a39c36_31687b7e","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"f476edebb0246ecc08244aec81799c8a74b9ef42"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":2022,"context_line":"def share_server_replica_metadata_get_item(context, share_server_id, key):"},{"line_number":2023,"context_line":"    \"\"\"Get one metadata property for a share server replica.\"\"\""},{"line_number":2024,"context_line":"    value \u003d IMPL.share_server_metadata_get_item(context, share_server_id, key)"},{"line_number":2025,"context_line":"    if value is None:"},{"line_number":2026,"context_line":"        raise exception.MetadataItemNotFound"},{"line_number":2027,"context_line":"    return {key: value}"},{"line_number":2028,"context_line":""},{"line_number":2029,"context_line":""},{"line_number":2030,"context_line":"def share_server_replica_metadata_update(context, share_server_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"69cbe0d1_84bda2fe","line":2027,"range":{"start_line":2025,"start_character":0,"end_line":2027,"end_character":23},"updated":"2026-07-31 14:47:34.000000000","message":"same","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":2022,"context_line":"def share_server_replica_metadata_get_item(context, share_server_id, key):"},{"line_number":2023,"context_line":"    \"\"\"Get one metadata property for a share server replica.\"\"\""},{"line_number":2024,"context_line":"    value \u003d IMPL.share_server_metadata_get_item(context, share_server_id, key)"},{"line_number":2025,"context_line":"    if value is None:"},{"line_number":2026,"context_line":"        raise exception.MetadataItemNotFound"},{"line_number":2027,"context_line":"    return {key: value}"},{"line_number":2028,"context_line":""},{"line_number":2029,"context_line":""},{"line_number":2030,"context_line":"def share_server_replica_metadata_update(context, share_server_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"00c166b0_e5de3347","line":2027,"range":{"start_line":2025,"start_character":0,"end_line":2027,"end_character":23},"in_reply_to":"69cbe0d1_84bda2fe","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":2030,"context_line":"def share_server_replica_metadata_update(context, share_server_id,"},{"line_number":2031,"context_line":"                                         metadata, delete):"},{"line_number":2032,"context_line":"    \"\"\"Update metadata for a share server replica.\"\"\""},{"line_number":2033,"context_line":"    delete \u003d strutils.bool_from_string(delete)"},{"line_number":2034,"context_line":"    if metadata is None:"},{"line_number":2035,"context_line":"        metadata \u003d {}"},{"line_number":2036,"context_line":""},{"line_number":2037,"context_line":"    if delete:"},{"line_number":2038,"context_line":"        existing \u003d IMPL.share_server_metadata_get(context, share_server_id)"},{"line_number":2039,"context_line":"        for key in existing:"},{"line_number":2040,"context_line":"            if key not in metadata:"},{"line_number":2041,"context_line":"                IMPL.share_server_metadata_delete(context, share_server_id,"},{"line_number":2042,"context_line":"                                                  key)"},{"line_number":2043,"context_line":""},{"line_number":2044,"context_line":"    for key, value in metadata.items():"},{"line_number":2045,"context_line":"        IMPL.share_server_metadata_update(context, share_server_id, key, value)"},{"line_number":2046,"context_line":""},{"line_number":2047,"context_line":"    return IMPL.share_server_metadata_get(context, share_server_id)"},{"line_number":2048,"context_line":""},{"line_number":2049,"context_line":""},{"line_number":2050,"context_line":"def share_server_replica_metadata_update_item(context, share_server_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"81c3f496_af9c8cdf","line":2047,"range":{"start_line":2033,"start_character":4,"end_line":2047,"end_character":67},"updated":"2026-07-31 14:47:34.000000000","message":"let\u0027s try avoid doing any logic here and only making the calls. the logic belongs to the sqlalchemy.py","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":2030,"context_line":"def share_server_replica_metadata_update(context, share_server_id,"},{"line_number":2031,"context_line":"                                         metadata, delete):"},{"line_number":2032,"context_line":"    \"\"\"Update metadata for a share server replica.\"\"\""},{"line_number":2033,"context_line":"    delete \u003d strutils.bool_from_string(delete)"},{"line_number":2034,"context_line":"    if metadata is None:"},{"line_number":2035,"context_line":"        metadata \u003d {}"},{"line_number":2036,"context_line":""},{"line_number":2037,"context_line":"    if delete:"},{"line_number":2038,"context_line":"        existing \u003d IMPL.share_server_metadata_get(context, share_server_id)"},{"line_number":2039,"context_line":"        for key in existing:"},{"line_number":2040,"context_line":"            if key not in metadata:"},{"line_number":2041,"context_line":"                IMPL.share_server_metadata_delete(context, share_server_id,"},{"line_number":2042,"context_line":"                                                  key)"},{"line_number":2043,"context_line":""},{"line_number":2044,"context_line":"    for key, value in metadata.items():"},{"line_number":2045,"context_line":"        IMPL.share_server_metadata_update(context, share_server_id, key, value)"},{"line_number":2046,"context_line":""},{"line_number":2047,"context_line":"    return IMPL.share_server_metadata_get(context, share_server_id)"},{"line_number":2048,"context_line":""},{"line_number":2049,"context_line":""},{"line_number":2050,"context_line":"def share_server_replica_metadata_update_item(context, share_server_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"2f895dc2_49d02487","line":2047,"range":{"start_line":2033,"start_character":4,"end_line":2047,"end_character":67},"in_reply_to":"81c3f496_af9c8cdf","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":2051,"context_line":"                                              metadata):"},{"line_number":2052,"context_line":"    \"\"\"Update one metadata property for a share server replica.\"\"\""},{"line_number":2053,"context_line":"    for key, value in metadata.items():"},{"line_number":2054,"context_line":"        IMPL.share_server_metadata_update(context, share_server_id, key, value)"},{"line_number":2055,"context_line":""},{"line_number":2056,"context_line":"    return IMPL.share_server_metadata_get(context, share_server_id)"},{"line_number":2057,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"f3ad6024_fd03f035","line":2054,"range":{"start_line":2054,"start_character":0,"end_line":2054,"end_character":2},"updated":"2026-07-31 14:47:34.000000000","message":"same","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":2051,"context_line":"                                              metadata):"},{"line_number":2052,"context_line":"    \"\"\"Update one metadata property for a share server replica.\"\"\""},{"line_number":2053,"context_line":"    for key, value in metadata.items():"},{"line_number":2054,"context_line":"        IMPL.share_server_metadata_update(context, share_server_id, key, value)"},{"line_number":2055,"context_line":""},{"line_number":2056,"context_line":"    return IMPL.share_server_metadata_get(context, share_server_id)"},{"line_number":2057,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"e89fc3f0_ac394120","line":2054,"range":{"start_line":2054,"start_character":0,"end_line":2054,"end_character":2},"in_reply_to":"f3ad6024_fd03f035","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"}],"manila/db/migrations/alembic/versions/026a4c6b7e8f_add_share_server_replica_tables.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"Add Share Server Replica tables"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Revision ID: 026a4c6b7e8f"},{"line_number":4,"context_line":"Revises: 004e506e922e"}],"source_content_type":"text/x-python","patch_set":1,"id":"6d588259_573c2d2e","line":1,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H102: Apache 2.0 license header not found","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"from alembic import op"},{"line_number":10,"context_line":"import sqlalchemy as sa"},{"line_number":11,"context_line":"from sqlalchemy.dialects import mysql"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# revision identifiers, used by Alembic."},{"line_number":14,"context_line":"revision \u003d \u0027026a4c6b7e8f\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"b2d3f05e_2b993857","line":11,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: F401 \u0027sqlalchemy.dialects.mysql\u0027 imported but unused","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        sa.Index(\u0027ix_share_server_replicas_host\u0027, \u0027host\u0027),"},{"line_number":58,"context_line":"        sa.Index(\u0027ix_share_server_replicas_share_network_id\u0027,"},{"line_number":59,"context_line":"                 \u0027share_network_id\u0027),"},{"line_number":60,"context_line":"        sa.Index(\u0027ix_share_server_replicas_share_server_id\u0027, \u0027share_server_id\u0027),"},{"line_number":61,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027"},{"line_number":62,"context_line":"    )"},{"line_number":63,"context_line":"    "}],"source_content_type":"text/x-python","patch_set":1,"id":"b0e7c308_f166c8e3","line":60,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        \u0027ix_share_server_replicas_share_server_id\u0027,"},{"line_number":116,"context_line":"        table_name\u003d\u0027share_server_replicas\u0027"},{"line_number":117,"context_line":"    )"},{"line_number":118,"context_line":"    op.drop_index(\u0027ix_share_server_replicas_deleted\u0027, table_name\u003d\u0027share_server_replicas\u0027)"},{"line_number":119,"context_line":"    op.drop_table(\u0027share_server_replicas\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"eae49dda_b8b9f443","line":118,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: E501 line too long (89 \u003e 79 characters)","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"}],"manila/db/migrations/alembic/versions/b32cd4347475_add_share_server_metadata_table.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":47,"context_line":"                       sql.ForeignKey(\u0027share_servers.id\u0027), nullable\u003dFalse),"},{"line_number":48,"context_line":"            sql.Column(\u0027key\u0027, sql.String(255), nullable\u003dFalse),"},{"line_number":49,"context_line":"            sql.Column(\u0027value\u0027, sql.String(1023), nullable\u003dFalse),"},{"line_number":50,"context_line":"            sql.Column(\u0027id\u0027, sql.String(36), primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":51,"context_line":"            mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":52,"context_line":"            mysql_charset\u003d\u0027utf8\u0027"},{"line_number":53,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":50,"id":"c8dd9ee3_383ecf85","line":50,"updated":"2026-08-14 06:32:26.000000000","message":"The primary key `id` is `String(36)`. Every existing metadata table in Manila (`ShareMetadata`, `ShareInstanceMetadata`, `ShareSnapshotMetadata`, etc.) uses `Integer`. Please match the convention. Same mismatch in the model at `models.py:1713`.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/db/migrations/alembic/versions/c3a91f4e2d77_add_protected_via_share_server_replica_to_share_instances.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"Add protected_via_share_server_replica to share_instances."},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"Revision ID: c3a91f4e2d77"},{"line_number":4,"context_line":"Revises: 7f7b8e6d4b10"}],"source_content_type":"text/x-python","patch_set":1,"id":"2bdab4e7_cca8d8e4","line":1,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: H102: Apache 2.0 license header not found","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"}],"manila/db/migrations/alembic/versions/g12h34i56j78_add_share_server_metadata_table.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# revision identifiers, used by Alembic."},{"line_number":22,"context_line":"revision \u003d \u0027g12h34i56j78\u0027"},{"line_number":23,"context_line":"down_revision \u003d \u0027f01f5c8e3a1b\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from alembic import op"}],"source_content_type":"text/x-python","patch_set":37,"id":"ed1f9177_b73bfc53","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":2},"updated":"2026-07-31 14:47:34.000000000","message":"is this migration working? how was this generated? It\u0027s quite unusual to see revision numbers that are not hexadecimal format","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# revision identifiers, used by Alembic."},{"line_number":22,"context_line":"revision \u003d \u0027g12h34i56j78\u0027"},{"line_number":23,"context_line":"down_revision \u003d \u0027f01f5c8e3a1b\u0027"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from alembic import op"}],"source_content_type":"text/x-python","patch_set":37,"id":"e5186054_2ed330bc","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":2},"in_reply_to":"ed1f9177_b73bfc53","updated":"2026-08-05 19:46:54.000000000","message":"I generated this file using AI. I am deleting this file and generating the new using \"alembic revision\" command.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"}],"manila/db/sqlalchemy/api.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"575ac5fced596ff3bc9336a19f2030f21ad071f3","unresolved":false,"context_lines":[{"line_number":8483,"context_line":"    if metadata_ref:"},{"line_number":8484,"context_line":"        metadata_ref.soft_delete(session\u003dcontext.session)"},{"line_number":8485,"context_line":""},{"line_number":8486,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"76a86d45_3505190a","line":8486,"updated":"2026-07-06 13:49:39.000000000","message":"pep8: W391 blank line at end of file","commit_id":"47a6c885a8394ae0e9a4095e17cbb4dcd8389a4b"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"b096a45b2b3f80dfc0bb9027458dde018c362ea4","unresolved":true,"context_lines":[{"line_number":7122,"context_line":"        models.ShareServer.source_share_server_id.isnot(None)"},{"line_number":7123,"context_line":"    )"},{"line_number":7124,"context_line":""},{"line_number":7125,"context_line":"    result \u003d query.first()"},{"line_number":7126,"context_line":"    return result[0] or 0"},{"line_number":7127,"context_line":""},{"line_number":7128,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7ef65f02_fe39ec8f","line":7125,"range":{"start_line":7125,"start_character":4,"end_line":7125,"end_character":26},"updated":"2026-07-29 12:39:23.000000000","message":"shouldnt we return all share server replicas instead of first? What would be the behaviour of this method in case we support multiple replicas per share server? Or is the expectation that we will always get one value from the db with the joins above so we return the first?","commit_id":"4b37a4900d334098111df92f2c916e3b3d579067"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":7122,"context_line":"        models.ShareServer.source_share_server_id.isnot(None)"},{"line_number":7123,"context_line":"    )"},{"line_number":7124,"context_line":""},{"line_number":7125,"context_line":"    result \u003d query.first()"},{"line_number":7126,"context_line":"    return result[0] or 0"},{"line_number":7127,"context_line":""},{"line_number":7128,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"15f94b5e_cc63d71b","line":7125,"range":{"start_line":7125,"start_character":4,"end_line":7125,"end_character":26},"in_reply_to":"352b632a_1a0f1402","updated":"2026-08-08 11:10:37.000000000","message":"It does not return a list of replica rows. It returns a single integer count of replicas for the project.\nthe query uses func.count(models.ShareServer.id.distinct()) and no group_by, so SQL returns one aggregate row.\nBecause of that, query.first() is fetching that one aggregate row, and result[0] is the count.\n\n\nIf one source server has multiple destination replicas in future, this method still works. each replica row has its own ShareServer.id, so the count increases accordingly.","commit_id":"4b37a4900d334098111df92f2c916e3b3d579067"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":7122,"context_line":"        models.ShareServer.source_share_server_id.isnot(None)"},{"line_number":7123,"context_line":"    )"},{"line_number":7124,"context_line":""},{"line_number":7125,"context_line":"    result \u003d query.first()"},{"line_number":7126,"context_line":"    return result[0] or 0"},{"line_number":7127,"context_line":""},{"line_number":7128,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"352b632a_1a0f1402","line":7125,"range":{"start_line":7125,"start_character":4,"end_line":7125,"end_character":26},"in_reply_to":"7ef65f02_fe39ec8f","updated":"2026-07-31 14:47:34.000000000","message":"+1","commit_id":"4b37a4900d334098111df92f2c916e3b3d579067"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":5726,"context_line":"@context_manager.writer"},{"line_number":5727,"context_line":"def share_server_delete(context, id):"},{"line_number":5728,"context_line":"    server_ref \u003d _share_server_get(context, id)"},{"line_number":5729,"context_line":"    replica_exists \u003d _share_server_get_query(context).filter_by("},{"line_number":5730,"context_line":"        source_share_server_id\u003did,"},{"line_number":5731,"context_line":"    ).first()"},{"line_number":5732,"context_line":"    if replica_exists:"},{"line_number":5733,"context_line":"        raise exception.ShareServerInUse(share_server_id\u003did)"},{"line_number":5734,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"179ff663_f442f0ab","line":5731,"range":{"start_line":5729,"start_character":4,"end_line":5731,"end_character":13},"updated":"2026-07-31 14:47:34.000000000","message":"in a hypotetical scenario that share migrations happened before the replication ever took place - is there a chance that we\u0027ll pick up share servers we should not?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":true,"context_lines":[{"line_number":5726,"context_line":"@context_manager.writer"},{"line_number":5727,"context_line":"def share_server_delete(context, id):"},{"line_number":5728,"context_line":"    server_ref \u003d _share_server_get(context, id)"},{"line_number":5729,"context_line":"    replica_exists \u003d _share_server_get_query(context).filter_by("},{"line_number":5730,"context_line":"        source_share_server_id\u003did,"},{"line_number":5731,"context_line":"    ).first()"},{"line_number":5732,"context_line":"    if replica_exists:"},{"line_number":5733,"context_line":"        raise exception.ShareServerInUse(share_server_id\u003did)"},{"line_number":5734,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"a43c3e14_9f738fd4","line":5731,"range":{"start_line":5729,"start_character":4,"end_line":5731,"end_character":13},"in_reply_to":"179ff663_f442f0ab","updated":"2026-08-05 19:46:54.000000000","message":"Before creating a replica, we ensure that the Share Server Replica status is Active. If it is Active, the user can proceed with creating the replication. If the Share Server has already been replicated and its status is still Active, we also allow the user to create replication for a migrated Share Server. This is a good scenario to cover, and we will add a test for it. Keeping this comment open, will test this and update this here.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a662c78efb3d40f95dfd30a789c9485f1eea1bc9","unresolved":true,"context_lines":[{"line_number":8561,"context_line":""},{"line_number":8562,"context_line":"@require_admin_context"},{"line_number":8563,"context_line":"@context_manager.writer"},{"line_number":8564,"context_line":"def share_server_metadata_update(context, share_server_id, metadata, delete):"},{"line_number":8565,"context_line":"    \"\"\"Update metadata for a share server, optionally deleting missing keys.\"\"\""},{"line_number":8566,"context_line":"    delete \u003d strutils.bool_from_string(delete)"},{"line_number":8567,"context_line":"    if metadata is None:"}],"source_content_type":"text/x-python","patch_set":50,"id":"b621376a_9c083de5","line":8564,"updated":"2026-08-13 07:35:22.000000000","message":"delete should have default value e.g. False","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":8561,"context_line":""},{"line_number":8562,"context_line":"@require_admin_context"},{"line_number":8563,"context_line":"@context_manager.writer"},{"line_number":8564,"context_line":"def share_server_metadata_update(context, share_server_id, metadata, delete):"},{"line_number":8565,"context_line":"    \"\"\"Update metadata for a share server, optionally deleting missing keys.\"\"\""},{"line_number":8566,"context_line":"    delete \u003d strutils.bool_from_string(delete)"},{"line_number":8567,"context_line":"    if metadata is None:"}],"source_content_type":"text/x-python","patch_set":50,"id":"52978c47_0f3bd109","line":8564,"in_reply_to":"b621376a_9c083de5","updated":"2026-08-20 12:43:49.000000000","message":"Done","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/db/sqlalchemy/models.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cfda0bea9b4d8d0952b8e1a7c60be67aedd3d534","unresolved":false,"context_lines":[{"line_number":1799,"context_line":"                    \u0027ShareServerReplica.id,\u0027"},{"line_number":1800,"context_line":"                    \u0027ShareServerReplicaProperty.deleted \u003d\u003d \"False\")\u0027,"},{"line_number":1801,"context_line":"    )"},{"line_number":1802,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e0efd374_2cc42ff5","line":1802,"updated":"2026-06-16 07:05:31.000000000","message":"pep8: W391 blank line at end of file","commit_id":"a3c8552eff6db5e9d75cc68380e4867324536bd0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":1722,"context_line":"    share_server \u003d orm.relationship("},{"line_number":1723,"context_line":"        \"ShareServer\","},{"line_number":1724,"context_line":"        foreign_keys\u003dshare_server_id,"},{"line_number":1725,"context_line":"        backref\u003d\u0027server_metadata\u0027,"},{"line_number":1726,"context_line":"        primaryjoin\u003d\u0027and_(\u0027"},{"line_number":1727,"context_line":"                    \u0027ShareServerMetadata.\u0027"},{"line_number":1728,"context_line":"                    \u0027share_server_id \u003d\u003d \u0027"}],"source_content_type":"text/x-python","patch_set":50,"id":"84107bb7_b1b99478","line":1725,"updated":"2026-08-14 06:32:26.000000000","message":"Backref name should be `share_server_metadata`.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":1722,"context_line":"    share_server \u003d orm.relationship("},{"line_number":1723,"context_line":"        \"ShareServer\","},{"line_number":1724,"context_line":"        foreign_keys\u003dshare_server_id,"},{"line_number":1725,"context_line":"        backref\u003d\u0027server_metadata\u0027,"},{"line_number":1726,"context_line":"        primaryjoin\u003d\u0027and_(\u0027"},{"line_number":1727,"context_line":"                    \u0027ShareServerMetadata.\u0027"},{"line_number":1728,"context_line":"                    \u0027share_server_id \u003d\u003d \u0027"}],"source_content_type":"text/x-python","patch_set":50,"id":"98f0064b_276975f2","line":1725,"in_reply_to":"84107bb7_b1b99478","updated":"2026-08-20 12:43:49.000000000","message":"Done","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/message/message_field.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":"1a3edf809e2d0915bef670f1a4925849e8b96b6d","unresolved":true,"context_lines":[{"line_number":193,"context_line":"          \"Please try again with a different configuration.\"))"},{"line_number":194,"context_line":"    RESYNC_FAILED_RECREATE_REPLICA \u003d ("},{"line_number":195,"context_line":"        \u0027035\u0027,"},{"line_number":196,"context_line":"        _(\"Share driver failed to resync the share server replica. \""},{"line_number":197,"context_line":"          \"Please delete this share server replica and create a new \""},{"line_number":198,"context_line":"          \"one to recover.\"))"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    ALL \u003d ("},{"line_number":201,"context_line":"        UNKNOWN_ERROR,"}],"source_content_type":"text/x-python","patch_set":31,"id":"3e78eafc_c7277e3c","line":198,"range":{"start_line":196,"start_character":9,"end_line":198,"end_character":28},"updated":"2026-07-29 12:48:40.000000000","message":"Resync failure can be temporary as well. Should we really say delete the share server replica and create new one to recover? Also if resync has failed, there is no guarantee delete will succeed.","commit_id":"4b37a4900d334098111df92f2c916e3b3d579067"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":193,"context_line":"          \"Please try again with a different configuration.\"))"},{"line_number":194,"context_line":"    RESYNC_FAILED_RECREATE_REPLICA \u003d ("},{"line_number":195,"context_line":"        \u0027035\u0027,"},{"line_number":196,"context_line":"        _(\"Share driver failed to resync the share server replica. \""},{"line_number":197,"context_line":"          \"Please delete this share server replica and create a new \""},{"line_number":198,"context_line":"          \"one to recover.\"))"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    ALL \u003d ("},{"line_number":201,"context_line":"        UNKNOWN_ERROR,"}],"source_content_type":"text/x-python","patch_set":31,"id":"4fd58740_9699e30c","line":198,"range":{"start_line":196,"start_character":9,"end_line":198,"end_character":28},"in_reply_to":"3e78eafc_c7277e3c","updated":"2026-08-05 19:46:54.000000000","message":"If the relationship does not return to a Healthy state after multiple resync attempts, it indicates an issue with the relationship. In that case, the user should delete the relationship either from the OpenStack side or with help from the storage admin to remove it from the backend and then create a new one from OpenStack. This is the purpose to add this message here.","commit_id":"4b37a4900d334098111df92f2c916e3b3d579067"}],"manila/policies/share_server_replicas.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":"1a3edf809e2d0915bef670f1a4925849e8b96b6d","unresolved":true,"context_lines":[{"line_number":21,"context_line":"BASE_POLICY_NAME \u003d \u0027share_server_replica:%s\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":24,"context_line":"The share server replica API now supports scope and default roles."},{"line_number":25,"context_line":"\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"deprecated_create \u003d policy.DeprecatedRule("}],"source_content_type":"text/x-python","patch_set":31,"id":"d384a2c0_34b3606a","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":66},"updated":"2026-07-29 12:48:40.000000000","message":"Not sure I understand the deprecation rules. Can you please elaborate why we need this? Also, why does deprecated_since say \u00272026.2/Hibiscus\u0027?","commit_id":"4b37a4900d334098111df92f2c916e3b3d579067"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":21,"context_line":"BASE_POLICY_NAME \u003d \u0027share_server_replica:%s\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":24,"context_line":"The share server replica API now supports scope and default roles."},{"line_number":25,"context_line":"\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"deprecated_create \u003d policy.DeprecatedRule("}],"source_content_type":"text/x-python","patch_set":31,"id":"73693fde_ddb2c267","line":24,"range":{"start_line":24,"start_character":0,"end_line":24,"end_character":66},"in_reply_to":"d384a2c0_34b3606a","updated":"2026-08-05 19:46:54.000000000","message":"We add deprecated_rule so policy changes remain backward-compatible during RBAC/scope migration, I have checked all other files and those also have same pattern. \n\nFrom AI:\nIt records the old check string and lets operators transition safely instead of getting abrupt authorization changes.","commit_id":"4b37a4900d334098111df92f2c916e3b3d579067"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":24,"context_line":"The share server replica API now supports scope and default roles."},{"line_number":25,"context_line":"\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"deprecated_create \u003d policy.DeprecatedRule("},{"line_number":28,"context_line":"    name\u003dBASE_POLICY_NAME % \u0027create\u0027,"},{"line_number":29,"context_line":"    check_str\u003dbase.RULE_ADMIN_API,"},{"line_number":30,"context_line":"    deprecated_reason\u003dDEPRECATED_REASON,"}],"source_content_type":"text/x-python","patch_set":50,"id":"958d0ccc_00bec30a","line":27,"updated":"2026-08-14 06:32:26.000000000","message":"13 `DeprecatedRule` objects (~78 lines) for rules that don\u0027t exist in any released version. Deprecation rules are for migrating old policy defaults across releases. Since this API is brand new in 2.99, there\u0027s nothing to deprecate. Compare with `share_replica.py`, which has deprecated rules because those policies existed since Wallaby with different defaults. Please remove all 13 and the corresponding `deprecated_rule\u003d` kwargs.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":24,"context_line":"The share server replica API now supports scope and default roles."},{"line_number":25,"context_line":"\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"deprecated_create \u003d policy.DeprecatedRule("},{"line_number":28,"context_line":"    name\u003dBASE_POLICY_NAME % \u0027create\u0027,"},{"line_number":29,"context_line":"    check_str\u003dbase.RULE_ADMIN_API,"},{"line_number":30,"context_line":"    deprecated_reason\u003dDEPRECATED_REASON,"}],"source_content_type":"text/x-python","patch_set":50,"id":"cc966955_f9a50332","line":27,"in_reply_to":"958d0ccc_00bec30a","updated":"2026-08-20 12:43:49.000000000","message":"Done","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/quota.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":"1a3edf809e2d0915bef670f1a4925849e8b96b6d","unresolved":true,"context_lines":[{"line_number":72,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027,"},{"line_number":73,"context_line":"               deprecated_name\u003d\u0027quota_replica_gigabytes\u0027),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027share_server_replicas\u0027,"},{"line_number":75,"context_line":"               default\u003d10,"},{"line_number":76,"context_line":"               help\u003d\u0027Number of share-server-replicas allowed per project.\u0027,"},{"line_number":77,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027,"},{"line_number":78,"context_line":"               deprecated_name\u003d\u0027quota_share_server_replicas\u0027),"}],"source_content_type":"text/x-python","patch_set":31,"id":"664e522f_50eecf52","line":75,"updated":"2026-07-29 12:48:40.000000000","message":"Is this 10 acceptable? I feel 50 may be a better number given most of our quotas are 50. Leaving this comment for others (Maurice, Kiran, Carlos, Goutham) to weigh in.","commit_id":"4b37a4900d334098111df92f2c916e3b3d579067"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":72,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027,"},{"line_number":73,"context_line":"               deprecated_name\u003d\u0027quota_replica_gigabytes\u0027),"},{"line_number":74,"context_line":"    cfg.IntOpt(\u0027share_server_replicas\u0027,"},{"line_number":75,"context_line":"               default\u003d10,"},{"line_number":76,"context_line":"               help\u003d\u0027Number of share-server-replicas allowed per project.\u0027,"},{"line_number":77,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027,"},{"line_number":78,"context_line":"               deprecated_name\u003d\u0027quota_share_server_replicas\u0027),"}],"source_content_type":"text/x-python","patch_set":31,"id":"54e6b98e_be192ec2","line":75,"in_reply_to":"664e522f_50eecf52","updated":"2026-08-05 19:46:54.000000000","message":"As we discussed in mid cycle review, keep 10 for share server replica is fine. Even OpenStack admin can modify this according to need.","commit_id":"4b37a4900d334098111df92f2c916e3b3d579067"}],"manila/scheduler/drivers/filter.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":"ea8fd70902a6f6b366f70204b5fd0c9ec73cff52","unresolved":true,"context_lines":[{"line_number":169,"context_line":"            # Only enforce replication_domain matching when the source"},{"line_number":170,"context_line":"            # backend reports one. If source has none configured, allow"},{"line_number":171,"context_line":"            # any candidate (backwards-compatible behaviour)."},{"line_number":172,"context_line":"            if source_replication_domain:"},{"line_number":173,"context_line":"                if (not host_replication_domain or"},{"line_number":174,"context_line":"                        host_replication_domain !\u003d source_replication_domain):"},{"line_number":175,"context_line":"                    filtered_by_replication_domain.append({"}],"source_content_type":"text/x-python","patch_set":32,"id":"f674797f_956b8c73","line":172,"range":{"start_line":172,"start_character":15,"end_line":172,"end_character":40},"updated":"2026-07-29 13:05:36.000000000","message":"Isnt replication domain mandatory for share server replica creation?","commit_id":"2db49c6241807d5be493a60b4fcccb794aa72bf7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            # Only enforce replication_domain matching when the source"},{"line_number":170,"context_line":"            # backend reports one. If source has none configured, allow"},{"line_number":171,"context_line":"            # any candidate (backwards-compatible behaviour)."},{"line_number":172,"context_line":"            if source_replication_domain:"},{"line_number":173,"context_line":"                if (not host_replication_domain or"},{"line_number":174,"context_line":"                        host_replication_domain !\u003d source_replication_domain):"},{"line_number":175,"context_line":"                    filtered_by_replication_domain.append({"}],"source_content_type":"text/x-python","patch_set":32,"id":"ceb9e359_fc5d6851","line":172,"range":{"start_line":172,"start_character":15,"end_line":172,"end_character":40},"in_reply_to":"f674797f_956b8c73","updated":"2026-08-05 19:46:54.000000000","message":"Yes, this is require to make sure both the storage backends should have replication domain.","commit_id":"2db49c6241807d5be493a60b4fcccb794aa72bf7"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":132,"context_line":"            context, updated_share_replica, host, request_spec\u003drequest_spec,"},{"line_number":133,"context_line":"            filter_properties\u003dfilter_properties)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def select_share_server_replica_host(self, context, request_spec,"},{"line_number":136,"context_line":"                                         filter_properties\u003dNone):"},{"line_number":137,"context_line":"        elevated \u003d context.elevated()"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"dcf1b2bf_e3c6d728","line":135,"updated":"2026-07-31 14:47:34.000000000","message":"ultimately this method is making us skip other filters (capacity, capabilities) if I understand it correctly. I think there might be a problem here. We already have availability zones and the other filters, why aren\u0027t they necessary? Let\u0027s think of a scenario:\n\n- A user creates a share using a share type with snapshot support and mount to snapshot support\n- A user tries to create a replica\n- Manila schedules the replica to a host that doesn\u0027t support such capabilities","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            context, updated_share_replica, host, request_spec\u003drequest_spec,"},{"line_number":133,"context_line":"            filter_properties\u003dfilter_properties)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def select_share_server_replica_host(self, context, request_spec,"},{"line_number":136,"context_line":"                                         filter_properties\u003dNone):"},{"line_number":137,"context_line":"        elevated \u003d context.elevated()"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"c75240a7_a1d8411f","line":135,"in_reply_to":"dcf1b2bf_e3c6d728","updated":"2026-08-05 19:46:54.000000000","message":"This method is only used for share-server replica host selection, so it does not run the full share-type/capability filter chain. Those capability checks (snapshot_support, mount_snapshot_support, etc.) are enforced in the share/share-replica scheduling flow via share scheduling. Here we only apply share-server-replication constraints (source host exclusion, replication-domain match, AZ, and subnet compatibility).\n\nAlso we are calling here get_weighed_hosts method at the end after host selection is done based on the above constrains and user can define \"scheduler_default_weighers \u003d CapacityWeigher\" at scheduler section to weight the host and find the best suitable host based on capacity.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"}],"manila/scheduler/drivers/simple.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":91,"context_line":"                       if (service_g[\u0027availability_zone_id\u0027]"},{"line_number":92,"context_line":"                           \u003d\u003d availability_zone_id)]"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        for service, __gigs in results:"},{"line_number":95,"context_line":"            if utils.service_is_up(service) and not service[\u0027disabled\u0027]:"},{"line_number":96,"context_line":"                return service[\u0027host\u0027]"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1f52915d_828922e1","line":94,"range":{"start_line":94,"start_character":21,"end_line":94,"end_character":27},"updated":"2026-07-31 14:47:34.000000000","message":"please name it more descriptively","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                       if (service_g[\u0027availability_zone_id\u0027]"},{"line_number":92,"context_line":"                           \u003d\u003d availability_zone_id)]"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        for service, __gigs in results:"},{"line_number":95,"context_line":"            if utils.service_is_up(service) and not service[\u0027disabled\u0027]:"},{"line_number":96,"context_line":"                return service[\u0027host\u0027]"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"ae39c607_f52223ab","line":94,"range":{"start_line":94,"start_character":21,"end_line":94,"end_character":27},"in_reply_to":"1f52915d_828922e1","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"}],"manila/scheduler/rpcapi.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":165,"context_line":"                                         filter_properties\u003dNone):"},{"line_number":166,"context_line":"        request_spec_p \u003d jsonutils.to_primitive(request_spec)"},{"line_number":167,"context_line":"        call_context \u003d self.client.prepare(version\u003d\u00271.12\u0027)"},{"line_number":168,"context_line":"        return call_context.call("},{"line_number":169,"context_line":"            context,"},{"line_number":170,"context_line":"            \u0027select_share_server_replica_host\u0027,"},{"line_number":171,"context_line":"            request_spec\u003drequest_spec_p,"}],"source_content_type":"text/x-python","patch_set":37,"id":"a87c6e11_86a0f160","line":168,"range":{"start_line":168,"start_character":28,"end_line":168,"end_character":32},"updated":"2026-07-31 14:47:34.000000000","message":"do we really expect this call to be synchronous? shouldn\u0027t the creation be async?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                                         filter_properties\u003dNone):"},{"line_number":166,"context_line":"        request_spec_p \u003d jsonutils.to_primitive(request_spec)"},{"line_number":167,"context_line":"        call_context \u003d self.client.prepare(version\u003d\u00271.12\u0027)"},{"line_number":168,"context_line":"        return call_context.call("},{"line_number":169,"context_line":"            context,"},{"line_number":170,"context_line":"            \u0027select_share_server_replica_host\u0027,"},{"line_number":171,"context_line":"            request_spec\u003drequest_spec_p,"}],"source_content_type":"text/x-python","patch_set":37,"id":"307435c3_9b0febb9","line":168,"range":{"start_line":168,"start_character":28,"end_line":168,"end_character":32},"in_reply_to":"a87c6e11_86a0f160","updated":"2026-08-05 19:46:54.000000000","message":"Yes this is require as API immediately get the selected host.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"}],"manila/share/api.py":[{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"265c706f0ade2faf91c368657ad36cf71c54bb0b","unresolved":true,"context_lines":[{"line_number":4880,"context_line":"        \"\"\"Resynchronize a share server replica with the active replica.\"\"\""},{"line_number":4881,"context_line":"        policy.check_policy(context, \u0027share_server_replica\u0027, \u0027resync\u0027)"},{"line_number":4882,"context_line":""},{"line_number":4883,"context_line":"        # Compatibility path: older callers pass a replica dict directly."},{"line_number":4884,"context_line":"        if isinstance(replica_id, dict):"},{"line_number":4885,"context_line":"            replica \u003d replica_id"},{"line_number":4886,"context_line":"            if not replica.get(\u0027host\u0027):"},{"line_number":4887,"context_line":"                msg \u003d _("},{"line_number":4888,"context_line":"                    \u0027Share server replica %s does not have a valid host.\u0027"},{"line_number":4889,"context_line":"                ) % replica[\u0027id\u0027]"},{"line_number":4890,"context_line":"                raise exception.InvalidHost(reason\u003dmsg)"},{"line_number":4891,"context_line":""},{"line_number":4892,"context_line":"            if replica.get(\u0027status\u0027) in (constants.STATUS_CREATING,"},{"line_number":4893,"context_line":"                                         constants.STATUS_DELETING):"},{"line_number":4894,"context_line":"                msg \u003d _("},{"line_number":4895,"context_line":"                    \u0027Share server replica %(replica_id)s cannot be \u0027"},{"line_number":4896,"context_line":"                    \u0027resynced because it is in %(status)s status. The \u0027"},{"line_number":4897,"context_line":"                    \u0027replica must be in a stable status before it can \u0027"},{"line_number":4898,"context_line":"                    \u0027be resynced.\u0027"},{"line_number":4899,"context_line":"                ) % {"},{"line_number":4900,"context_line":"                    \u0027replica_id\u0027: replica[\u0027id\u0027],"},{"line_number":4901,"context_line":"                    \u0027status\u0027: replica.get(\u0027status\u0027),"},{"line_number":4902,"context_line":"                }"},{"line_number":4903,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":4904,"context_line":""},{"line_number":4905,"context_line":"            self.share_rpcapi.update_share_server_replica_state("},{"line_number":4906,"context_line":"                context, replica)"},{"line_number":4907,"context_line":"            return"},{"line_number":4908,"context_line":""},{"line_number":4909,"context_line":"        replica \u003d self.db.share_server_get(context, replica_id)"},{"line_number":4910,"context_line":"        if not replica:"}],"source_content_type":"text/x-python","patch_set":35,"id":"21327a9d_ac6dccdd","line":4907,"range":{"start_line":4883,"start_character":8,"end_line":4907,"end_character":18},"updated":"2026-07-30 12:58:32.000000000","message":"Remove this, we are passing the id, from id we will pickup the replica object, will remove this after testing.","commit_id":"0ed79962260976186e1818c0ab41e34f5c8d644a"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":4880,"context_line":"        \"\"\"Resynchronize a share server replica with the active replica.\"\"\""},{"line_number":4881,"context_line":"        policy.check_policy(context, \u0027share_server_replica\u0027, \u0027resync\u0027)"},{"line_number":4882,"context_line":""},{"line_number":4883,"context_line":"        # Compatibility path: older callers pass a replica dict directly."},{"line_number":4884,"context_line":"        if isinstance(replica_id, dict):"},{"line_number":4885,"context_line":"            replica \u003d replica_id"},{"line_number":4886,"context_line":"            if not replica.get(\u0027host\u0027):"},{"line_number":4887,"context_line":"                msg \u003d _("},{"line_number":4888,"context_line":"                    \u0027Share server replica %s does not have a valid host.\u0027"},{"line_number":4889,"context_line":"                ) % replica[\u0027id\u0027]"},{"line_number":4890,"context_line":"                raise exception.InvalidHost(reason\u003dmsg)"},{"line_number":4891,"context_line":""},{"line_number":4892,"context_line":"            if replica.get(\u0027status\u0027) in (constants.STATUS_CREATING,"},{"line_number":4893,"context_line":"                                         constants.STATUS_DELETING):"},{"line_number":4894,"context_line":"                msg \u003d _("},{"line_number":4895,"context_line":"                    \u0027Share server replica %(replica_id)s cannot be \u0027"},{"line_number":4896,"context_line":"                    \u0027resynced because it is in %(status)s status. The \u0027"},{"line_number":4897,"context_line":"                    \u0027replica must be in a stable status before it can \u0027"},{"line_number":4898,"context_line":"                    \u0027be resynced.\u0027"},{"line_number":4899,"context_line":"                ) % {"},{"line_number":4900,"context_line":"                    \u0027replica_id\u0027: replica[\u0027id\u0027],"},{"line_number":4901,"context_line":"                    \u0027status\u0027: replica.get(\u0027status\u0027),"},{"line_number":4902,"context_line":"                }"},{"line_number":4903,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":4904,"context_line":""},{"line_number":4905,"context_line":"            self.share_rpcapi.update_share_server_replica_state("},{"line_number":4906,"context_line":"                context, replica)"},{"line_number":4907,"context_line":"            return"},{"line_number":4908,"context_line":""},{"line_number":4909,"context_line":"        replica \u003d self.db.share_server_get(context, replica_id)"},{"line_number":4910,"context_line":"        if not replica:"}],"source_content_type":"text/x-python","patch_set":35,"id":"783b7d2f_e0296b8d","line":4907,"range":{"start_line":4883,"start_character":8,"end_line":4907,"end_character":18},"in_reply_to":"21327a9d_ac6dccdd","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"0ed79962260976186e1818c0ab41e34f5c8d644a"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":1714,"context_line":"                      {\u0027ssid\u0027: server[\u0027id\u0027]})"},{"line_number":1715,"context_line":"            raise exception.ShareServerInUse(share_server_id\u003dserver[\u0027id\u0027])"},{"line_number":1716,"context_line":""},{"line_number":1717,"context_line":"        if server.get(\u0027source_share_server_id\u0027) or server.get(\u0027replica_state\u0027):"},{"line_number":1718,"context_line":"            msg \u003d _("},{"line_number":1719,"context_line":"                \u0027Share server %(share_server_id)s cannot be deleted \u0027"},{"line_number":1720,"context_line":"                \u0027because it is a share server replica of %(source_id)s. \u0027"}],"source_content_type":"text/x-python","patch_set":37,"id":"c19b7e88_b8c631c8","line":1717,"range":{"start_line":1717,"start_character":48,"end_line":1717,"end_character":50},"updated":"2026-07-31 14:47:34.000000000","message":"and?\n\nthere is a chance the share server had a source share server ID because of a migration.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":1714,"context_line":"                      {\u0027ssid\u0027: server[\u0027id\u0027]})"},{"line_number":1715,"context_line":"            raise exception.ShareServerInUse(share_server_id\u003dserver[\u0027id\u0027])"},{"line_number":1716,"context_line":""},{"line_number":1717,"context_line":"        if server.get(\u0027source_share_server_id\u0027) or server.get(\u0027replica_state\u0027):"},{"line_number":1718,"context_line":"            msg \u003d _("},{"line_number":1719,"context_line":"                \u0027Share server %(share_server_id)s cannot be deleted \u0027"},{"line_number":1720,"context_line":"                \u0027because it is a share server replica of %(source_id)s. \u0027"}],"source_content_type":"text/x-python","patch_set":37,"id":"4091c334_82cb355d","line":1717,"range":{"start_line":1717,"start_character":48,"end_line":1717,"end_character":50},"in_reply_to":"c19b7e88_b8c631c8","updated":"2026-08-05 19:46:54.000000000","message":"nice, good catch. Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":4460,"context_line":"        # source_share_server_id but are not server-replica resources."},{"line_number":4461,"context_line":"        return ("},{"line_number":4462,"context_line":"            server.get(\u0027source_share_server_id\u0027) is not None and"},{"line_number":4463,"context_line":"            server.get(\u0027status\u0027) !\u003d constants.STATUS_SERVER_MIGRATING_TO and"},{"line_number":4464,"context_line":"            bool(server.get(\u0027replica_state\u0027))"},{"line_number":4465,"context_line":"        )"},{"line_number":4466,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"46ff0444_2a0fe36c","line":4463,"range":{"start_line":4463,"start_character":36,"end_line":4463,"end_character":72},"updated":"2026-07-31 14:47:34.000000000","message":"why only migrating to? shouldn\u0027t we check against all migration status?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":4460,"context_line":"        # source_share_server_id but are not server-replica resources."},{"line_number":4461,"context_line":"        return ("},{"line_number":4462,"context_line":"            server.get(\u0027source_share_server_id\u0027) is not None and"},{"line_number":4463,"context_line":"            server.get(\u0027status\u0027) !\u003d constants.STATUS_SERVER_MIGRATING_TO and"},{"line_number":4464,"context_line":"            bool(server.get(\u0027replica_state\u0027))"},{"line_number":4465,"context_line":"        )"},{"line_number":4466,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"21f6a166_a68502c6","line":4463,"range":{"start_line":4463,"start_character":36,"end_line":4463,"end_character":72},"in_reply_to":"46ff0444_2a0fe36c","updated":"2026-08-05 19:46:54.000000000","message":"I am removing below condition as 2 condition is sufficient to find out if it is share replica or not. \nserver.get(\u0027status\u0027) !\u003d constants.STATUS_SERVER_MIGRATING_TO","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":4479,"context_line":"                share_network_id \u003d subnet.get(\u0027share_network_id\u0027)"},{"line_number":4480,"context_line":"            if not share_network_name:"},{"line_number":4481,"context_line":"                share_network \u003d subnet.get(\u0027share_network\u0027)"},{"line_number":4482,"context_line":"                if share_network:"},{"line_number":4483,"context_line":"                    share_network_name \u003d ("},{"line_number":4484,"context_line":"                        share_network.get(\u0027name\u0027) or share_network.get(\u0027id\u0027))"},{"line_number":4485,"context_line":"            if share_network_id and share_network_name:"}],"source_content_type":"text/x-python","patch_set":37,"id":"8087f436_29e9e113","line":4482,"range":{"start_line":4482,"start_character":16,"end_line":4482,"end_character":33},"updated":"2026-07-31 14:47:34.000000000","message":"is there a possibility a share network subnet will exist without a share network?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":4479,"context_line":"                share_network_id \u003d subnet.get(\u0027share_network_id\u0027)"},{"line_number":4480,"context_line":"            if not share_network_name:"},{"line_number":4481,"context_line":"                share_network \u003d subnet.get(\u0027share_network\u0027)"},{"line_number":4482,"context_line":"                if share_network:"},{"line_number":4483,"context_line":"                    share_network_name \u003d ("},{"line_number":4484,"context_line":"                        share_network.get(\u0027name\u0027) or share_network.get(\u0027id\u0027))"},{"line_number":4485,"context_line":"            if share_network_id and share_network_name:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1cde7a93_1f15252a","line":4482,"range":{"start_line":4482,"start_character":16,"end_line":4482,"end_character":33},"in_reply_to":"8087f436_29e9e113","updated":"2026-08-05 19:46:54.000000000","message":"A share network subnet cannot exist without a share network. I have removed the check.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":4610,"context_line":"        if not source_share_network_ids:"},{"line_number":4611,"context_line":"            raise exception.InvalidInput("},{"line_number":4612,"context_line":"                reason\u003d_("},{"line_number":4613,"context_line":"                    \u0027Source share server %(share_server)s is not \u0027"},{"line_number":4614,"context_line":"                    \u0027associated with a valid share network/subnet.\u0027"},{"line_number":4615,"context_line":"                ) % {\u0027share_server\u0027: share_server_id})"},{"line_number":4616,"context_line":""},{"line_number":4617,"context_line":"        replica_availability_zone_id \u003d None"}],"source_content_type":"text/x-python","patch_set":37,"id":"5423aa86_7e93ac34","line":4614,"range":{"start_line":4613,"start_character":58,"end_line":4614,"end_character":66},"updated":"2026-07-31 14:47:34.000000000","message":"same question as the other file: is this even possible to happen?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":4610,"context_line":"        if not source_share_network_ids:"},{"line_number":4611,"context_line":"            raise exception.InvalidInput("},{"line_number":4612,"context_line":"                reason\u003d_("},{"line_number":4613,"context_line":"                    \u0027Source share server %(share_server)s is not \u0027"},{"line_number":4614,"context_line":"                    \u0027associated with a valid share network/subnet.\u0027"},{"line_number":4615,"context_line":"                ) % {\u0027share_server\u0027: share_server_id})"},{"line_number":4616,"context_line":""},{"line_number":4617,"context_line":"        replica_availability_zone_id \u003d None"}],"source_content_type":"text/x-python","patch_set":37,"id":"ced5d0a9_c5b90f6a","line":4614,"range":{"start_line":4613,"start_character":58,"end_line":4614,"end_character":66},"in_reply_to":"5423aa86_7e93ac34","updated":"2026-08-05 19:46:54.000000000","message":"In case of dhss_true, this can not be happen, but added the check for safer side. Removing this check.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":4632,"context_line":"        destination_share_network \u003d None"},{"line_number":4633,"context_line":""},{"line_number":4634,"context_line":"        # If share_network_id is provided, validate and use it"},{"line_number":4635,"context_line":"        if share_network_id:"},{"line_number":4636,"context_line":"            try:"},{"line_number":4637,"context_line":"                destination_share_network \u003d self.db.share_network_get("},{"line_number":4638,"context_line":"                    context, share_network_id)"}],"source_content_type":"text/x-python","patch_set":37,"id":"75728e8b_9bcbf902","line":4635,"updated":"2026-07-31 14:47:34.000000000","message":"given this is coming from admin context, have you checked whether a project id filter is necessary here?","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":4632,"context_line":"        destination_share_network \u003d None"},{"line_number":4633,"context_line":""},{"line_number":4634,"context_line":"        # If share_network_id is provided, validate and use it"},{"line_number":4635,"context_line":"        if share_network_id:"},{"line_number":4636,"context_line":"            try:"},{"line_number":4637,"context_line":"                destination_share_network \u003d self.db.share_network_get("},{"line_number":4638,"context_line":"                    context, share_network_id)"}],"source_content_type":"text/x-python","patch_set":37,"id":"e335181e_cf399f63","line":4635,"in_reply_to":"75728e8b_9bcbf902","updated":"2026-08-05 19:46:54.000000000","message":"yes, it require, Added the check make sure both source and destination network should be in same project id.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":4663,"context_line":"                        \u0027az\u0027: availability_zone,"},{"line_number":4664,"context_line":"                    })"},{"line_number":4665,"context_line":"        else:"},{"line_number":4666,"context_line":"            # Automatically discover a suitable share network"},{"line_number":4667,"context_line":"            project_share_networks \u003d self.db.share_network_get_all_by_project("},{"line_number":4668,"context_line":"                context, replica_project_id)"},{"line_number":4669,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"146491a1_416d0eae","line":4666,"range":{"start_line":4666,"start_character":11,"end_line":4666,"end_character":61},"updated":"2026-07-31 14:47:34.000000000","message":"I honestly don\u0027t think this is a great idea. We should likely try reusing the one from the source, but we can\u0027t guess what will work and what won\u0027t.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":true,"context_lines":[{"line_number":4663,"context_line":"                        \u0027az\u0027: availability_zone,"},{"line_number":4664,"context_line":"                    })"},{"line_number":4665,"context_line":"        else:"},{"line_number":4666,"context_line":"            # Automatically discover a suitable share network"},{"line_number":4667,"context_line":"            project_share_networks \u003d self.db.share_network_get_all_by_project("},{"line_number":4668,"context_line":"                context, replica_project_id)"},{"line_number":4669,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"becdfd60_5fa2a6b6","line":4666,"range":{"start_line":4666,"start_character":11,"end_line":4666,"end_character":61},"in_reply_to":"146491a1_416d0eae","updated":"2026-08-05 19:46:54.000000000","message":"This is the case when user is not providing any share network during share server creation, in this case it will pickup one of the share network from project. Will keep this comment open, let other comment on this.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"543fe50a2438dac159a8f3f0a2bb835e3bcd3967","unresolved":true,"context_lines":[{"line_number":4898,"context_line":"        if not replica:"},{"line_number":4899,"context_line":"            raise exception.ShareServerReplicaNotFound(replica_id\u003dreplica_id)"},{"line_number":4900,"context_line":""},{"line_number":4901,"context_line":"        # Verify it\u0027s actually a replica"},{"line_number":4902,"context_line":"        if not replica.get(\u0027source_share_server_id\u0027):"},{"line_number":4903,"context_line":"            raise exception.InvalidInput("},{"line_number":4904,"context_line":"                reason\u003d_(\u0027Server is not a replica.\u0027))"},{"line_number":4905,"context_line":""},{"line_number":4906,"context_line":"        if replica[\u0027replica_state\u0027] !\u003d constants.REPLICA_STATE_IN_SYNC:"},{"line_number":4907,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":42,"id":"85e86436_179daaa1","line":4904,"range":{"start_line":4901,"start_character":3,"end_line":4904,"end_character":53},"updated":"2026-08-06 12:47:23.000000000","message":"Add one more condition to make sure active share server replica should be in active state and available status","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"02a079068b7654e35efe48412ab9c9d753bdf849","unresolved":false,"context_lines":[{"line_number":4898,"context_line":"        if not replica:"},{"line_number":4899,"context_line":"            raise exception.ShareServerReplicaNotFound(replica_id\u003dreplica_id)"},{"line_number":4900,"context_line":""},{"line_number":4901,"context_line":"        # Verify it\u0027s actually a replica"},{"line_number":4902,"context_line":"        if not replica.get(\u0027source_share_server_id\u0027):"},{"line_number":4903,"context_line":"            raise exception.InvalidInput("},{"line_number":4904,"context_line":"                reason\u003d_(\u0027Server is not a replica.\u0027))"},{"line_number":4905,"context_line":""},{"line_number":4906,"context_line":"        if replica[\u0027replica_state\u0027] !\u003d constants.REPLICA_STATE_IN_SYNC:"},{"line_number":4907,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":42,"id":"5f912870_61685de9","line":4904,"range":{"start_line":4901,"start_character":3,"end_line":4904,"end_character":53},"in_reply_to":"85e86436_179daaa1","updated":"2026-08-07 12:32:54.000000000","message":"Done","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"543fe50a2438dac159a8f3f0a2bb835e3bcd3967","unresolved":true,"context_lines":[{"line_number":4903,"context_line":"            raise exception.InvalidInput("},{"line_number":4904,"context_line":"                reason\u003d_(\u0027Server is not a replica.\u0027))"},{"line_number":4905,"context_line":""},{"line_number":4906,"context_line":"        if replica[\u0027replica_state\u0027] !\u003d constants.REPLICA_STATE_IN_SYNC:"},{"line_number":4907,"context_line":"            raise exception.InvalidInput("},{"line_number":4908,"context_line":"                reason\u003d_(\u0027Cannot promote non in_sync replica. \u0027"},{"line_number":4909,"context_line":"                         \u0027Ensure replica is fully synced before promotion.\u0027))"},{"line_number":4910,"context_line":""},{"line_number":4911,"context_line":"        self.db.share_server_update("},{"line_number":4912,"context_line":"            context, replica_id,"}],"source_content_type":"text/x-python","patch_set":42,"id":"2b739ef7_7e66b426","line":4909,"range":{"start_line":4906,"start_character":8,"end_line":4909,"end_character":77},"updated":"2026-08-06 12:47:23.000000000","message":"I think admin can promote the replica even it is out of sync, if storage don\u0027t support this, then this need to handle in storage backend. @gouthamh4@gmail.com, can comment on this.","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":true,"context_lines":[{"line_number":4903,"context_line":"            raise exception.InvalidInput("},{"line_number":4904,"context_line":"                reason\u003d_(\u0027Server is not a replica.\u0027))"},{"line_number":4905,"context_line":""},{"line_number":4906,"context_line":"        if replica[\u0027replica_state\u0027] !\u003d constants.REPLICA_STATE_IN_SYNC:"},{"line_number":4907,"context_line":"            raise exception.InvalidInput("},{"line_number":4908,"context_line":"                reason\u003d_(\u0027Cannot promote non in_sync replica. \u0027"},{"line_number":4909,"context_line":"                         \u0027Ensure replica is fully synced before promotion.\u0027))"},{"line_number":4910,"context_line":""},{"line_number":4911,"context_line":"        self.db.share_server_update("},{"line_number":4912,"context_line":"            context, replica_id,"}],"source_content_type":"text/x-python","patch_set":42,"id":"15b4eb75_0230d050","line":4909,"range":{"start_line":4906,"start_character":8,"end_line":4909,"end_character":77},"in_reply_to":"2b739ef7_7e66b426","updated":"2026-08-20 12:43:49.000000000","message":"For now, I’ve implemented the same code changes that we have for the replica. Please take a look and let me know if anything needs to be corrected.","commit_id":"a03c0a695abb57b8e27bae935ac0ef7cffc8f2b7"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"9e03536e5e157078a304e922e11b72ef41d2279d","unresolved":true,"context_lines":[{"line_number":4688,"context_line":"                    replica_availability_zone_id] \u003d ("},{"line_number":4689,"context_line":"                        compatible_azs_multiple[replica_availability_zone_id])"},{"line_number":4690,"context_line":"        else:"},{"line_number":4691,"context_line":"            # AZ-only or neither provided. If AZ is missing, use default AZ."},{"line_number":4692,"context_line":"            if not replica_availability_zone_id:"},{"line_number":4693,"context_line":"                default_az \u003d self.db.availability_zone_get("},{"line_number":4694,"context_line":"                    context, CONF.storage_availability_zone)"}],"source_content_type":"text/x-python","patch_set":43,"id":"73d60c1f_2471aa15","line":4691,"updated":"2026-08-06 19:46:52.000000000","message":"Here, instead of choosing default AZ, should we allow to pick any eligible AZ.","commit_id":"73d078c807372135b3344fe78f24a5c728346fd8"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":true,"context_lines":[{"line_number":4688,"context_line":"                    replica_availability_zone_id] \u003d ("},{"line_number":4689,"context_line":"                        compatible_azs_multiple[replica_availability_zone_id])"},{"line_number":4690,"context_line":"        else:"},{"line_number":4691,"context_line":"            # AZ-only or neither provided. If AZ is missing, use default AZ."},{"line_number":4692,"context_line":"            if not replica_availability_zone_id:"},{"line_number":4693,"context_line":"                default_az \u003d self.db.availability_zone_get("},{"line_number":4694,"context_line":"                    context, CONF.storage_availability_zone)"}],"source_content_type":"text/x-python","patch_set":43,"id":"0cb4568d_28472c3c","line":4691,"in_reply_to":"73d60c1f_2471aa15","updated":"2026-08-08 11:10:37.000000000","message":"@gouthampravi@gmail.com and @ces.eduardo98@gmail.com, could you please share your opinion here.","commit_id":"73d078c807372135b3344fe78f24a5c728346fd8"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"495602f579181a3e7237395e8291e65ac13015fc","unresolved":true,"context_lines":[{"line_number":4589,"context_line":"        source_share_server_id \u003d share_server[\u0027id\u0027]"},{"line_number":4590,"context_line":""},{"line_number":4591,"context_line":"        # Get existing replicas to check if one already exists"},{"line_number":4592,"context_line":"        existing_replicas \u003d self.db.share_server_get_all_with_filters("},{"line_number":4593,"context_line":"            context, {\u0027source_share_server_id\u0027: source_share_server_id})"},{"line_number":4594,"context_line":""},{"line_number":4595,"context_line":"        # Fanout is not supported: only one destination replica is allowed"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a5a17fc_d2317394","line":4592,"updated":"2026-08-07 13:32:23.000000000","message":"This field is also set during share server migration. Isn\u0027t confusing to consider that this field set means replica exist ? Please make sure we dont break replication workflow by using this command db column.","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"0e0e43101e5f49fa3cc20c6a7735ab637e0e134a","unresolved":false,"context_lines":[{"line_number":4589,"context_line":"        source_share_server_id \u003d share_server[\u0027id\u0027]"},{"line_number":4590,"context_line":""},{"line_number":4591,"context_line":"        # Get existing replicas to check if one already exists"},{"line_number":4592,"context_line":"        existing_replicas \u003d self.db.share_server_get_all_with_filters("},{"line_number":4593,"context_line":"            context, {\u0027source_share_server_id\u0027: source_share_server_id})"},{"line_number":4594,"context_line":""},{"line_number":4595,"context_line":"        # Fanout is not supported: only one destination replica is allowed"}],"source_content_type":"text/x-python","patch_set":44,"id":"4ecbffae_e1a6c3cb","line":4592,"in_reply_to":"5a5a17fc_d2317394","updated":"2026-08-08 11:10:37.000000000","message":"This is good point, made the changes.","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"a2fc91efeb2978cc3abf860442b5ebb4e888637a","unresolved":false,"context_lines":[{"line_number":4920,"context_line":"            raise exception.InvalidInput("},{"line_number":4921,"context_line":"                reason\u003d_("},{"line_number":4922,"context_line":"                    \u0027Cannot promote replica %(replica_id)s because the \u0027"},{"line_number":4923,"context_line":"                    \u0027active share server replica %(source_share_server_id)s is not in \u0027"},{"line_number":4924,"context_line":"                    \u0027\"active\" replica state and \"available\" status.\u0027"},{"line_number":4925,"context_line":"                ) % {"},{"line_number":4926,"context_line":"                    \u0027replica_id\u0027: replica_id,"}],"source_content_type":"text/x-python","patch_set":44,"id":"b3f73eae_e45c3058","line":4923,"updated":"2026-08-07 15:00:30.000000000","message":"pep8: E501 line too long (87 \u003e 79 characters)","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"495602f579181a3e7237395e8291e65ac13015fc","unresolved":true,"context_lines":[{"line_number":5182,"context_line":"                reason\u003d_(\u0027Server is not a replica.\u0027))"},{"line_number":5183,"context_line":""},{"line_number":5184,"context_line":"        if metadata:"},{"line_number":5185,"context_line":"            self.db.share_server_replica_metadata_update("},{"line_number":5186,"context_line":"                context, replica_id,"},{"line_number":5187,"context_line":"                {k: str(v) for k, v in metadata.items()},"},{"line_number":5188,"context_line":"                delete\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":44,"id":"74b9256b_ecc372c1","line":5185,"updated":"2026-08-07 13:32:23.000000000","message":"Please make sure we dont update the fields which are internally set by driver. Either handle in this PR or driver PR","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"703ce1b9ea32d457174d1bd4c0f475775321de5f","unresolved":false,"context_lines":[{"line_number":5182,"context_line":"                reason\u003d_(\u0027Server is not a replica.\u0027))"},{"line_number":5183,"context_line":""},{"line_number":5184,"context_line":"        if metadata:"},{"line_number":5185,"context_line":"            self.db.share_server_replica_metadata_update("},{"line_number":5186,"context_line":"                context, replica_id,"},{"line_number":5187,"context_line":"                {k: str(v) for k, v in metadata.items()},"},{"line_number":5188,"context_line":"                delete\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":44,"id":"f649009b_9ce0dbb9","line":5185,"in_reply_to":"74b9256b_ecc372c1","updated":"2026-08-11 05:43:22.000000000","message":"Made the changes, I made the changes in API. We are stoping it in API layer before reaching it to here.","commit_id":"da6a127c8a8b4692f42d8508001341c0d9c04770"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":4494,"context_line":""},{"line_number":4495,"context_line":"        return share_network_id, share_network_name"},{"line_number":4496,"context_line":""},{"line_number":4497,"context_line":"    def _get_share_server_availability_zone(self, context, server):"},{"line_number":4498,"context_line":"        \"\"\"Extract availability zone for a share server replica."},{"line_number":4499,"context_line":""},{"line_number":4500,"context_line":"        Prefer subnet-level AZ when available. If missing (common on active"}],"source_content_type":"text/x-python","patch_set":50,"id":"9fadbe4e_d04d2b5b","line":4497,"updated":"2026-08-14 06:32:26.000000000","message":"`_get_share_server_availability_zone` is ~40 lines but should be ~5. `Service.availability_zone` is always an ORM `AvailabilityZone` relationship (or `None`), never a dict. The `isinstance(service_az, dict)` branch, the `getattr` defensive access, and the `availability_zone_id` fallback with an extra DB lookup are all dead code paths.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":4494,"context_line":""},{"line_number":4495,"context_line":"        return share_network_id, share_network_name"},{"line_number":4496,"context_line":""},{"line_number":4497,"context_line":"    def _get_share_server_availability_zone(self, context, server):"},{"line_number":4498,"context_line":"        \"\"\"Extract availability zone for a share server replica."},{"line_number":4499,"context_line":""},{"line_number":4500,"context_line":"        Prefer subnet-level AZ when available. If missing (common on active"}],"source_content_type":"text/x-python","patch_set":50,"id":"f2c30576_f998be6d","line":4497,"in_reply_to":"9fadbe4e_d04d2b5b","updated":"2026-08-20 12:43:49.000000000","message":"Done","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":4579,"context_line":"        row[\u0027metadata\u0027] \u003d metadata_data or {}"},{"line_number":4580,"context_line":"        return row"},{"line_number":4581,"context_line":""},{"line_number":4582,"context_line":"    def create_share_server_replica(self, context, share_server_id,"},{"line_number":4583,"context_line":"                                    availability_zone\u003dNone,"},{"line_number":4584,"context_line":"                                    share_network_id\u003dNone, metadata\u003dNone):"},{"line_number":4585,"context_line":"        \"\"\"Create a share server replica."}],"source_content_type":"text/x-python","patch_set":50,"id":"c44fdf35_67c13088","line":4582,"updated":"2026-08-14 06:32:26.000000000","message":"`create_share_server_replica` is 280 lines vs 190 for `create_share_replica` (which handles more: share groups, replication types, snapshot instances, QoS). The network auto-discovery loops through all project share networks in Python instead of a DB query. The two nearly identical raise blocks for \"no valid subnet\" can be consolidated. The manual response dict at the end should use `_build_share_server_replica_row` which already exists. Also, Args-style docstrings aren\u0027t used anywhere in Manila; please use single-line docstrings or none. Same applies throughout this file (55 comment lines vs 8 in the share replica equivalent; most just restate the code).","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":true,"context_lines":[{"line_number":4579,"context_line":"        row[\u0027metadata\u0027] \u003d metadata_data or {}"},{"line_number":4580,"context_line":"        return row"},{"line_number":4581,"context_line":""},{"line_number":4582,"context_line":"    def create_share_server_replica(self, context, share_server_id,"},{"line_number":4583,"context_line":"                                    availability_zone\u003dNone,"},{"line_number":4584,"context_line":"                                    share_network_id\u003dNone, metadata\u003dNone):"},{"line_number":4585,"context_line":"        \"\"\"Create a share server replica."}],"source_content_type":"text/x-python","patch_set":50,"id":"0b5b5af3_dc8518ed","line":4582,"in_reply_to":"c44fdf35_67c13088","updated":"2026-08-20 12:43:49.000000000","message":"We can not make it similar to share replica. There are lot of difference in picking up the network and availability zone also here we are our scheduling logic to get the suitable host while for share replica they are using specs base and default scheduling algorithm to create the share replica. But I have segregate logic in smaller method and calling from create_share_server_replica method and optimize the code in few places.\n\n\u003cThe network auto-discovery loops through all project share networks in Python instead of a DB query.\u003e\nWe don\u0027t have existing db query for this, If I add the db query that will unnecessary add more codes. \n\n\u003cThe two nearly identical raise blocks for \"no valid subnet\" can be consolidated.\u003e\nMoving the common code to a single location may introduce regressions in the share replica code, although I have not found much common code for subnet between the share server replica and the share replica.\n\nI will look into the share server replica creation code again and if there is a possibility to optimize it will do it.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":4596,"context_line":"        policy.check_policy(context, \u0027share_server_replica\u0027, \u0027create\u0027)"},{"line_number":4597,"context_line":""},{"line_number":4598,"context_line":"        share_server \u003d self.db.share_server_get(context, share_server_id)"},{"line_number":4599,"context_line":"        if not share_server:"},{"line_number":4600,"context_line":"            raise exception.ShareServerNotFound("},{"line_number":4601,"context_line":"                share_server_id\u003dshare_server_id)"},{"line_number":4602,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"cabab9ce_32be0925","line":4599,"updated":"2026-08-14 06:32:26.000000000","message":"`share_server_get()` raises `ShareServerNotFound` when the server doesn\u0027t exist; it never returns `None`. This `if not share_server:` check is unreachable. Same pattern repeats at 6 places in this file (here and every `if not replica:` after a `share_server_get` call). The existing `create_share_replica` doesn\u0027t do this; it trusts the DB layer. Please remove these redundant checks.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":4596,"context_line":"        policy.check_policy(context, \u0027share_server_replica\u0027, \u0027create\u0027)"},{"line_number":4597,"context_line":""},{"line_number":4598,"context_line":"        share_server \u003d self.db.share_server_get(context, share_server_id)"},{"line_number":4599,"context_line":"        if not share_server:"},{"line_number":4600,"context_line":"            raise exception.ShareServerNotFound("},{"line_number":4601,"context_line":"                share_server_id\u003dshare_server_id)"},{"line_number":4602,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"4dbe9a89_ac987d89","line":4599,"in_reply_to":"cabab9ce_32be0925","updated":"2026-08-20 12:43:49.000000000","message":"Done","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a662c78efb3d40f95dfd30a789c9485f1eea1bc9","unresolved":true,"context_lines":[{"line_number":4652,"context_line":"        if share_network_id:"},{"line_number":4653,"context_line":"            try:"},{"line_number":4654,"context_line":"                destination_share_network \u003d self.db.share_network_get("},{"line_number":4655,"context_line":"                    context, share_network_id)"},{"line_number":4656,"context_line":"            except exception.ShareNetworkNotFound:"},{"line_number":4657,"context_line":"                raise exception.InvalidInput("},{"line_number":4658,"context_line":"                    reason\u003d_("}],"source_content_type":"text/x-python","patch_set":50,"id":"63194149_28bd0a4f","line":4655,"updated":"2026-08-13 07:35:22.000000000","message":"you have already checked share_network exist in api/v2/ layer ?","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":4652,"context_line":"        if share_network_id:"},{"line_number":4653,"context_line":"            try:"},{"line_number":4654,"context_line":"                destination_share_network \u003d self.db.share_network_get("},{"line_number":4655,"context_line":"                    context, share_network_id)"},{"line_number":4656,"context_line":"            except exception.ShareNetworkNotFound:"},{"line_number":4657,"context_line":"                raise exception.InvalidInput("},{"line_number":4658,"context_line":"                    reason\u003d_("}],"source_content_type":"text/x-python","patch_set":50,"id":"b2c87ec1_e7868e91","line":4655,"in_reply_to":"63194149_28bd0a4f","updated":"2026-08-20 12:43:49.000000000","message":"I remove that check from controller as per Goutham comment we should validate it in api.py instead of controller.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a662c78efb3d40f95dfd30a789c9485f1eea1bc9","unresolved":true,"context_lines":[{"line_number":4886,"context_line":"        # Normally replicas have source_share_server_id set. For force delete,"},{"line_number":4887,"context_line":"        # also allow the active source row and clear its replica markers"},{"line_number":4888,"context_line":"        # instead of deleting the DB record."},{"line_number":4889,"context_line":"        if not replica.get(\u0027source_share_server_id\u0027):"},{"line_number":4890,"context_line":"            existing_replicas \u003d self.db.share_server_get_all_with_filters("},{"line_number":4891,"context_line":"                context, {\u0027source_share_server_id\u0027: replica_id})"},{"line_number":4892,"context_line":"            existing_replicas \u003d ["}],"source_content_type":"text/x-python","patch_set":50,"id":"8a0629d2_b7a97efc","line":4889,"updated":"2026-08-13 07:35:22.000000000","message":"if replica dont have source_share_server_id means its standalone share server ? If so, we should raise error thereitself as user is using wrong API. To delete standalone share server, they should use share server delete.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":4886,"context_line":"        # Normally replicas have source_share_server_id set. For force delete,"},{"line_number":4887,"context_line":"        # also allow the active source row and clear its replica markers"},{"line_number":4888,"context_line":"        # instead of deleting the DB record."},{"line_number":4889,"context_line":"        if not replica.get(\u0027source_share_server_id\u0027):"},{"line_number":4890,"context_line":"            existing_replicas \u003d self.db.share_server_get_all_with_filters("},{"line_number":4891,"context_line":"                context, {\u0027source_share_server_id\u0027: replica_id})"},{"line_number":4892,"context_line":"            existing_replicas \u003d ["}],"source_content_type":"text/x-python","patch_set":50,"id":"40091d32_d170a2c2","line":4889,"in_reply_to":"8a0629d2_b7a97efc","updated":"2026-08-20 12:43:49.000000000","message":"No, this is deleting the active replica and not share server. As share server replica has same db records as share server. So, there are 2 condition to delete the active replica, mean we can delete active share server replica when \n- There is no replica associate with active replica \n- we can delete only using --force flag\n\nNote- Deleting active replica doesn\u0027t mean we are deleting the db record. As active replica is nothing but a source share server so deleing active replica mean we are resetting the share server replica-state to NULL.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":5010,"context_line":"        self.share_rpcapi.update_share_server_replica_state("},{"line_number":5011,"context_line":"            context, replica_id, replica[\u0027host\u0027])"},{"line_number":5012,"context_line":""},{"line_number":5013,"context_line":"    def get_share_server_replicas(self, context, share_server_id\u003dNone,"},{"line_number":5014,"context_line":"                                  sort_key\u003dNone, sort_dir\u003dNone, limit\u003dNone,"},{"line_number":5015,"context_line":"                                  offset\u003dNone):"},{"line_number":5016,"context_line":"        \"\"\"List share server replicas with optional filtering."}],"source_content_type":"text/x-python","patch_set":50,"id":"b0f440b6_bc58333a","line":5013,"updated":"2026-08-14 06:32:26.000000000","message":"`get_share_server_replicas` is 159 lines; the equivalent `_get_replicas` for share replicas does the same job in 22 lines. It loads ALL share servers into memory with `share_server_get_all_with_filters(context, {})` then filters in Python; this should be a DB-level filter. It hand-rolls sorting/pagination in two branches instead of using `common.limited()` like every other list endpoint. And it makes 3 separate `share_server_get` calls for the same source server in different branches. Please rewrite to match the `_get_replicas` pattern.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":5010,"context_line":"        self.share_rpcapi.update_share_server_replica_state("},{"line_number":5011,"context_line":"            context, replica_id, replica[\u0027host\u0027])"},{"line_number":5012,"context_line":""},{"line_number":5013,"context_line":"    def get_share_server_replicas(self, context, share_server_id\u003dNone,"},{"line_number":5014,"context_line":"                                  sort_key\u003dNone, sort_dir\u003dNone, limit\u003dNone,"},{"line_number":5015,"context_line":"                                  offset\u003dNone):"},{"line_number":5016,"context_line":"        \"\"\"List share server replicas with optional filtering."}],"source_content_type":"text/x-python","patch_set":50,"id":"2df01769_f9413855","line":5013,"in_reply_to":"b0f440b6_bc58333a","updated":"2026-08-20 12:43:49.000000000","message":"I have already optimize this, let me know if can optimize this further.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"a662c78efb3d40f95dfd30a789c9485f1eea1bc9","unresolved":true,"context_lines":[{"line_number":5211,"context_line":""},{"line_number":5212,"context_line":"        # Verify it\u0027s actually a replica or the active source row of a"},{"line_number":5213,"context_line":"        # replica group (same criteria used when building list output)."},{"line_number":5214,"context_line":"        is_active_source \u003d ("},{"line_number":5215,"context_line":"            not replica.get(\u0027source_share_server_id\u0027) and"},{"line_number":5216,"context_line":"            replica.get(\u0027replica_state\u0027) \u003d\u003d constants.REPLICA_STATE_ACTIVE)"},{"line_number":5217,"context_line":"        if not (replica.get(\u0027source_share_server_id\u0027) or is_active_source):"}],"source_content_type":"text/x-python","patch_set":50,"id":"cf6cf8e0_ca0bbcdc","line":5214,"updated":"2026-08-13 07:35:22.000000000","message":"May be have common function somewhere in utils to verify that replica is in_sync replica or active share server. Since this is needed throughout manila","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":5211,"context_line":""},{"line_number":5212,"context_line":"        # Verify it\u0027s actually a replica or the active source row of a"},{"line_number":5213,"context_line":"        # replica group (same criteria used when building list output)."},{"line_number":5214,"context_line":"        is_active_source \u003d ("},{"line_number":5215,"context_line":"            not replica.get(\u0027source_share_server_id\u0027) and"},{"line_number":5216,"context_line":"            replica.get(\u0027replica_state\u0027) \u003d\u003d constants.REPLICA_STATE_ACTIVE)"},{"line_number":5217,"context_line":"        if not (replica.get(\u0027source_share_server_id\u0027) or is_active_source):"}],"source_content_type":"text/x-python","patch_set":50,"id":"d60e50c9_cf4791a6","line":5214,"in_reply_to":"cf6cf8e0_ca0bbcdc","updated":"2026-08-20 12:43:49.000000000","message":"I remove this code, few code I move to controller and there I have create separate method for this logic.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":5236,"context_line":""},{"line_number":5237,"context_line":"        return replica"},{"line_number":5238,"context_line":""},{"line_number":5239,"context_line":"    def _validate_server_replica_host(self, context, host):"},{"line_number":5240,"context_line":"        \"\"\"Validate that target host is in backend@pool format.\"\"\""},{"line_number":5241,"context_line":"        if not host or \u0027@\u0027 not in host:"},{"line_number":5242,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":50,"id":"352047a0_ce0d6707","line":5239,"updated":"2026-08-14 06:32:26.000000000","message":"`_validate_server_replica_host` is defined but never called in production code. Dead code, please remove it and its test.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":5236,"context_line":""},{"line_number":5237,"context_line":"        return replica"},{"line_number":5238,"context_line":""},{"line_number":5239,"context_line":"    def _validate_server_replica_host(self, context, host):"},{"line_number":5240,"context_line":"        \"\"\"Validate that target host is in backend@pool format.\"\"\""},{"line_number":5241,"context_line":"        if not host or \u0027@\u0027 not in host:"},{"line_number":5242,"context_line":"            raise exception.InvalidInput("}],"source_content_type":"text/x-python","patch_set":50,"id":"85cddabe_746b5410","line":5239,"in_reply_to":"352047a0_ce0d6707","updated":"2026-08-20 12:43:49.000000000","message":"Done","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/share/driver.py":[{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"8be6de185ed6186f6516e9d72fddccd7d33d796b","unresolved":true,"context_lines":[{"line_number":3803,"context_line":""},{"line_number":3804,"context_line":"    def update_share_server_replica_state("},{"line_number":3805,"context_line":"            self, context, share_server_replica,"},{"line_number":3806,"context_line":"            share_server_replica_list, share_instances):"},{"line_number":3807,"context_line":"        \"\"\"Update backend state for a share server replica.\"\"\""},{"line_number":3808,"context_line":"        raise NotImplementedError()"},{"line_number":3809,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"82c2d2a0_22c38d87","line":3806,"updated":"2026-07-01 04:31:46.000000000","message":"Adding this comment for tracking purpose, share_instances should be removed as per final spec changes.","commit_id":"c20d74d3fcef38db99279263dd146a7c9b4605ad"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47c1b5254095505487a343acfd8a38a9a8d02374","unresolved":false,"context_lines":[{"line_number":3803,"context_line":""},{"line_number":3804,"context_line":"    def update_share_server_replica_state("},{"line_number":3805,"context_line":"            self, context, share_server_replica,"},{"line_number":3806,"context_line":"            share_server_replica_list, share_instances):"},{"line_number":3807,"context_line":"        \"\"\"Update backend state for a share server replica.\"\"\""},{"line_number":3808,"context_line":"        raise NotImplementedError()"},{"line_number":3809,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9393be50_4a6dc409","line":3806,"in_reply_to":"82c2d2a0_22c38d87","updated":"2026-07-09 13:00:43.000000000","message":"Done","commit_id":"c20d74d3fcef38db99279263dd146a7c9b4605ad"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":3780,"context_line":"        \"\"\""},{"line_number":3781,"context_line":"        raise NotImplementedError()"},{"line_number":3782,"context_line":""},{"line_number":3783,"context_line":"    def create_share_server_replica(self, context, new_share_server_replica,"},{"line_number":3784,"context_line":"                                    share_server_replica_list,"},{"line_number":3785,"context_line":"                                    share_network_details\u003dNone):"},{"line_number":3786,"context_line":"        \"\"\"Create a share server replica on backend."}],"source_content_type":"text/x-python","patch_set":50,"id":"d4d8438f_187e0f33","line":3783,"updated":"2026-08-14 06:32:26.000000000","message":"The driver methods add ~256 lines, almost entirely docstrings with redundant Example blocks. `create_share_server_replica` alone has 99 lines of docstring with 4 `Example::` blocks. The comparable `create_replica` documents a more complex interface and is shorter. `promote_share_server_replica` repeats the same `share_server_replica_list` example already shown in create. Please use `:param` + `:return:` with one shared example, matching the existing style. Target ~60 lines total.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"66fb4ef13ad43714cd78e9948f36af0ae4a26978","unresolved":true,"context_lines":[{"line_number":3992,"context_line":"                    \u0027replica_id\u0027: \u0027source-server-id\u0027,"},{"line_number":3993,"context_line":"                    \u0027replica_state\u0027: \u0027out_of_sync\u0027,"},{"line_number":3994,"context_line":"                },"},{"line_number":3995,"context_line":"                \u0027instance_host_mappings\u0027: {"},{"line_number":3996,"context_line":"                    \u0027share-instance-id\u0027: \u0027poolA\u0027,"},{"line_number":3997,"context_line":"                },"},{"line_number":3998,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":50,"id":"3df8cce6_f9ec2fe6","line":3995,"updated":"2026-08-17 04:54:13.000000000","message":"@manideep.openstack@gmail.com As per core code this should be \u0027share_pool_mappings\u0027?","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"ee968b38b4fa04300e87c5c4fbbfc1ed82f45a4b","unresolved":false,"context_lines":[{"line_number":3992,"context_line":"                    \u0027replica_id\u0027: \u0027source-server-id\u0027,"},{"line_number":3993,"context_line":"                    \u0027replica_state\u0027: \u0027out_of_sync\u0027,"},{"line_number":3994,"context_line":"                },"},{"line_number":3995,"context_line":"                \u0027instance_host_mappings\u0027: {"},{"line_number":3996,"context_line":"                    \u0027share-instance-id\u0027: \u0027poolA\u0027,"},{"line_number":3997,"context_line":"                },"},{"line_number":3998,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":50,"id":"3b864869_edfc5a44","line":3995,"in_reply_to":"3df8cce6_f9ec2fe6","updated":"2026-08-19 13:03:35.000000000","message":"Updated.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"6c75012357779b0f43a25051187af943592601e1","unresolved":true,"context_lines":[{"line_number":4034,"context_line":"            self, context, share_server_replica_list,"},{"line_number":4035,"context_line":"            share_server_resources\u003dNone):"},{"line_number":4036,"context_line":"        \"\"\"Detect unplanned storage-side failover for server replicas.\"\"\""},{"line_number":4037,"context_line":"        return {}"}],"source_content_type":"text/x-python","patch_set":50,"id":"cd962563_9857030b","line":4037,"updated":"2026-08-16 06:03:57.000000000","message":"@manideep.openstack@gmail.com Any reason for returning {} over NotImplementedError()?\nI see the manager.py is not handling the empty dictionary as no-op case also.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"ee968b38b4fa04300e87c5c4fbbfc1ed82f45a4b","unresolved":false,"context_lines":[{"line_number":4034,"context_line":"            self, context, share_server_replica_list,"},{"line_number":4035,"context_line":"            share_server_resources\u003dNone):"},{"line_number":4036,"context_line":"        \"\"\"Detect unplanned storage-side failover for server replicas.\"\"\""},{"line_number":4037,"context_line":"        return {}"}],"source_content_type":"text/x-python","patch_set":50,"id":"b0edd0e5_93d839a4","line":4037,"in_reply_to":"cd962563_9857030b","updated":"2026-08-19 13:03:35.000000000","message":"Updated to NotImplementedError() and handling it in manager.py","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/share/manager.py":[{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"967555ecbb22334bd0748169e79b3c68d8087050","unresolved":true,"context_lines":[{"line_number":3132,"context_line":"        new_share_server_replica \u003d {"},{"line_number":3133,"context_line":"            \u0027id\u0027: replica_server[\u0027id\u0027],"},{"line_number":3134,"context_line":"            \u0027replica_state\u0027: replica_server.get(\u0027replica_state\u0027),"},{"line_number":3135,"context_line":"            \u0027property\u0027: replica_property,"},{"line_number":3136,"context_line":"            \u0027share_server\u0027: replica_server,"},{"line_number":3137,"context_line":"        }"},{"line_number":3138,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"a47c5fab_e8169d9a","line":3135,"updated":"2026-06-24 17:57:17.000000000","message":"```suggestion\n            \u0027metadata\u0027: replica_property,\n```\n\nLet\u0027s name it as metadata to be inline with existing entities(like shares)","commit_id":"d4f87817c51cf366a4019ce62b08868fba657e65"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"8be6de185ed6186f6516e9d72fddccd7d33d796b","unresolved":false,"context_lines":[{"line_number":3132,"context_line":"        new_share_server_replica \u003d {"},{"line_number":3133,"context_line":"            \u0027id\u0027: replica_server[\u0027id\u0027],"},{"line_number":3134,"context_line":"            \u0027replica_state\u0027: replica_server.get(\u0027replica_state\u0027),"},{"line_number":3135,"context_line":"            \u0027property\u0027: replica_property,"},{"line_number":3136,"context_line":"            \u0027share_server\u0027: replica_server,"},{"line_number":3137,"context_line":"        }"},{"line_number":3138,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"92fcbd34_02c8cf43","line":3135,"in_reply_to":"a47c5fab_e8169d9a","updated":"2026-07-01 04:31:46.000000000","message":"Done","commit_id":"d4f87817c51cf366a4019ce62b08868fba657e65"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"6f38fb6cd49402543cfbb8907a2c108c2a2a3820","unresolved":false,"context_lines":[{"line_number":3132,"context_line":"        new_share_server_replica \u003d {"},{"line_number":3133,"context_line":"            \u0027id\u0027: replica_server[\u0027id\u0027],"},{"line_number":3134,"context_line":"            \u0027replica_state\u0027: replica_server.get(\u0027replica_state\u0027),"},{"line_number":3135,"context_line":"            \u0027property\u0027: replica_property,"},{"line_number":3136,"context_line":"            \u0027share_server\u0027: replica_server,"},{"line_number":3137,"context_line":"        }"},{"line_number":3138,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"cddcead8_f82e1aae","line":3135,"in_reply_to":"a47c5fab_e8169d9a","updated":"2026-07-09 08:48:09.000000000","message":"done:","commit_id":"d4f87817c51cf366a4019ce62b08868fba657e65"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b4ae4b4242065d3e776d856a962683da6fcab969","unresolved":false,"context_lines":[{"line_number":3359,"context_line":"        context \u003d context.elevated()"},{"line_number":3360,"context_line":""},{"line_number":3361,"context_line":"        try:"},{"line_number":3362,"context_line":"            replica_server \u003d self.db.share_server_get(context, share_server_replica_id)"},{"line_number":3363,"context_line":"        except exception.NotFound:"},{"line_number":3364,"context_line":"            LOG.warning("},{"line_number":3365,"context_line":"                \"Share server replica %s not found in DB. Skipping \""}],"source_content_type":"text/x-python","patch_set":10,"id":"d26a4d92_18c9f1c9","line":3362,"updated":"2026-06-29 14:19:24.000000000","message":"pep8: E501 line too long (87 \u003e 79 characters)","commit_id":"5393a7db58a11246e9b2eff039b36cdde3c2e05f"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"4b354690912309532d96dda9539e9a09fec59cea","unresolved":true,"context_lines":[{"line_number":3290,"context_line":"        try:"},{"line_number":3291,"context_line":"            replica_state \u003d self.driver.update_share_server_replica_state("},{"line_number":3292,"context_line":"                context, share_server_replica,"},{"line_number":3293,"context_line":"                share_server_replica_list, protected_share_instances)"},{"line_number":3294,"context_line":"        except Exception as excep:"},{"line_number":3295,"context_line":"            LOG.exception("},{"line_number":3296,"context_line":"                \"Driver error while resyncing share server replica %s.\","}],"source_content_type":"text/x-python","patch_set":20,"id":"21319a2c_d53676eb","line":3293,"updated":"2026-07-08 04:11:53.000000000","message":"Adding this comment for tracking purpose, protected_share_instances should be removed as per final spec changes.","commit_id":"07fec9e679b21a9b8194e652bac4693e20195d98"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"47c1b5254095505487a343acfd8a38a9a8d02374","unresolved":false,"context_lines":[{"line_number":3290,"context_line":"        try:"},{"line_number":3291,"context_line":"            replica_state \u003d self.driver.update_share_server_replica_state("},{"line_number":3292,"context_line":"                context, share_server_replica,"},{"line_number":3293,"context_line":"                share_server_replica_list, protected_share_instances)"},{"line_number":3294,"context_line":"        except Exception as excep:"},{"line_number":3295,"context_line":"            LOG.exception("},{"line_number":3296,"context_line":"                \"Driver error while resyncing share server replica %s.\","}],"source_content_type":"text/x-python","patch_set":20,"id":"c41d5bc2_3fa3d0a7","line":3293,"in_reply_to":"21319a2c_d53676eb","updated":"2026-07-09 13:00:43.000000000","message":"Done","commit_id":"07fec9e679b21a9b8194e652bac4693e20195d98"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"1c2a9dc7ce0bedc7e369d35dcb6422eb3e889bf9","unresolved":true,"context_lines":[{"line_number":3057,"context_line":"        context \u003d context.elevated()"},{"line_number":3058,"context_line":""},{"line_number":3059,"context_line":"        replica_server \u003d self.db.share_server_get(context, replica_id)"},{"line_number":3060,"context_line":"        if not replica_server:"},{"line_number":3061,"context_line":"            raise exception.ShareServerNotFound(share_server_id\u003dreplica_id)"},{"line_number":3062,"context_line":""},{"line_number":3063,"context_line":"        source_share_server_id \u003d replica_server.get(\u0027source_share_server_id\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"af5abf5f_b50afda1","line":3060,"range":{"start_line":3060,"start_character":15,"end_line":3060,"end_character":29},"updated":"2026-07-21 12:14:58.000000000","message":"Change it to replica_share_server","commit_id":"5ad83fd95546f369c4185c3234fe264c3a8ce9ba"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":3057,"context_line":"        context \u003d context.elevated()"},{"line_number":3058,"context_line":""},{"line_number":3059,"context_line":"        replica_server \u003d self.db.share_server_get(context, replica_id)"},{"line_number":3060,"context_line":"        if not replica_server:"},{"line_number":3061,"context_line":"            raise exception.ShareServerNotFound(share_server_id\u003dreplica_id)"},{"line_number":3062,"context_line":""},{"line_number":3063,"context_line":"        source_share_server_id \u003d replica_server.get(\u0027source_share_server_id\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"c53933eb_c85d98e9","line":3060,"range":{"start_line":3060,"start_character":15,"end_line":3060,"end_character":29},"in_reply_to":"821622c1_0f14a2b8","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"5ad83fd95546f369c4185c3234fe264c3a8ce9ba"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":3057,"context_line":"        context \u003d context.elevated()"},{"line_number":3058,"context_line":""},{"line_number":3059,"context_line":"        replica_server \u003d self.db.share_server_get(context, replica_id)"},{"line_number":3060,"context_line":"        if not replica_server:"},{"line_number":3061,"context_line":"            raise exception.ShareServerNotFound(share_server_id\u003dreplica_id)"},{"line_number":3062,"context_line":""},{"line_number":3063,"context_line":"        source_share_server_id \u003d replica_server.get(\u0027source_share_server_id\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"821622c1_0f14a2b8","line":3060,"range":{"start_line":3060,"start_character":15,"end_line":3060,"end_character":29},"in_reply_to":"af5abf5f_b50afda1","updated":"2026-07-31 14:47:34.000000000","message":"or share_server_replica?","commit_id":"5ad83fd95546f369c4185c3234fe264c3a8ce9ba"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cf47745fdd48658535498ce619b7d0f41de734f1","unresolved":false,"context_lines":[{"line_number":3648,"context_line":"    @utils.require_driver_initialized"},{"line_number":3649,"context_line":"    def check_for_unplanned_share_server_replica_failover("},{"line_number":3650,"context_line":"            self, context, share_server_replica_id):"},{"line_number":3651,"context_line":"        \"\"\"Detect an unplanned storage-side failover for a replica."},{"line_number":3652,"context_line":"        \"\"\""},{"line_number":3653,"context_line":""},{"line_number":3654,"context_line":"        context \u003d context.elevated()"}],"source_content_type":"text/x-python","patch_set":36,"id":"0f3c02f5_19fa99e6","line":3651,"updated":"2026-07-30 16:50:57.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"d73173a7e54a3860765700675065a5ffdb9c64fd"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"cf47745fdd48658535498ce619b7d0f41de734f1","unresolved":false,"context_lines":[{"line_number":3649,"context_line":"    def check_for_unplanned_share_server_replica_failover("},{"line_number":3650,"context_line":"            self, context, share_server_replica_id):"},{"line_number":3651,"context_line":"        \"\"\"Detect an unplanned storage-side failover for a replica."},{"line_number":3652,"context_line":"        \"\"\""},{"line_number":3653,"context_line":""},{"line_number":3654,"context_line":"        context \u003d context.elevated()"},{"line_number":3655,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"5c326173_92762457","line":3652,"updated":"2026-07-30 16:50:57.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"d73173a7e54a3860765700675065a5ffdb9c64fd"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":1262,"context_line":"        try:"},{"line_number":1263,"context_line":"            share_server[\u0027share_server_replica_list\u0027] \u003d ("},{"line_number":1264,"context_line":"                share_server_replica_list)"},{"line_number":1265,"context_line":"        except Exception:"},{"line_number":1266,"context_line":"            pass"},{"line_number":1267,"context_line":""},{"line_number":1268,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1668c12c_7761b463","line":1265,"range":{"start_line":1265,"start_character":8,"end_line":1265,"end_character":25},"updated":"2026-07-31 14:47:34.000000000","message":"why would we hit an exception here? we should know what type of object we\u0027re getting and just do what we need instead of trying to set the same data in a couple of different ways, hoping one works","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":1262,"context_line":"        try:"},{"line_number":1263,"context_line":"            share_server[\u0027share_server_replica_list\u0027] \u003d ("},{"line_number":1264,"context_line":"                share_server_replica_list)"},{"line_number":1265,"context_line":"        except Exception:"},{"line_number":1266,"context_line":"            pass"},{"line_number":1267,"context_line":""},{"line_number":1268,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":37,"id":"ae138abd_75aabb80","line":1265,"range":{"start_line":1265,"start_character":8,"end_line":1265,"end_character":25},"in_reply_to":"1668c12c_7761b463","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":2335,"context_line":"        else:"},{"line_number":2336,"context_line":"            share_server \u003d None"},{"line_number":2337,"context_line":""},{"line_number":2338,"context_line":"        # If share server replication is enabled, get the list of share"},{"line_number":2339,"context_line":"        # server replicas and pass that to the driver."},{"line_number":2340,"context_line":"        if share_server and share_utils.is_share_server_replication_enabled("},{"line_number":2341,"context_line":"                context, self.db, share_server):"},{"line_number":2342,"context_line":"            share_server_replica_list \u003d self._get_share_server_replicas_list("}],"source_content_type":"text/x-python","patch_set":37,"id":"90848567_d1cf5309","line":2339,"range":{"start_line":2338,"start_character":8,"end_line":2339,"end_character":54},"updated":"2026-07-31 14:47:34.000000000","message":"as I brought up at the mid cycle, ideally the driver would be aware of what needs to be replicated or not, and not having manila telling it everything that has to be replicated.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":2335,"context_line":"        else:"},{"line_number":2336,"context_line":"            share_server \u003d None"},{"line_number":2337,"context_line":""},{"line_number":2338,"context_line":"        # If share server replication is enabled, get the list of share"},{"line_number":2339,"context_line":"        # server replicas and pass that to the driver."},{"line_number":2340,"context_line":"        if share_server and share_utils.is_share_server_replication_enabled("},{"line_number":2341,"context_line":"                context, self.db, share_server):"},{"line_number":2342,"context_line":"            share_server_replica_list \u003d self._get_share_server_replicas_list("}],"source_content_type":"text/x-python","patch_set":37,"id":"6344b99b_e5839e9d","line":2339,"range":{"start_line":2338,"start_character":8,"end_line":2339,"end_character":54},"in_reply_to":"90848567_d1cf5309","updated":"2026-08-05 19:46:54.000000000","message":"Yes, we replicate all shares. As you can see, we are not passing a list of shares during Share Server Replica creation.\n\nInstead, we retrieve the list of share server replicas (including the active share server replica) and pass that list to the driver. This follows the same pattern we used for share replica.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":3062,"context_line":"            raise exception.ShareServerNotFound(share_server_id\u003dreplica_id)"},{"line_number":3063,"context_line":""},{"line_number":3064,"context_line":"        source_share_server_id \u003d replica_server.get(\u0027source_share_server_id\u0027)"},{"line_number":3065,"context_line":"        if not source_share_server_id:"},{"line_number":3066,"context_line":"            msg \u003d _("},{"line_number":3067,"context_line":"                \u0027Share server replica %(replica_id)s is missing \u0027"},{"line_number":3068,"context_line":"                \u0027source_share_server_id. Replica create requires API to \u0027"}],"source_content_type":"text/x-python","patch_set":37,"id":"1de5be96_bce0d34e","line":3065,"range":{"start_line":3065,"start_character":7,"end_line":3065,"end_character":38},"updated":"2026-07-31 14:47:34.000000000","message":"is this actually possible though? I mean, it was supposed to be set in the API","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":true,"context_lines":[{"line_number":3062,"context_line":"            raise exception.ShareServerNotFound(share_server_id\u003dreplica_id)"},{"line_number":3063,"context_line":""},{"line_number":3064,"context_line":"        source_share_server_id \u003d replica_server.get(\u0027source_share_server_id\u0027)"},{"line_number":3065,"context_line":"        if not source_share_server_id:"},{"line_number":3066,"context_line":"            msg \u003d _("},{"line_number":3067,"context_line":"                \u0027Share server replica %(replica_id)s is missing \u0027"},{"line_number":3068,"context_line":"                \u0027source_share_server_id. Replica create requires API to \u0027"}],"source_content_type":"text/x-python","patch_set":37,"id":"44346f80_faf2da9d","line":3065,"range":{"start_line":3065,"start_character":7,"end_line":3065,"end_character":38},"in_reply_to":"1de5be96_bce0d34e","updated":"2026-08-05 19:46:54.000000000","message":"The possibility is less but I wanted to make sure the db record for replica should have updated with non empty value, it is kind of extra check. Let me know if this is not require, I can remove this.","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94a4a1e1e367289feda8dc916c864e09c0b041d2","unresolved":true,"context_lines":[{"line_number":4681,"context_line":"                break"},{"line_number":4682,"context_line":""},{"line_number":4683,"context_line":"            if attempt \u003c max_replica_delete_wait_attempts - 1:"},{"line_number":4684,"context_line":"                time.sleep(replica_delete_wait_interval)"},{"line_number":4685,"context_line":""},{"line_number":4686,"context_line":"        if all_replicas:"},{"line_number":4687,"context_line":"            LOG.info("}],"source_content_type":"text/x-python","patch_set":37,"id":"87246618_7adfa58c","line":4684,"range":{"start_line":4684,"start_character":15,"end_line":4684,"end_character":56},"updated":"2026-07-31 14:47:34.000000000","message":"can we try not holding the thread with time sleeps? We could try the built in green retry mechanisms","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":4681,"context_line":"                break"},{"line_number":4682,"context_line":""},{"line_number":4683,"context_line":"            if attempt \u003c max_replica_delete_wait_attempts - 1:"},{"line_number":4684,"context_line":"                time.sleep(replica_delete_wait_interval)"},{"line_number":4685,"context_line":""},{"line_number":4686,"context_line":"        if all_replicas:"},{"line_number":4687,"context_line":"            LOG.info("}],"source_content_type":"text/x-python","patch_set":37,"id":"233843ba_45fb79ba","line":4684,"range":{"start_line":4684,"start_character":15,"end_line":4684,"end_character":56},"in_reply_to":"87246618_7adfa58c","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"e17a40ac490500eb77ac2e1cefd152a7d31ff3b2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":39,"context_line":"from manila import context"},{"line_number":40,"context_line":"from manila import coordination"},{"line_number":41,"context_line":"from manila.data import rpcapi as data_rpcapi"},{"line_number":42,"context_line":"from manila.db.sqlalchemy import api as db_api"},{"line_number":43,"context_line":"from manila import exception"},{"line_number":44,"context_line":"from manila.i18n import _"},{"line_number":45,"context_line":"from manila.keymgr import barbican as barbican_api"}],"source_content_type":"text/x-python","patch_set":50,"id":"f48667b8_c4fae966","line":42,"updated":"2026-08-14 06:32:26.000000000","message":"Importing `manila.db.sqlalchemy.api` directly is a layering violation. The rest of the manager uses `self.db` (the facade). This exists to use `db_api.context_manager.writer.using(context)` in `_update_db_for_share_server_replica_promotion`. That operation should be a single DB API call through the facade instead.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"af8abe94f3a7908e7f6b5a9d25b8c7c4cffb1586","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from manila import context"},{"line_number":40,"context_line":"from manila import coordination"},{"line_number":41,"context_line":"from manila.data import rpcapi as data_rpcapi"},{"line_number":42,"context_line":"from manila.db.sqlalchemy import api as db_api"},{"line_number":43,"context_line":"from manila import exception"},{"line_number":44,"context_line":"from manila.i18n import _"},{"line_number":45,"context_line":"from manila.keymgr import barbican as barbican_api"}],"source_content_type":"text/x-python","patch_set":50,"id":"bdd9b286_df21f8cd","line":42,"in_reply_to":"f48667b8_c4fae966","updated":"2026-08-19 13:07:18.000000000","message":"Addressed.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":1270,"context_line":"        else:"},{"line_number":1271,"context_line":"            return None"},{"line_number":1272,"context_line":""},{"line_number":1273,"context_line":"    def _set_share_server_replica_list("},{"line_number":1274,"context_line":"            self, share_server, share_server_replica_list):"},{"line_number":1275,"context_line":"        \"\"\"Attach replica context to a share server model/object.\"\"\""},{"line_number":1276,"context_line":"        if not share_server:"}],"source_content_type":"text/x-python","patch_set":50,"id":"a0549bc5_05721ffd","line":1273,"updated":"2026-08-14 06:32:26.000000000","message":"`_set_share_server_replica_list` has a 5-line comment explaining dict `[]` vs `setattr` (unnecessary since oslo_db models support `__setitem__`). Also, the 3 call sites each duplicate ~10 lines of check+fetch+set+LOG.debug. Please consolidate into one helper so each call site is a single line.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":2351,"context_line":""},{"line_number":2352,"context_line":"        # If share server replication is enabled, get the list of share"},{"line_number":2353,"context_line":"        # server replicas and pass that to the driver."},{"line_number":2354,"context_line":"        if share_server and share_utils.is_share_server_replication_enabled("},{"line_number":2355,"context_line":"                context, self.db, share_server):"},{"line_number":2356,"context_line":"            share_server_replica_list \u003d self._get_share_server_replicas_list("},{"line_number":2357,"context_line":"                context, share_server)"}],"source_content_type":"text/x-python","patch_set":50,"id":"8ffc7345_26c9a6b2","line":2354,"updated":"2026-08-14 06:32:26.000000000","message":"This adds `is_share_server_replication_enabled()` (which calls `share_server_get_all_with_filters()`) into `create_share`, `create_share_from_snapshot`, and `update_access`. These run on every share creation and access rule update for DHSS\u003dTrue backends, even when server replication isn\u0027t configured. That\u0027s an extra DB query with 3 eager-loaded relationships on every share operation. At minimum, short-circuit when the share server has no `replica_state` set so the common case pays nothing.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"6c75012357779b0f43a25051187af943592601e1","unresolved":true,"context_lines":[{"line_number":3061,"context_line":"            context, self.host)"},{"line_number":3062,"context_line":""},{"line_number":3063,"context_line":"        # Poll only non-active, non-transitional replica entries."},{"line_number":3064,"context_line":"        share_server_replicas \u003d ["},{"line_number":3065,"context_line":"            server for server in share_servers"},{"line_number":3066,"context_line":"            if (server.get(\u0027source_share_server_id\u0027) and"},{"line_number":3067,"context_line":"                server.get(\u0027replica_state\u0027) !\u003d"}],"source_content_type":"text/x-python","patch_set":50,"id":"2f704d58_9ccdec16","line":3064,"updated":"2026-08-16 06:03:57.000000000","message":"@manideep.openstack@gmail.com As per discussion, this should happen on active share replica instance(by grouping the corresponding inactive replicas) right?\nAre we going to call for every inactive replica?\n\nCan you clarify on this?","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"ee968b38b4fa04300e87c5c4fbbfc1ed82f45a4b","unresolved":false,"context_lines":[{"line_number":3061,"context_line":"            context, self.host)"},{"line_number":3062,"context_line":""},{"line_number":3063,"context_line":"        # Poll only non-active, non-transitional replica entries."},{"line_number":3064,"context_line":"        share_server_replicas \u003d ["},{"line_number":3065,"context_line":"            server for server in share_servers"},{"line_number":3066,"context_line":"            if (server.get(\u0027source_share_server_id\u0027) and"},{"line_number":3067,"context_line":"                server.get(\u0027replica_state\u0027) !\u003d"}],"source_content_type":"text/x-python","patch_set":50,"id":"3ec9c851_a236966b","line":3064,"in_reply_to":"2f704d58_9ccdec16","updated":"2026-08-19 13:03:35.000000000","message":"yes. Updated the logic.\nBut today, as we allow only 1 non active share server for a active share server (no fanout). The inactive replicas will be 1 in the driver call.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"bd91f57fd9bab96317867b93605923c22b3b735b","unresolved":true,"context_lines":[{"line_number":3061,"context_line":"            context, self.host)"},{"line_number":3062,"context_line":""},{"line_number":3063,"context_line":"        # Poll only non-active, non-transitional replica entries."},{"line_number":3064,"context_line":"        share_server_replicas \u003d ["},{"line_number":3065,"context_line":"            server for server in share_servers"},{"line_number":3066,"context_line":"            if (server.get(\u0027source_share_server_id\u0027) and"},{"line_number":3067,"context_line":"                server.get(\u0027replica_state\u0027) !\u003d"}],"source_content_type":"text/x-python","patch_set":50,"id":"6dd4052e_0cadf799","line":3064,"in_reply_to":"3ec9c851_a236966b","updated":"2026-08-19 13:27:54.000000000","message":"The logic is same, we are invoking the unplanned hook on all inactive share servers. This look acceptable for now as we are restricting only one inactive replica for an active share server.\n\nHowever, I would recommend you to add a TODO comment that this needs to be relooked while supporting multiple replicas. Reopening this comment for tracking.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":3122,"context_line":"            \u0027protected_share_instances\u0027: protected_share_instances,"},{"line_number":3123,"context_line":"        }"},{"line_number":3124,"context_line":""},{"line_number":3125,"context_line":"    def _validate_replica_promotion_updates("},{"line_number":3126,"context_line":"            self, context, updates, replica_id, source_share_server_id,"},{"line_number":3127,"context_line":"            share_instances_info, replica_host, promoted_share_network_id,"},{"line_number":3128,"context_line":"            promoted_share_network_subnet_id, action\u003d\u0027promote\u0027):"}],"source_content_type":"text/x-python","patch_set":50,"id":"2fc46ab1_2bed0bd5","line":3125,"updated":"2026-08-14 06:32:26.000000000","message":"`_validate_replica_promotion_updates` is 117 lines with 9 positional parameters. It does 6 `isinstance` checks on driver return values (is it a dict? is replica_list a list? is each element a dict?). Manila trusts internal code; `promote_share_replica` processes driver responses inline in ~30 lines with no type-checking. Please remove the isinstance checks, keep only the business-rule validations, and shorten the error messages. Target ~60 lines.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"af8abe94f3a7908e7f6b5a9d25b8c7c4cffb1586","unresolved":false,"context_lines":[{"line_number":3122,"context_line":"            \u0027protected_share_instances\u0027: protected_share_instances,"},{"line_number":3123,"context_line":"        }"},{"line_number":3124,"context_line":""},{"line_number":3125,"context_line":"    def _validate_replica_promotion_updates("},{"line_number":3126,"context_line":"            self, context, updates, replica_id, source_share_server_id,"},{"line_number":3127,"context_line":"            share_instances_info, replica_host, promoted_share_network_id,"},{"line_number":3128,"context_line":"            promoted_share_network_subnet_id, action\u003d\u0027promote\u0027):"}],"source_content_type":"text/x-python","patch_set":50,"id":"31fa5993_8c958765","line":3125,"in_reply_to":"2fc46ab1_2bed0bd5","updated":"2026-08-19 13:07:18.000000000","message":"Addressed","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":3295,"context_line":""},{"line_number":3296,"context_line":"    @add_hooks"},{"line_number":3297,"context_line":"    @utils.require_driver_initialized"},{"line_number":3298,"context_line":"    def create_share_server_replica("},{"line_number":3299,"context_line":"            self, context, share_server_replica_id, host):"},{"line_number":3300,"context_line":"        \"\"\"Create a share server replica on the target backend.\"\"\""},{"line_number":3301,"context_line":"        context \u003d context.elevated()"}],"source_content_type":"text/x-python","patch_set":50,"id":"6212dbfb_b9ae52d2","line":3298,"updated":"2026-08-14 06:32:26.000000000","message":"`create_share_server_replica` re-validates that the replica exists (DB already raises NotFound), that `source_share_server_id` is set (API already validates), and that source is ACTIVE (API\u0027s job). The existing `create_share_replica` doesn\u0027t re-validate in the manager.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":3391,"context_line":"                # back to Python objects so str() renders the whole dict"},{"line_number":3392,"context_line":"                # with single quotes only — no escaped double quotes in"},{"line_number":3393,"context_line":"                # CLI output."},{"line_number":3394,"context_line":"                readable_details \u003d {}"},{"line_number":3395,"context_line":"                for k, v in backend_details.items():"},{"line_number":3396,"context_line":"                    if isinstance(v, (dict, list)):"},{"line_number":3397,"context_line":"                        readable_details[k] \u003d v"}],"source_content_type":"text/x-python","patch_set":50,"id":"153b53d3_d3076e69","line":3394,"updated":"2026-08-14 06:32:26.000000000","message":"The \"readable_details\" block (~42 lines) re-deserializes JSON strings back to Python objects and stores `str(readable_details)` in metadata so `str()` renders single quotes instead of escaped double quotes in CLI output. This is a presentation concern in the manager layer, and it\u0027s fragile (depends on Python\u0027s repr using single quotes). The existing `manage_server` handles backend_details in 4 lines. Please remove this block; if CLI formatting is needed, do it in the view or CLI layer.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":3561,"context_line":""},{"line_number":3562,"context_line":"        \"\"\"Promote a share server replica to the active backend.\"\"\""},{"line_number":3563,"context_line":"        context \u003d context.elevated()"},{"line_number":3564,"context_line":"        LOG.info("},{"line_number":3565,"context_line":"            \"Received promote_share_server_replica for %(replica)s on \""},{"line_number":3566,"context_line":"            \"host %(host)s (wait\u003d%(wait)s).\","},{"line_number":3567,"context_line":"            {\u0027replica\u0027: share_server_replica_id, \u0027host\u0027: host, \u0027wait\u0027: wait},"}],"source_content_type":"text/x-python","patch_set":50,"id":"6a511454_a353997e","line":3564,"updated":"2026-08-14 06:32:26.000000000","message":"LOG.info at entry + LOG.debug dumping the entire replica object before any work begins. `promote_share_replica` has zero pre-work log statements, only a success message at the end. This narrate-every-step pattern appears throughout the new code; please trim to success/failure logging only.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"af8abe94f3a7908e7f6b5a9d25b8c7c4cffb1586","unresolved":false,"context_lines":[{"line_number":3561,"context_line":""},{"line_number":3562,"context_line":"        \"\"\"Promote a share server replica to the active backend.\"\"\""},{"line_number":3563,"context_line":"        context \u003d context.elevated()"},{"line_number":3564,"context_line":"        LOG.info("},{"line_number":3565,"context_line":"            \"Received promote_share_server_replica for %(replica)s on \""},{"line_number":3566,"context_line":"            \"host %(host)s (wait\u003d%(wait)s).\","},{"line_number":3567,"context_line":"            {\u0027replica\u0027: share_server_replica_id, \u0027host\u0027: host, \u0027wait\u0027: wait},"}],"source_content_type":"text/x-python","patch_set":50,"id":"c2636a49_e45aa3c5","line":3564,"in_reply_to":"6a511454_a353997e","updated":"2026-08-19 13:07:18.000000000","message":"Addressed.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":3749,"context_line":""},{"line_number":3750,"context_line":"    @add_hooks"},{"line_number":3751,"context_line":"    @utils.require_driver_initialized"},{"line_number":3752,"context_line":"    def check_for_unplanned_share_server_replica_failover("},{"line_number":3753,"context_line":"            self, context, share_server_replica_id):"},{"line_number":3754,"context_line":"        \"\"\"Detect an unplanned storage-side failover for a replica.\"\"\""},{"line_number":3755,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"6cc87b5c_37cdc2c0","line":3752,"updated":"2026-08-14 06:32:26.000000000","message":"`check_for_unplanned_share_server_replica_failover` has ~40 lines of setup (get replica, get source, build replica list, get share instances, get subnets) that is nearly identical to `promote_share_server_replica`. Please extract a shared helper.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"af8abe94f3a7908e7f6b5a9d25b8c7c4cffb1586","unresolved":false,"context_lines":[{"line_number":3749,"context_line":""},{"line_number":3750,"context_line":"    @add_hooks"},{"line_number":3751,"context_line":"    @utils.require_driver_initialized"},{"line_number":3752,"context_line":"    def check_for_unplanned_share_server_replica_failover("},{"line_number":3753,"context_line":"            self, context, share_server_replica_id):"},{"line_number":3754,"context_line":"        \"\"\"Detect an unplanned storage-side failover for a replica.\"\"\""},{"line_number":3755,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"c7915f64_2ee67f0c","line":3752,"in_reply_to":"6cc87b5c_37cdc2c0","updated":"2026-08-19 13:07:18.000000000","message":"Addressed.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"6c75012357779b0f43a25051187af943592601e1","unresolved":true,"context_lines":[{"line_number":3805,"context_line":"                    share_server_resources\u003dshare_instances_info) or {}"},{"line_number":3806,"context_line":"            )"},{"line_number":3807,"context_line":""},{"line_number":3808,"context_line":"            promotion_result \u003d self._validate_replica_promotion_updates("},{"line_number":3809,"context_line":"                context, failover_updates, share_server_replica_id,"},{"line_number":3810,"context_line":"                source_share_server_id, share_instances_info,"},{"line_number":3811,"context_line":"                replica_server[\u0027host\u0027], promoted_share_network_id,"}],"source_content_type":"text/x-python","patch_set":50,"id":"4471cb5e_459a539c","line":3808,"updated":"2026-08-16 06:03:57.000000000","message":"@manideep.openstack@gmail.com As per driver.py, we should have an empty dict({}) check happening and return; to resolve as no-op without need of calling _validate_replica_promotion_updates() steps.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"350f09c7e3e09b2fbbf5c196749718b609f4f0c5","unresolved":true,"context_lines":[{"line_number":3805,"context_line":"                    share_server_resources\u003dshare_instances_info) or {}"},{"line_number":3806,"context_line":"            )"},{"line_number":3807,"context_line":""},{"line_number":3808,"context_line":"            promotion_result \u003d self._validate_replica_promotion_updates("},{"line_number":3809,"context_line":"                context, failover_updates, share_server_replica_id,"},{"line_number":3810,"context_line":"                source_share_server_id, share_instances_info,"},{"line_number":3811,"context_line":"                replica_server[\u0027host\u0027], promoted_share_network_id,"}],"source_content_type":"text/x-python","patch_set":50,"id":"5b2d40a9_cee68a5a","line":3808,"in_reply_to":"4471cb5e_459a539c","updated":"2026-08-18 06:54:04.000000000","message":"As per spec None should be acceptable as no-op, need not be empty dict({}).\nhttps://opendev.org/openstack/manila-specs/src/branch/master/specs/hibiscus/share-server-replica.rst","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"ee968b38b4fa04300e87c5c4fbbfc1ed82f45a4b","unresolved":false,"context_lines":[{"line_number":3805,"context_line":"                    share_server_resources\u003dshare_instances_info) or {}"},{"line_number":3806,"context_line":"            )"},{"line_number":3807,"context_line":""},{"line_number":3808,"context_line":"            promotion_result \u003d self._validate_replica_promotion_updates("},{"line_number":3809,"context_line":"                context, failover_updates, share_server_replica_id,"},{"line_number":3810,"context_line":"                source_share_server_id, share_instances_info,"},{"line_number":3811,"context_line":"                replica_server[\u0027host\u0027], promoted_share_network_id,"}],"source_content_type":"text/x-python","patch_set":50,"id":"af8f1b5e_a8023e21","line":3808,"in_reply_to":"5b2d40a9_cee68a5a","updated":"2026-08-19 13:03:35.000000000","message":"Updated driver.py.\nAs per latest implementation, it should return a non empty dict with promote_required set as either True or False.\nwill update spec as well.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"6c75012357779b0f43a25051187af943592601e1","unresolved":true,"context_lines":[{"line_number":3806,"context_line":"            )"},{"line_number":3807,"context_line":""},{"line_number":3808,"context_line":"            promotion_result \u003d self._validate_replica_promotion_updates("},{"line_number":3809,"context_line":"                context, failover_updates, share_server_replica_id,"},{"line_number":3810,"context_line":"                source_share_server_id, share_instances_info,"},{"line_number":3811,"context_line":"                replica_server[\u0027host\u0027], promoted_share_network_id,"},{"line_number":3812,"context_line":"                promoted_share_network_subnet_id, action\u003d\u0027failover\u0027)"}],"source_content_type":"text/x-python","patch_set":50,"id":"325e7bac_662dd9fc","line":3809,"updated":"2026-08-16 06:03:57.000000000","message":"@manideep.openstack@gmail.com please align the param names between caller and implemented function instead of relying on positional arguments only.\nEither rename failover_updates as updates or updates\u003dfailover_updates","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"ee968b38b4fa04300e87c5c4fbbfc1ed82f45a4b","unresolved":false,"context_lines":[{"line_number":3806,"context_line":"            )"},{"line_number":3807,"context_line":""},{"line_number":3808,"context_line":"            promotion_result \u003d self._validate_replica_promotion_updates("},{"line_number":3809,"context_line":"                context, failover_updates, share_server_replica_id,"},{"line_number":3810,"context_line":"                source_share_server_id, share_instances_info,"},{"line_number":3811,"context_line":"                replica_server[\u0027host\u0027], promoted_share_network_id,"},{"line_number":3812,"context_line":"                promoted_share_network_subnet_id, action\u003d\u0027failover\u0027)"}],"source_content_type":"text/x-python","patch_set":50,"id":"361fab1f_6ec9486b","line":3809,"in_reply_to":"325e7bac_662dd9fc","updated":"2026-08-19 13:03:35.000000000","message":"Addressed.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":3811,"context_line":"                replica_server[\u0027host\u0027], promoted_share_network_id,"},{"line_number":3812,"context_line":"                promoted_share_network_subnet_id, action\u003d\u0027failover\u0027)"},{"line_number":3813,"context_line":""},{"line_number":3814,"context_line":"            if failover_updates.get(\u0027promote_required\u0027) is not True:"},{"line_number":3815,"context_line":"                LOG.debug("},{"line_number":3816,"context_line":"                    \"Promote not required for share server replica \""},{"line_number":3817,"context_line":"                    \"%(replica)s.\","}],"source_content_type":"text/x-python","patch_set":50,"id":"7de41ea0_aaf24036","line":3814,"updated":"2026-08-14 06:32:26.000000000","message":"`if failover_updates.get(\u0027promote_required\u0027) is not True:` logs a debug message but does not return. Execution falls through to `_update_db_for_share_server_replica_promotion`, which unconditionally applies the promotion. If the driver says promote is not required, the code promotes anyway. Either this needs a `return` after the debug log, or the check is dead code.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"af8abe94f3a7908e7f6b5a9d25b8c7c4cffb1586","unresolved":false,"context_lines":[{"line_number":3811,"context_line":"                replica_server[\u0027host\u0027], promoted_share_network_id,"},{"line_number":3812,"context_line":"                promoted_share_network_subnet_id, action\u003d\u0027failover\u0027)"},{"line_number":3813,"context_line":""},{"line_number":3814,"context_line":"            if failover_updates.get(\u0027promote_required\u0027) is not True:"},{"line_number":3815,"context_line":"                LOG.debug("},{"line_number":3816,"context_line":"                    \"Promote not required for share server replica \""},{"line_number":3817,"context_line":"                    \"%(replica)s.\","}],"source_content_type":"text/x-python","patch_set":50,"id":"98f9f6e3_39effc86","line":3814,"in_reply_to":"7de41ea0_aaf24036","updated":"2026-08-19 13:07:18.000000000","message":"Addressed.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"350f09c7e3e09b2fbbf5c196749718b609f4f0c5","unresolved":true,"context_lines":[{"line_number":111,"context_line":"                    \u0027(replica_state) of each share server replica.\u0027),"},{"line_number":112,"context_line":"    cfg.IntOpt(\u0027share_server_replica_failover_check_interval\u0027,"},{"line_number":113,"context_line":"               default\u003d300,"},{"line_number":114,"context_line":"               help\u003d\u0027This value, specified in seconds, determines how often \u0027"},{"line_number":115,"context_line":"                    \u0027the share manager will poll each non-active share \u0027"},{"line_number":116,"context_line":"                    \u0027server replica to detect an unplanned storage-side \u0027"},{"line_number":117,"context_line":"                    \u0027failover.\u0027),"}],"source_content_type":"text/x-python","patch_set":51,"id":"62ec5809_57a87a61","line":114,"updated":"2026-08-18 06:54:04.000000000","message":"As per spec \u0027-1\u0027 value should be accepted as disable option.\nhttps://opendev.org/openstack/manila-specs/src/branch/master/specs/hibiscus/share-server-replica.rst","commit_id":"7b07946cf89277aea184cd11bd24486f0989efb5"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"ee968b38b4fa04300e87c5c4fbbfc1ed82f45a4b","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    \u0027(replica_state) of each share server replica.\u0027),"},{"line_number":112,"context_line":"    cfg.IntOpt(\u0027share_server_replica_failover_check_interval\u0027,"},{"line_number":113,"context_line":"               default\u003d300,"},{"line_number":114,"context_line":"               help\u003d\u0027This value, specified in seconds, determines how often \u0027"},{"line_number":115,"context_line":"                    \u0027the share manager will poll each non-active share \u0027"},{"line_number":116,"context_line":"                    \u0027server replica to detect an unplanned storage-side \u0027"},{"line_number":117,"context_line":"                    \u0027failover.\u0027),"}],"source_content_type":"text/x-python","patch_set":51,"id":"1a9ad24b_1c7a92ec","line":114,"in_reply_to":"62ec5809_57a87a61","updated":"2026-08-19 13:03:35.000000000","message":"Yes.\n\n        2. With arguments:\n           @periodic_task(spacing\u003dN [, run_immediately\u003d[True|False]]\n           [, name\u003d[None|\"string\"])\n           this will be run on approximately every N seconds. If this number is\n           negative the periodic task will be disabled.","commit_id":"7b07946cf89277aea184cd11bd24486f0989efb5"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"350f09c7e3e09b2fbbf5c196749718b609f4f0c5","unresolved":true,"context_lines":[{"line_number":3054,"context_line":"    @utils.require_driver_initialized"},{"line_number":3055,"context_line":"    def periodic_check_for_unplanned_share_server_replica_failover("},{"line_number":3056,"context_line":"            self, context):"},{"line_number":3057,"context_line":"        LOG.debug("},{"line_number":3058,"context_line":"            \"Checking for unplanned failover of share server replicas.\")"},{"line_number":3059,"context_line":""},{"line_number":3060,"context_line":"        share_servers \u003d self.db.share_server_get_all_by_host("}],"source_content_type":"text/x-python","patch_set":51,"id":"1c73edd7_9926abfd","line":3057,"updated":"2026-08-18 06:54:04.000000000","message":"Remove this log statement?","commit_id":"7b07946cf89277aea184cd11bd24486f0989efb5"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"ee968b38b4fa04300e87c5c4fbbfc1ed82f45a4b","unresolved":false,"context_lines":[{"line_number":3054,"context_line":"    @utils.require_driver_initialized"},{"line_number":3055,"context_line":"    def periodic_check_for_unplanned_share_server_replica_failover("},{"line_number":3056,"context_line":"            self, context):"},{"line_number":3057,"context_line":"        LOG.debug("},{"line_number":3058,"context_line":"            \"Checking for unplanned failover of share server replicas.\")"},{"line_number":3059,"context_line":""},{"line_number":3060,"context_line":"        share_servers \u003d self.db.share_server_get_all_by_host("}],"source_content_type":"text/x-python","patch_set":51,"id":"c10642f8_a9103111","line":3057,"in_reply_to":"1c73edd7_9926abfd","updated":"2026-08-19 13:03:35.000000000","message":"Removed.","commit_id":"7b07946cf89277aea184cd11bd24486f0989efb5"},{"author":{"_account_id":38371,"name":"Kumar Tadepalli","display_name":"Kumar Tadepalli","email":"kumart.lead@gmail.com","username":"kumart","status":"NetApp"},"change_message_id":"80368675a7093fa877b1106298b56cd58eb322e3","unresolved":true,"context_lines":[{"line_number":3805,"context_line":"                    share_server_resources\u003dshare_instances_info) or {}"},{"line_number":3806,"context_line":"            )"},{"line_number":3807,"context_line":""},{"line_number":3808,"context_line":"            promotion_result \u003d self._validate_replica_promotion_updates("},{"line_number":3809,"context_line":"                context, failover_updates, share_server_replica_id,"},{"line_number":3810,"context_line":"                source_share_server_id, share_instances_info,"},{"line_number":3811,"context_line":"                replica_server[\u0027host\u0027], promoted_share_network_id,"}],"source_content_type":"text/x-python","patch_set":51,"id":"621a6371_4461ab1d","line":3808,"updated":"2026-08-18 06:16:51.000000000","message":"ShareManager.check_for_unplanned_share_server_replica_failover calls _validate_replica_promotion_updates before it looks at promote_required, and that validator raises InvalidInput when replica_list is empty.","commit_id":"7b07946cf89277aea184cd11bd24486f0989efb5"},{"author":{"_account_id":38373,"name":"Manideep","display_name":"Manideep","email":"manideep.openstack@gmail.com","username":"manideepn","status":"NetApp"},"change_message_id":"ee968b38b4fa04300e87c5c4fbbfc1ed82f45a4b","unresolved":false,"context_lines":[{"line_number":3805,"context_line":"                    share_server_resources\u003dshare_instances_info) or {}"},{"line_number":3806,"context_line":"            )"},{"line_number":3807,"context_line":""},{"line_number":3808,"context_line":"            promotion_result \u003d self._validate_replica_promotion_updates("},{"line_number":3809,"context_line":"                context, failover_updates, share_server_replica_id,"},{"line_number":3810,"context_line":"                source_share_server_id, share_instances_info,"},{"line_number":3811,"context_line":"                replica_server[\u0027host\u0027], promoted_share_network_id,"}],"source_content_type":"text/x-python","patch_set":51,"id":"f98b35ab_e613e300","line":3808,"in_reply_to":"621a6371_4461ab1d","updated":"2026-08-19 13:03:35.000000000","message":"Addressed.","commit_id":"7b07946cf89277aea184cd11bd24486f0989efb5"}],"manila/share/rpcapi.py":[{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"357117d90db130fcec85d835f9af36003e9858f5","unresolved":true,"context_lines":[{"line_number":616,"context_line":"        call_context.cast("},{"line_number":617,"context_line":"            context,"},{"line_number":618,"context_line":"            \u0027update_share_server_replica_state\u0027,"},{"line_number":619,"context_line":"            share_server_replica_id\u003dshare_server_replica_id,"},{"line_number":620,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":26,"id":"237d765f_74ebf9e4","line":619,"updated":"2026-07-21 14:25:13.000000000","message":"please keep param name consistent i.e. share_server_replica_id in all functions.","commit_id":"dc75edfaeaa0061eb77fbb844e7d2d56e16ac045"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"ea8fd70902a6f6b366f70204b5fd0c9ec73cff52","unresolved":true,"context_lines":[{"line_number":616,"context_line":"        call_context.cast("},{"line_number":617,"context_line":"            context,"},{"line_number":618,"context_line":"            \u0027update_share_server_replica_state\u0027,"},{"line_number":619,"context_line":"            share_server_replica_id\u003dshare_server_replica_id,"},{"line_number":620,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":26,"id":"3dd7884b_5f557625","line":619,"in_reply_to":"237d765f_74ebf9e4","updated":"2026-07-29 13:05:36.000000000","message":"+1. We need to keep the param name consistent.","commit_id":"dc75edfaeaa0061eb77fbb844e7d2d56e16ac045"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"41e97e5e86f60b98c6d7624acf67bbb3e6434342","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        call_context.cast("},{"line_number":617,"context_line":"            context,"},{"line_number":618,"context_line":"            \u0027update_share_server_replica_state\u0027,"},{"line_number":619,"context_line":"            share_server_replica_id\u003dshare_server_replica_id,"},{"line_number":620,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":26,"id":"859f33c6_40b29a53","line":619,"in_reply_to":"3dd7884b_5f557625","updated":"2026-08-05 19:46:54.000000000","message":"Done","commit_id":"dc75edfaeaa0061eb77fbb844e7d2d56e16ac045"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":580,"context_line":"            host\u003dhost,"},{"line_number":581,"context_line":"        )"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def delete_share_server_replica("},{"line_number":584,"context_line":"            self, context, share_server_replica_id, force\u003dFalse):"},{"line_number":585,"context_line":"        replica \u003d db_api.share_server_get(context, share_server_replica_id)"},{"line_number":586,"context_line":"        new_host \u003d utils.extract_host(replica[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":50,"id":"1a2fef9a_f69acbe8","line":583,"updated":"2026-08-14 06:32:26.000000000","message":"`delete_share_server_replica` does a `share_server_get()` in the RPC layer to extract the host. The RPC layer shouldn\u0027t do DB lookups; the caller should pass the host, matching `delete_share_replica`. `update_share_server_replica_state` has polymorphic input handling (`isinstance(..., dict)`) when the existing `update_share_replica` simply takes a dict. Fix the callers to be consistent.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/share/utils.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":28,"context_line":"DEFAULT_POOL_NAME \u003d \u0027_pool0\u0027"},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class ShareServer(dict):"},{"line_number":33,"context_line":"    \"\"\"Dictionary wrapper that supports both attribute and dict access."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"7b526c7b_9d0886c9","line":31,"updated":"2026-08-14 06:32:26.000000000","message":"`ShareServer` is a 30-line dict subclass with attribute access, `__repr__`, and `__delattr__`. Manila\u0027s share server objects from the DB already support attribute access (they\u0027re SQLAlchemy model instances). The existing share replica code doesn\u0027t need this. Please delete the class and simplify `build_share_server_replica_payload` (the 12-line nested JSON-parsing loop is working around a data model problem at the wrong layer). `is_share_server_replication_enabled` has convoluted double-negative logic and an 8-line docstring for a 12-line function; this should be `return any(r.get(\u0027replica_state\u0027) for r in replicas)`.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"4a192a76b96b3dcefa251767234616c0f9e336cd","unresolved":false,"context_lines":[{"line_number":28,"context_line":"DEFAULT_POOL_NAME \u003d \u0027_pool0\u0027"},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class ShareServer(dict):"},{"line_number":33,"context_line":"    \"\"\"Dictionary wrapper that supports both attribute and dict access."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"ed352713_521c1fd9","line":31,"in_reply_to":"7b526c7b_9d0886c9","updated":"2026-08-20 12:43:49.000000000","message":"Done","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":254,"context_line":"    return True"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"def is_share_server_replication_enabled(context, db, share_server):"},{"line_number":258,"context_line":"    \"\"\"Check if share server replication is enabled."},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    Replication is considered enabled when at least one child share server"}],"source_content_type":"text/x-python","patch_set":50,"id":"1987187d_5ec0f9b0","line":257,"updated":"2026-08-14 06:32:26.000000000","message":"If all replicas are in error state, this returns `False` (\"replication not enabled\"), which skips attaching the replica list to the share server. That means the driver won\u0027t see its replicas during recovery scenarios when it arguably most needs to. The double-negative logic here (checking all-error then any-has-state) is fragile and the recovery behavior seems backwards.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/tests/api/v2/test_share_server_replicas.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":530,"context_line":"        self.assertRaises(exc.HTTPBadRequest, self.controller.create,"},{"line_number":531,"context_line":"                          self.req, body)"},{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    def test_create_maps_invalid_input_to_400(self):"},{"line_number":534,"context_line":"        self.mock_object("},{"line_number":535,"context_line":"            self.controller.share_api,"},{"line_number":536,"context_line":"            \u0027create_share_server_replica\u0027,"}],"source_content_type":"text/x-python","patch_set":50,"id":"956cba3a_5ba72e99","line":533,"updated":"2026-08-14 06:32:26.000000000","message":"14 exception-mapping tests follow the identical pattern (mock a method to raise, assert the controller raises the HTTP error). These should be parameterized with `@ddt.data` (~50 lines instead of ~150). The 6 metadata pass-through tests each verify that a one-line wrapper calls its delegate, which is testing the framework not the code; the existing share_replicas controller tests don\u0027t have these.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}],"manila/tests/api/v2/test_share_servers.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b4ae4b4242065d3e776d856a962683da6fcab969","unresolved":false,"context_lines":[{"line_number":430,"context_line":"            ctxt, fake_share_server_get_result[\u0027share_server\u0027][\u0027id\u0027])"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"    def test_show_server_without_share_network(self):"},{"line_number":433,"context_line":"        share_server \u003d FakeShareServer(created_at\u003dNone, has_share_network\u003dFalse)"},{"line_number":434,"context_line":"        self.mock_object("},{"line_number":435,"context_line":"            db_api, \u0027share_server_get\u0027,"},{"line_number":436,"context_line":"            mock.Mock(return_value\u003dshare_server))"}],"source_content_type":"text/x-python","patch_set":10,"id":"733f520d_d0147035","line":433,"updated":"2026-06-29 14:19:24.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"5393a7db58a11246e9b2eff039b36cdde3c2e05f"}],"manila/tests/share/test_rpcapi.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e121588ee3754ff106446fab16c8e402ee450501","unresolved":true,"context_lines":[{"line_number":603,"context_line":"                             backup\u003dfake_backup,"},{"line_number":604,"context_line":"                             share_id\u003d\u0027fake_share_id\u0027)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"    def test_update_share_server_replica_state(self):"},{"line_number":607,"context_line":"        share_server_replica \u003d {"},{"line_number":608,"context_line":"            \u0027id\u0027: \u0027fake_ss_replica_id\u0027,"},{"line_number":609,"context_line":"            \u0027host\u0027: \u0027fake_host@backend#pool\u0027,"}],"source_content_type":"text/x-python","patch_set":50,"id":"bdb54f59_05637618","line":606,"updated":"2026-08-14 06:32:26.000000000","message":"This file has an existing `_test_share_api()` helper that every RPC test uses (`test_create_share_replica` is 8 lines with it). The 4 new tests each manually build `captured` dicts, define `_fake_prepare()` and `_fake_cast()` closures, and hand-wire every assertion at ~35 lines each. That\u0027s 150 lines that should be ~25.","commit_id":"0d8fec39b938adad01902793e654b5026e7bb9ae"}]}
