)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"fd6041d8_06e66ed2","updated":"2026-02-24 21:21:00.000000000","message":"Apart from the comments inline, I\u0027m still confused about the legacy vs new way of handling application consistent snapshots.\n\nThe \"new\" way mentions about adding all the flexvol (pools) of a given SVM (backend) to a consistency group. How is that different from the \"old/legacy\" way?\nIs it possible to create consistency groups with flexvols across different SVMs? It would be great to have this flexibility so we should be able to failover/failback volumes without requiring to create a dedicated backend for replicated volumes (a cinder backend will be disabled when we failover).","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"f47b046337d0301d76d04731977692b9993113c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ee1959b4_a3bc1c25","updated":"2026-02-09 06:11:18.000000000","message":"Dear Core reviewers, Resquesting your priority review on the netapp automatedfailover replication feature.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"31835d6244d05c9dcf5b4001feac29f6f7d123cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"11c5e64e_73d0cd9e","updated":"2026-02-17 11:24:36.000000000","message":"LGTM","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"15b609edf5555c36fdc823fbe7c86ff96ac61c72","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"30259149_7f2916c7","updated":"2026-02-19 05:53:31.000000000","message":"LGTM","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e970eb79c017a7b65e9d23ca368e3a9b4ec506f7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b2e7f6d8_295c97ff","updated":"2026-02-20 18:51:15.000000000","message":"Resolved question that was answered in a different patch.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8b5f4e8529e9bb60db36ce9e5c0072ecb3ec299b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"06a734ea_627e1c05","updated":"2026-02-06 05:42:55.000000000","message":"Review review from NetApp team.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"bfbfa21edd3d21b29c347b490e7ce30af7c9269d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"62b8c1e3_4812723a","updated":"2026-02-11 09:38:29.000000000","message":"Run-NetApp CI","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c7afcb5d_ab5697e8","updated":"2026-02-20 18:40:37.000000000","message":"The code written here looks clean, but there are several clarifications I\u0027d like to see, a couple places where I think there are some subtle problems, and some minor suggestions about merge conflicts or code flow (do not have to be taken).\n\nThe -1 is for the following:\n- data_motion.py #110: I suspect this code is wrong, and will work most of the time, but will do the wrong thing in some unexpected conditions\n- data_motion.py #228: This does not look right to me in that the Python None object name is used as a cg_name\n- data_motion.py #1157 / #1162: I believe this does the opposite of what\u0027s intended\n\nThe other comments are for your consideration and to get confirmation that it does what I think it does / should do.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1ef5b4491aa3c62ece15c45e1b9765c39cdf0dff","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"dc10ee63_6080a96e","in_reply_to":"c7afcb5d_ab5697e8","updated":"2026-02-20 19:25:13.000000000","message":"#228 has been marked resolved as I got a satisfactory answer in https://review.opendev.org/c/openstack/cinder/+/973908 on the same topic.  So -1 is for #110, #1157, and #1162.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"64bf25da_50b598ac","in_reply_to":"dc10ee63_6080a96e","updated":"2026-03-10 06:58:14.000000000","message":"Have resolved the comments.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"56fb0e5c_2568d829","in_reply_to":"fd6041d8_06e66ed2","updated":"2026-03-09 07:46:35.000000000","message":"The use case we are providing here is to protect all the FlexVol volumes (decided by netapp_pool_name_search_pattern) in a stanza with a single consistency group, ensuring crash consistent protection for the stanza where all the VMs part of the stanza can be failed over and recovered together. This gives customers the flexibility to protect a set of FlexVols together by placing them in a dedicated stanza. \n\nConsider a customer running a multi-tier application (DB tier, app tier, web tier). With the legacy per-volume SnapMirror model, each volume had its own independent SnapMirror relationship — during failover, volumes could be at different points in time causing application inconsistency.\n\nCG is bound to an SVM, hence it is not possible to have FlexVols from different SVMs in a CG — this is a hard ONTAP constraint.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6491b5ee_0ede32b0","updated":"2026-03-09 07:46:35.000000000","message":"Hi @rajatdhasmana@gmail.com and @anthony.galica@hitachivantara.com really appreciate your review comments. I have answered some of the queries. Also there are few code changes suggested which I will address in next commit.","commit_id":"18746ae2bd756f4c451350a9c89daadc34db81aa"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"f63e29c761afd4746cf45792e06a4311232178fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0c270dc0_ffff7120","updated":"2026-03-09 06:21:35.000000000","message":"LGTM","commit_id":"18746ae2bd756f4c451350a9c89daadc34db81aa"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"26e862bdc36be5d29b39263c19b2600eed49bb31","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7845b948_9f9ee880","updated":"2026-03-06 07:29:55.000000000","message":"Run-NetApp CI","commit_id":"18746ae2bd756f4c451350a9c89daadc34db81aa"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"165e3e47799d63eda905ec2482bd4a13273870e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d1e54e93_6d3708b9","updated":"2026-03-04 05:03:20.000000000","message":"my comments in previous PS were not addressed","commit_id":"18746ae2bd756f4c451350a9c89daadc34db81aa"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"189908e5905eae996523b048fabb0ddb443b01bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"14725b5a_42f4bfbf","updated":"2026-03-12 06:43:34.000000000","message":"@rajatdhasmana@gmail.com @anthony.galica@hitachivantara.com @rosmaita.fossdev@gmail.com @jobernar@redhat.com - Reqesting your feedback on the PR. I have addressed the review comments. Also ZUUL and NetApp-CI are passing.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"36d2f41f_552dbd1a","updated":"2026-03-17 11:37:54.000000000","message":"Hi @anthony.galica@hitachivantara.com, Appreciate your comments. Since most are nit pick comments, would it be alright if I take take them up in next PR. Also since this is a major feature, its taking a lot of time in dev testing cycles. Hence trying to take up functional issues if any. Also all the major changes have already gone in. Our team is performing QA on this feature, and if any bugs are found we are trying to push to the same PR till it is checked in.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"7b8e2ab7_1c66f45b","updated":"2026-03-13 00:59:10.000000000","message":"Hi @sanketh.shetty@netapp.com,\n\nI have a lot more nitpicks here for you to ponder, most of which I won\u0027t ding you for if you don\u0027t want to do them.\n\n-1 is for the following:\n* test_block_base.py, #2295: It looks like this test is incomplete based on comments.  Either complete test or confirm.\n* block_base.py, #510: Will not enforce -1 after this review if you don\u0027t want to change it, but I think a helper method should be used between block and the one around line #475\n\nFinally, it does look like this patch is (or was) a WIP.  It\u0027s a very large patch that required going over 1200 lines of changes again, so I don\u0027t want to review it a third time until everything has settled down and it\u0027s not a WIP. Please advise!","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"66ac3804_7b357e1e","updated":"2026-03-10 06:58:14.000000000","message":"hi @rajatdhasmana@gmail.com, you comments have been addressed. Kindly review.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"6825a07eb0a6632503b9da9622302d5fbfd8926e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3ce6f4e1_bfd02c01","updated":"2026-03-11 06:14:37.000000000","message":"recheck","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"7156e7b6fac37a1127e648d1ec26c16472cb2aac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9f178478_52636537","updated":"2026-03-11 14:49:25.000000000","message":"run-NetApp CI","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e3c2c061cd024844fe220bf4e3dd032415ff1aa5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"897401ae_d90a9fc2","in_reply_to":"7b8e2ab7_1c66f45b","updated":"2026-03-13 01:00:21.000000000","message":"Oh, I also noticed a lot of the same text that you created constants for being used in various places.  I do think you should make use of the constants consistent across the patch.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"fec45965_b4ac97ca","in_reply_to":"897401ae_d90a9fc2","updated":"2026-03-17 11:37:54.000000000","message":"Yes. We have started introducing constants now. We are planning to do a more detailed alignment to constants in next PRs after this PR is merged.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"347b1ef279327b08a15a8b1025d020d312bcb58c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"5288528c_9784423f","updated":"2026-03-26 05:50:18.000000000","message":"Hi @anthony.galica@hitachivantara.com, Have provided my feedback on the reviews. Requesting your approval.","commit_id":"5f1c62d3b55ebbe4ab2dbd165ef0038f01d99b88"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"6b26d9957152d6088de620359bea2fd0d8567f67","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1e659283_9996a6ab","updated":"2026-03-26 05:53:25.000000000","message":"run-NetApp CI","commit_id":"5f1c62d3b55ebbe4ab2dbd165ef0038f01d99b88"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"db8665f5762ec901fa585a5e28f64a39afb9495f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"be46fb71_c8832f42","updated":"2026-03-25 13:40:55.000000000","message":"run-NetApp CI","commit_id":"5f1c62d3b55ebbe4ab2dbd165ef0038f01d99b88"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"30424028ed6176784dc850d74bd268ea9b470d63","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"85e24a3c_f6724d8e","updated":"2026-04-06 09:49:49.000000000","message":"Dear Core reviewers, Gentle reminder. Requesting approval as all comments are addressed.","commit_id":"90c34ca7cb427b504f87774bb517f0418d1acc41"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"75922f5e1f98b699b49a7106cf24c176e6a5b749","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"19a3499b_5bb19c3d","updated":"2026-03-28 16:29:20.000000000","message":"Hi @rajatdhasmana@gmail.com, @jobernar@redhat.com, @rosmaita.fossdev@gmail.com, I have got one +2. Requesting one more approaval to merge this feature.","commit_id":"90c34ca7cb427b504f87774bb517f0418d1acc41"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"941ebb53e97eb9e7dffb8d8becd6ed216c0244f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"bb987b05_d47de329","updated":"2026-03-27 05:45:36.000000000","message":"My responses have been answered to my satisfaction.","commit_id":"90c34ca7cb427b504f87774bb517f0418d1acc41"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"18d902a074d0b53c1c830dc65d86eb9cd4f19b67","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"5fb44753_440121b9","updated":"2026-04-30 07:53:35.000000000","message":"It\u0027s a long list of nits but nothing that cannot be answered or addressed in a follow up patch.\nThe commit/releasenote says crash/application consistent replication but looks like we are modifying the A/A sync replication behavior.\nNetApp iSCSI CI has passed and there are no protocol specific changes so FC testing shouldn\u0027t be mandatory (although we should fix the CI)\nOverall, LGTM.","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8c20eafad90f293acf006436e5c757e602dd4ec9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"bcd51da0_665d4559","updated":"2026-04-21 06:08:03.000000000","message":"Thanks @jobernar@redhat.com for the review. Hi @rajatdhasmana@gmail.com I have resolved your comments. Requesting your approval on this. We will need to merge this before other pending NetApp features.","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"9e174709437d77976d9bbebc1e09eba3eab8968c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"b58c9114_ebc02ee6","updated":"2026-04-17 14:55:07.000000000","message":"This looks okay to me, test coverage is good, CI is passing,  Rajat had specific questions and concerns so I would like to see his review, but no objection from me.","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"8791652b0e5560844f9bd09523470cdbd6f5b6c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"b9619586_28f18f11","updated":"2026-05-07 06:10:57.000000000","message":"hi @rajatdhasmana@gmail.com, appreciate you reviews. I will take them up in subsequent patch. I am currently in the middle of NetApp AFX design work. Will handle these comments mostly in a week or two.","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"d78544c4956aadb55d1d2797bd85b0cd960ec9be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"cb6a690d_8fe40b1b","updated":"2026-04-15 11:07:23.000000000","message":"recheck","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"3f1e496869062d7718a5d4899c49316b2cec8070","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"27abf33b_d6bd1f18","updated":"2026-04-15 07:46:53.000000000","message":"run-NetApp CI","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/client/test_client_cmode_rest.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":4780,"context_line":""},{"line_number":4781,"context_line":"        result \u003d self.client.is_igroup_proximity_configured(igroup_uuid)"},{"line_number":4782,"context_line":""},{"line_number":4783,"context_line":"        self.assertFalse(result)"},{"line_number":4784,"context_line":""},{"line_number":4785,"context_line":"    @mock.patch.object(client_cmode_rest.RestClient, \u0027send_request\u0027)"},{"line_number":4786,"context_line":"    def test_is_igroup_proximity_configured_no_initiators("}],"source_content_type":"text/x-python","patch_set":6,"id":"856c3a94_e1bfce99","line":4783,"updated":"2026-03-13 00:59:10.000000000","message":"Should we do the assert_called_once_with() here as well?","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":4780,"context_line":""},{"line_number":4781,"context_line":"        result \u003d self.client.is_igroup_proximity_configured(igroup_uuid)"},{"line_number":4782,"context_line":""},{"line_number":4783,"context_line":"        self.assertFalse(result)"},{"line_number":4784,"context_line":""},{"line_number":4785,"context_line":"    @mock.patch.object(client_cmode_rest.RestClient, \u0027send_request\u0027)"},{"line_number":4786,"context_line":"    def test_is_igroup_proximity_configured_no_initiators("}],"source_content_type":"text/x-python","patch_set":6,"id":"c17f3658_188a3b3b","line":4783,"in_reply_to":"856c3a94_e1bfce99","updated":"2026-03-17 11:37:54.000000000","message":"Acknowledged","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":4791,"context_line":""},{"line_number":4792,"context_line":"        result \u003d self.client.is_igroup_proximity_configured(igroup_uuid)"},{"line_number":4793,"context_line":""},{"line_number":4794,"context_line":"        self.assertFalse(result)"},{"line_number":4795,"context_line":""},{"line_number":4796,"context_line":"    @mock.patch.object(client_cmode_rest.RestClient, \u0027send_request\u0027)"},{"line_number":4797,"context_line":"    def test_set_igroup_host_proximity_success(self, mock_send_request):"}],"source_content_type":"text/x-python","patch_set":6,"id":"4b3524f6_67e9c076","line":4794,"updated":"2026-03-13 00:59:10.000000000","message":"Should we do the assert_called_once_with() here as well?","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":4791,"context_line":""},{"line_number":4792,"context_line":"        result \u003d self.client.is_igroup_proximity_configured(igroup_uuid)"},{"line_number":4793,"context_line":""},{"line_number":4794,"context_line":"        self.assertFalse(result)"},{"line_number":4795,"context_line":""},{"line_number":4796,"context_line":"    @mock.patch.object(client_cmode_rest.RestClient, \u0027send_request\u0027)"},{"line_number":4797,"context_line":"    def test_set_igroup_host_proximity_success(self, mock_send_request):"}],"source_content_type":"text/x-python","patch_set":6,"id":"90dbd128_94f0bf41","line":4794,"in_reply_to":"4b3524f6_67e9c076","updated":"2026-03-17 11:37:54.000000000","message":"Acknowledged","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"}],"cinder/tests/unit/volume/drivers/netapp/dataontap/test_block_base.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":2292,"context_line":"            igroup_name, destination_svm)"},{"line_number":2293,"context_line":""},{"line_number":2294,"context_line":"        # Should not configure proximity since already configured"},{"line_number":2295,"context_line":"        # (no call to _configure_igroup_host_proximity)"},{"line_number":2296,"context_line":""},{"line_number":2297,"context_line":"    def test_ensure_igroup_host_proximity_not_afd_policy(self):"},{"line_number":2298,"context_line":"        \"\"\"Test that proximity is skipped for non-AFD policy.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"c19c419d_7ad11fbc","line":2295,"updated":"2026-03-13 00:59:10.000000000","message":"Should there be more to this test based on this comment?","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"347b1ef279327b08a15a8b1025d020d312bcb58c","unresolved":false,"context_lines":[{"line_number":2292,"context_line":"            igroup_name, destination_svm)"},{"line_number":2293,"context_line":""},{"line_number":2294,"context_line":"        # Should not configure proximity since already configured"},{"line_number":2295,"context_line":"        # (no call to _configure_igroup_host_proximity)"},{"line_number":2296,"context_line":""},{"line_number":2297,"context_line":"    def test_ensure_igroup_host_proximity_not_afd_policy(self):"},{"line_number":2298,"context_line":"        \"\"\"Test that proximity is skipped for non-AFD policy.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"c98a28dc_9ad2f3bd","line":2295,"in_reply_to":"c19c419d_7ad11fbc","updated":"2026-03-26 05:50:18.000000000","message":"Done","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"}],"cinder/volume/drivers/netapp/dataontap/block_base.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":446,"context_line":"        \"\"\"Maps LUN to the initiator(s) and returns LUN ID assigned.\"\"\""},{"line_number":447,"context_line":"        metadata \u003d self._get_lun_attr(name, \u0027metadata\u0027)"},{"line_number":448,"context_line":"        path \u003d metadata[\u0027Path\u0027]"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        igroup_name, ig_host_os, ig_type \u003d self._get_or_create_igroup("},{"line_number":451,"context_line":"            initiator_list, initiator_type, self.host_type)"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"876b0799_d12a0e25","line":449,"updated":"2026-02-20 18:40:37.000000000","message":"I know this might enhance readability, but you may want to consider not adding additional spaces without any other content to avoid merge headaches.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        \"\"\"Maps LUN to the initiator(s) and returns LUN ID assigned.\"\"\""},{"line_number":447,"context_line":"        metadata \u003d self._get_lun_attr(name, \u0027metadata\u0027)"},{"line_number":448,"context_line":"        path \u003d metadata[\u0027Path\u0027]"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        igroup_name, ig_host_os, ig_type \u003d self._get_or_create_igroup("},{"line_number":451,"context_line":"            initiator_list, initiator_type, self.host_type)"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9ff213e2_419a5a66","line":449,"in_reply_to":"876b0799_d12a0e25","updated":"2026-03-09 07:46:35.000000000","message":"Acknowledged","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":560,"context_line":"            igroup_name \u003d self._create_igroup_add_initiators("},{"line_number":561,"context_line":"                initiator_group_type, host_os_type, initiator_list)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"            # If active sync policy is used along with"},{"line_number":564,"context_line":"            # consistent replication (single CG per stanza)"},{"line_number":565,"context_line":"            # strategy, the igroup must be replicated."},{"line_number":566,"context_line":"            # Here we are considering a single destination svm"}],"source_content_type":"text/x-python","patch_set":3,"id":"92d4778f_a51e9da9","line":563,"updated":"2026-02-20 18:40:37.000000000","message":"I am not going to give a negative for this, but I feel like it would be more readable if this block was moved down below alongside the other ````_is_active_sync_configured```` block\n\ni.e. the below might be:\n````\nif self._is_active_sync_configured(self.configuration):\n   if self._is_consistency_replication_enabled(self.configuration):\n      # New block with consistent replication\n   else:\n      # Old block\n````\n\nI stared at this way too long trying to figure out what was going on.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[{"line_number":560,"context_line":"            igroup_name \u003d self._create_igroup_add_initiators("},{"line_number":561,"context_line":"                initiator_group_type, host_os_type, initiator_list)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"            # If active sync policy is used along with"},{"line_number":564,"context_line":"            # consistent replication (single CG per stanza)"},{"line_number":565,"context_line":"            # strategy, the igroup must be replicated."},{"line_number":566,"context_line":"            # Here we are considering a single destination svm"}],"source_content_type":"text/x-python","patch_set":3,"id":"7b55e817_7902f8cf","line":563,"in_reply_to":"92d4778f_a51e9da9","updated":"2026-03-09 07:46:35.000000000","message":"Thanks for checking this. We have reverted this change now as there are igroup replication issues with ONTAP. we will be using the older way of manually creation igroup in destination.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":472,"context_line":"                    # /vol/\u003cflexvol\u003e_dst/\u003clun\u003e for the destination."},{"line_number":473,"context_line":"                    path_parts \u003d path.split(\u0027/\u0027)"},{"line_number":474,"context_line":"                    # path format: /vol/\u003cflexvol_name\u003e/\u003clun_name\u003e"},{"line_number":475,"context_line":"                    path_parts[2] \u003d path_parts[2] + \u0027_dst\u0027"},{"line_number":476,"context_line":"                    dest_path \u003d \u0027/\u0027.join(path_parts)"},{"line_number":477,"context_line":"                self.dest_zapi_client.map_lun("},{"line_number":478,"context_line":"                    dest_path, igroup_name, lun_id\u003dlun_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"12437605_b0d30b90","line":475,"updated":"2026-03-13 00:59:10.000000000","message":"Would it be prudent to validate that the split contains 3 values so you can get a better error message if not?\n\nSee also my comment on line 510.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":472,"context_line":"                    # /vol/\u003cflexvol\u003e_dst/\u003clun\u003e for the destination."},{"line_number":473,"context_line":"                    path_parts \u003d path.split(\u0027/\u0027)"},{"line_number":474,"context_line":"                    # path format: /vol/\u003cflexvol_name\u003e/\u003clun_name\u003e"},{"line_number":475,"context_line":"                    path_parts[2] \u003d path_parts[2] + \u0027_dst\u0027"},{"line_number":476,"context_line":"                    dest_path \u003d \u0027/\u0027.join(path_parts)"},{"line_number":477,"context_line":"                self.dest_zapi_client.map_lun("},{"line_number":478,"context_line":"                    dest_path, igroup_name, lun_id\u003dlun_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"f8aab438_4e9f5939","line":475,"in_reply_to":"12437605_b0d30b90","updated":"2026-03-17 11:37:54.000000000","message":"I wont be required as its dependent on the ontap response format to return it accrurately.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":507,"context_line":"        for _path, _igroup_name in lun_unmap_list:"},{"line_number":508,"context_line":"            self.zapi_client.unmap_lun(_path, _igroup_name)"},{"line_number":509,"context_line":"            if self._is_active_sync_configured(self.configuration):"},{"line_number":510,"context_line":"                _dest_path \u003d _path"},{"line_number":511,"context_line":"                if self._is_consistent_replication_enabled("},{"line_number":512,"context_line":"                        self.configuration):"},{"line_number":513,"context_line":"                    # Transform path for destination: /vol/\u003cflexvol\u003e/\u003clun\u003e"}],"source_content_type":"text/x-python","patch_set":6,"id":"d3331518_09b81068","line":510,"updated":"2026-03-13 00:59:10.000000000","message":"This is very similar to the block starting on line 465 (around where my comment on the split values occurs).  Should it be extracted out to a method or function?","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":507,"context_line":"        for _path, _igroup_name in lun_unmap_list:"},{"line_number":508,"context_line":"            self.zapi_client.unmap_lun(_path, _igroup_name)"},{"line_number":509,"context_line":"            if self._is_active_sync_configured(self.configuration):"},{"line_number":510,"context_line":"                _dest_path \u003d _path"},{"line_number":511,"context_line":"                if self._is_consistent_replication_enabled("},{"line_number":512,"context_line":"                        self.configuration):"},{"line_number":513,"context_line":"                    # Transform path for destination: /vol/\u003cflexvol\u003e/\u003clun\u003e"}],"source_content_type":"text/x-python","patch_set":6,"id":"0c58bfbb_f0f78884","line":510,"in_reply_to":"d3331518_09b81068","updated":"2026-03-17 11:37:54.000000000","message":"Would it be alright if we can take this up in next PR.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":1280,"context_line":"        automatic failover for active-active metro cluster configurations."},{"line_number":1281,"context_line":"        \"\"\""},{"line_number":1282,"context_line":"        replication_policy \u003d config.safe_get(\u0027netapp_replication_policy\u0027)"},{"line_number":1283,"context_line":"        return replication_policy \u003d\u003d \u0027AutomatedFailOverDuplex\u0027"},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"    def _ensure_igroup_host_proximity(self, igroup_name, destination_svm):"},{"line_number":1286,"context_line":"        \"\"\"Ensure host proximity is configured on igroup for AFD policy."}],"source_content_type":"text/x-python","patch_set":6,"id":"8675910a_a935f7eb","line":1283,"updated":"2026-03-13 00:59:10.000000000","message":"I think you created some constants for this elsewhere?","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":1280,"context_line":"        automatic failover for active-active metro cluster configurations."},{"line_number":1281,"context_line":"        \"\"\""},{"line_number":1282,"context_line":"        replication_policy \u003d config.safe_get(\u0027netapp_replication_policy\u0027)"},{"line_number":1283,"context_line":"        return replication_policy \u003d\u003d \u0027AutomatedFailOverDuplex\u0027"},{"line_number":1284,"context_line":""},{"line_number":1285,"context_line":"    def _ensure_igroup_host_proximity(self, igroup_name, destination_svm):"},{"line_number":1286,"context_line":"        \"\"\"Ensure host proximity is configured on igroup for AFD policy."}],"source_content_type":"text/x-python","patch_set":6,"id":"661d0eea_cf660d59","line":1283,"in_reply_to":"8675910a_a935f7eb","updated":"2026-03-17 11:37:54.000000000","message":"Acknowledged","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"18d902a074d0b53c1c830dc65d86eb9cd4f19b67","unresolved":true,"context_lines":[{"line_number":481,"context_line":"                    # /vol/\u003cflexvol\u003e_dst/\u003clun\u003e for the destination."},{"line_number":482,"context_line":"                    path_parts \u003d path.split(\u0027/\u0027)"},{"line_number":483,"context_line":"                    # path format: /vol/\u003cflexvol_name\u003e/\u003clun_name\u003e"},{"line_number":484,"context_line":"                    path_parts[2] \u003d path_parts[2] + \u0027_dst\u0027"},{"line_number":485,"context_line":"                    dest_path \u003d \u0027/\u0027.join(path_parts)"},{"line_number":486,"context_line":"                self.dest_zapi_client.map_lun("},{"line_number":487,"context_line":"                    dest_path, igroup_name, lun_id\u003dlun_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"281dd7b3_668d3691","line":484,"range":{"start_line":484,"start_character":52,"end_line":484,"end_character":58},"updated":"2026-04-30 07:53:35.000000000","message":"Why not use na_utils.REPLICATED_VOLUME_SUFFIX and avoid hardcoding constants?\nThis might cause problems in future with code maintainability.","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"18d902a074d0b53c1c830dc65d86eb9cd4f19b67","unresolved":true,"context_lines":[{"line_number":522,"context_line":"                    # Transform path for destination: /vol/\u003cflexvol\u003e/\u003clun\u003e"},{"line_number":523,"context_line":"                    # becomes /vol/\u003cflexvol\u003e_dst/\u003clun\u003e"},{"line_number":524,"context_line":"                    _path_parts \u003d _path.split(\u0027/\u0027)"},{"line_number":525,"context_line":"                    _path_parts[2] \u003d _path_parts[2] + \u0027_dst\u0027"},{"line_number":526,"context_line":"                    _dest_path \u003d \u0027/\u0027.join(_path_parts)"},{"line_number":527,"context_line":"                self.dest_zapi_client.unmap_lun(_dest_path, _igroup_name)"},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"40f4ba35_b49352b3","line":525,"range":{"start_line":525,"start_character":54,"end_line":525,"end_character":60},"updated":"2026-04-30 07:53:35.000000000","message":"same","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"}],"cinder/volume/drivers/netapp/dataontap/client/client_cmode_rest.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":2211,"context_line":"        relationship_type will be ignored because XDP is the only type"},{"line_number":2212,"context_line":"        supported through REST API."},{"line_number":2213,"context_line":"        \"\"\""},{"line_number":2214,"context_line":""},{"line_number":2215,"context_line":"        if source_cg is not None:"},{"line_number":2216,"context_line":"            body \u003d {"},{"line_number":2217,"context_line":"                \u0027source\u0027: {"}],"source_content_type":"text/x-python","patch_set":3,"id":"0ef07333_d6881c46","line":2214,"updated":"2026-02-20 18:40:37.000000000","message":"I\u0027m wondering if this should be avoided to stop merge issues.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":true,"context_lines":[{"line_number":2211,"context_line":"        relationship_type will be ignored because XDP is the only type"},{"line_number":2212,"context_line":"        supported through REST API."},{"line_number":2213,"context_line":"        \"\"\""},{"line_number":2214,"context_line":""},{"line_number":2215,"context_line":"        if source_cg is not None:"},{"line_number":2216,"context_line":"            body \u003d {"},{"line_number":2217,"context_line":"                \u0027source\u0027: {"}],"source_content_type":"text/x-python","patch_set":3,"id":"10183894_23f0ac87","line":2214,"in_reply_to":"0ef07333_d6881c46","updated":"2026-03-09 07:46:35.000000000","message":"hi @anthony.galica@hitachivantara.com I did not understand the merge issues part here.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":2211,"context_line":"        relationship_type will be ignored because XDP is the only type"},{"line_number":2212,"context_line":"        supported through REST API."},{"line_number":2213,"context_line":"        \"\"\""},{"line_number":2214,"context_line":""},{"line_number":2215,"context_line":"        if source_cg is not None:"},{"line_number":2216,"context_line":"            body \u003d {"},{"line_number":2217,"context_line":"                \u0027source\u0027: {"}],"source_content_type":"text/x-python","patch_set":3,"id":"a223edcf_28a3fb34","line":2214,"in_reply_to":"10183894_23f0ac87","updated":"2026-03-10 06:58:14.000000000","message":"Acknowledged","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":false,"context_lines":[{"line_number":2211,"context_line":"        relationship_type will be ignored because XDP is the only type"},{"line_number":2212,"context_line":"        supported through REST API."},{"line_number":2213,"context_line":"        \"\"\""},{"line_number":2214,"context_line":""},{"line_number":2215,"context_line":"        if source_cg is not None:"},{"line_number":2216,"context_line":"            body \u003d {"},{"line_number":2217,"context_line":"                \u0027source\u0027: {"}],"source_content_type":"text/x-python","patch_set":3,"id":"af557acf_7cbe3e35","line":2214,"in_reply_to":"a223edcf_28a3fb34","updated":"2026-03-13 00:59:10.000000000","message":"Looking at the diff, I don\u0027t either any longer!  However, I would have mentioned merge issues if there was a blank newline submitted in the patch as that can cause chaos with merging (the difference between having to do it by hand and it happening automatically).  So, either they were removed in a newer patch set, or a rebase or something.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":2239,"context_line":"            body[\u0027policy\u0027] \u003d {\u0027name\u0027: policy}"},{"line_number":2240,"context_line":""},{"line_number":2241,"context_line":"        try:"},{"line_number":2242,"context_line":"            self.send_request("},{"line_number":2243,"context_line":"                \u0027/snapmirror/relationships/\u0027, \u0027post\u0027, body\u003dbody)"},{"line_number":2244,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2245,"context_line":"            if e.code !\u003d netapp_api.REST_ERELATION_EXISTS:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fd17bee_a2d50c3c","line":2242,"updated":"2026-02-20 18:40:37.000000000","message":"I\u0027m wondering if this should be avoided to stop merge issues.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":true,"context_lines":[{"line_number":2239,"context_line":"            body[\u0027policy\u0027] \u003d {\u0027name\u0027: policy}"},{"line_number":2240,"context_line":""},{"line_number":2241,"context_line":"        try:"},{"line_number":2242,"context_line":"            self.send_request("},{"line_number":2243,"context_line":"                \u0027/snapmirror/relationships/\u0027, \u0027post\u0027, body\u003dbody)"},{"line_number":2244,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2245,"context_line":"            if e.code !\u003d netapp_api.REST_ERELATION_EXISTS:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bce17022_69e4eba4","line":2242,"in_reply_to":"1fd17bee_a2d50c3c","updated":"2026-03-09 07:46:35.000000000","message":"hi @anthony.galica@hitachivantara.com I did not understand the merge issues part here.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":2239,"context_line":"            body[\u0027policy\u0027] \u003d {\u0027name\u0027: policy}"},{"line_number":2240,"context_line":""},{"line_number":2241,"context_line":"        try:"},{"line_number":2242,"context_line":"            self.send_request("},{"line_number":2243,"context_line":"                \u0027/snapmirror/relationships/\u0027, \u0027post\u0027, body\u003dbody)"},{"line_number":2244,"context_line":"        except netapp_api.NaApiError as e:"},{"line_number":2245,"context_line":"            if e.code !\u003d netapp_api.REST_ERELATION_EXISTS:"}],"source_content_type":"text/x-python","patch_set":3,"id":"2bcb6bf5_e7eafc54","line":2242,"in_reply_to":"bce17022_69e4eba4","updated":"2026-03-10 06:58:14.000000000","message":"Acknowledged","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":2639,"context_line":"        if vserver_name:"},{"line_number":2640,"context_line":"            query[\u0027svm.name\u0027] \u003d vserver_name"},{"line_number":2641,"context_line":""},{"line_number":2642,"context_line":"        response \u003d self.send_request(\u0027/svm/peers\u0027, \u0027get\u0027,"},{"line_number":2643,"context_line":"                                     query\u003dquery,"},{"line_number":2644,"context_line":"                                     enable_tunneling\u003dFalse)"},{"line_number":2645,"context_line":"        records \u003d response.get(\u0027records\u0027, [])"}],"source_content_type":"text/x-python","patch_set":3,"id":"2adcc3b4_f3ffed10","line":2642,"updated":"2026-02-20 18:40:37.000000000","message":"Wondering about merge issues again.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":true,"context_lines":[{"line_number":2639,"context_line":"        if vserver_name:"},{"line_number":2640,"context_line":"            query[\u0027svm.name\u0027] \u003d vserver_name"},{"line_number":2641,"context_line":""},{"line_number":2642,"context_line":"        response \u003d self.send_request(\u0027/svm/peers\u0027, \u0027get\u0027,"},{"line_number":2643,"context_line":"                                     query\u003dquery,"},{"line_number":2644,"context_line":"                                     enable_tunneling\u003dFalse)"},{"line_number":2645,"context_line":"        records \u003d response.get(\u0027records\u0027, [])"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f9988de_32cb9081","line":2642,"in_reply_to":"2adcc3b4_f3ffed10","updated":"2026-03-09 07:46:35.000000000","message":"hi @anthony.galica@hitachivantara.com I did not understand the merge issues part here.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":2639,"context_line":"        if vserver_name:"},{"line_number":2640,"context_line":"            query[\u0027svm.name\u0027] \u003d vserver_name"},{"line_number":2641,"context_line":""},{"line_number":2642,"context_line":"        response \u003d self.send_request(\u0027/svm/peers\u0027, \u0027get\u0027,"},{"line_number":2643,"context_line":"                                     query\u003dquery,"},{"line_number":2644,"context_line":"                                     enable_tunneling\u003dFalse)"},{"line_number":2645,"context_line":"        records \u003d response.get(\u0027records\u0027, [])"}],"source_content_type":"text/x-python","patch_set":3,"id":"a0b042c8_6ed9b4c4","line":2642,"in_reply_to":"5f9988de_32cb9081","updated":"2026-03-10 06:58:14.000000000","message":"Acknowledged","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":3195,"context_line":"        \"\"\"Gets consistency group info for one or more flexvols.\"\"\""},{"line_number":3196,"context_line":"        query \u003d {"},{"line_number":3197,"context_line":"            \u0027svm.name\u0027: self.vserver,"},{"line_number":3198,"context_line":"            \u0027name\u0027: \u0027,\u0027.join(flexvol_names) if isinstance(flexvol_names, list)"},{"line_number":3199,"context_line":"            else flexvol_names,"},{"line_number":3200,"context_line":"            \u0027fields\u0027: \u0027consistency_group\u0027"},{"line_number":3201,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"a0a08422_5503ae0c","line":3198,"range":{"start_line":3198,"start_character":29,"end_line":3198,"end_character":42},"updated":"2026-02-24 21:21:00.000000000","message":"are we certain that this is going to be one of the two types (list, str) otherwise we might be sending a bad object","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[{"line_number":3195,"context_line":"        \"\"\"Gets consistency group info for one or more flexvols.\"\"\""},{"line_number":3196,"context_line":"        query \u003d {"},{"line_number":3197,"context_line":"            \u0027svm.name\u0027: self.vserver,"},{"line_number":3198,"context_line":"            \u0027name\u0027: \u0027,\u0027.join(flexvol_names) if isinstance(flexvol_names, list)"},{"line_number":3199,"context_line":"            else flexvol_names,"},{"line_number":3200,"context_line":"            \u0027fields\u0027: \u0027consistency_group\u0027"},{"line_number":3201,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":3,"id":"2115f08e_30b79133","line":3198,"range":{"start_line":3198,"start_character":29,"end_line":3198,"end_character":42},"in_reply_to":"a0a08422_5503ae0c","updated":"2026-03-09 07:46:35.000000000","message":"yes hence we are handling both the cases from the caller.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"18d902a074d0b53c1c830dc65d86eb9cd4f19b67","unresolved":true,"context_lines":[{"line_number":2254,"context_line":"            replication_policy\u003dNone):"},{"line_number":2255,"context_line":"        \"\"\"Creates a SnapMirror relationship for a consistency group (CG).\"\"\""},{"line_number":2256,"context_line":""},{"line_number":2257,"context_line":"        LOG.debug(\"Creating SnapMirror for CG using REST API\")"},{"line_number":2258,"context_line":"        LOG.debug(\"source_cg: %s\", source_cg_name)"},{"line_number":2259,"context_line":"        LOG.debug(\"destination_cg: %s\", destination_cg_name)"},{"line_number":2260,"context_line":""},{"line_number":2261,"context_line":"        # flexvols is expected to be a list of source FlexVol names"},{"line_number":2262,"context_line":"        # Destination FlexVols are created with _dst suffix"}],"source_content_type":"text/x-python","patch_set":10,"id":"8e2e68db_2d011e5a","line":2259,"range":{"start_line":2257,"start_character":0,"end_line":2259,"end_character":60},"updated":"2026-04-30 07:53:35.000000000","message":"nit: why don\u0027t we put all of them in one LOG message?","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"}],"cinder/volume/drivers/netapp/dataontap/utils/capabilities.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":169,"context_line":"    def _update_for_failover(self, zapi_client, flexvol_map):"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        self.zapi_client \u003d zapi_client"},{"line_number":172,"context_line":"        self.vserver_name \u003d zapi_client.vserver"},{"line_number":173,"context_line":"        self.update_ssc(flexvol_map)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _get_ssc_flexvol_info(self, flexvol_name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"8a4b9062_5e208bcb","line":172,"updated":"2026-03-13 00:59:10.000000000","message":"I am wondering if this is redundant and if zapi_client.vserver should be used instead by anyone needing it.  Obviously, this comment can be ignored if these two values are allowed to get out of sync by code that I am not reviewing.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    def _update_for_failover(self, zapi_client, flexvol_map):"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        self.zapi_client \u003d zapi_client"},{"line_number":172,"context_line":"        self.vserver_name \u003d zapi_client.vserver"},{"line_number":173,"context_line":"        self.update_ssc(flexvol_map)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _get_ssc_flexvol_info(self, flexvol_name):"}],"source_content_type":"text/x-python","patch_set":6,"id":"e02d6a86_4c89ed29","line":172,"in_reply_to":"8a4b9062_5e208bcb","updated":"2026-03-17 11:37:54.000000000","message":"This is needed to refresh the vserver name when the failover happens.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"}],"cinder/volume/drivers/netapp/dataontap/utils/data_motion.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        return \"AutomatedFailOver\" in replication_policy"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def is_automated_failover_policy(self, snapmirror_policy):"},{"line_number":110,"context_line":"        if (snapmirror_policy.get(\u0027type\u0027) in \u0027sync\u0027 and"},{"line_number":111,"context_line":"                snapmirror_policy.get(\u0027sync_type\u0027) in \u0027automated_failover\u0027):"},{"line_number":112,"context_line":"            return True"},{"line_number":113,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"7c905941_c3657def","line":110,"updated":"2026-02-20 18:40:37.000000000","message":"It\u0027s possible I don\u0027t fully understand what this is doing, but shouldn\u0027t these two \u0027in\u0027 statements have opposite operands?\n\nFor example, if ````snapmirror_policy.get(\u0027type\u0027)```` returns \u0027c\u0027, wouldn\u0027t the first condition be met?  Maybe that\u0027s the intent here, but it seems to me you\u0027re wanting to find ````\u0027sync\u0027```` or ````\u0027automated_failover\u0027```` instead of just a substring or character within those hard-coded strings.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        return \"AutomatedFailOver\" in replication_policy"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def is_automated_failover_policy(self, snapmirror_policy):"},{"line_number":110,"context_line":"        if (snapmirror_policy.get(\u0027type\u0027) in \u0027sync\u0027 and"},{"line_number":111,"context_line":"                snapmirror_policy.get(\u0027sync_type\u0027) in \u0027automated_failover\u0027):"},{"line_number":112,"context_line":"            return True"},{"line_number":113,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"ee42dacb_03ef84ae","line":110,"in_reply_to":"7c905941_c3657def","updated":"2026-02-24 21:21:00.000000000","message":"The main issue here is the type of object we are using with the \u0027in\u0027 operator.\nWe should ideally be using a tuple here instead of a string so the condition should be written as:\n\n    if (snapmirror_policy.get(\u0027type\u0027) in (\u0027sync\u0027,) and\n        snapmirror_policy.get(\u0027sync_type\u0027) in (\u0027automated_failover\u0027,)):\n        \nNOTE that the extra comma is necessary otherwise (\u0027sync\u0027) is still treated as a string rather than a tuple\n\n    \u003e\u003e\u003e type((\u0027sync\u0027))\n    \u003cclass \u0027str\u0027\u003e\n    \u003e\u003e\u003e type((\u0027sync\u0027,))\n    \u003cclass \u0027tuple\u0027\u003e","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        return \"AutomatedFailOver\" in replication_policy"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def is_automated_failover_policy(self, snapmirror_policy):"},{"line_number":110,"context_line":"        if (snapmirror_policy.get(\u0027type\u0027) in \u0027sync\u0027 and"},{"line_number":111,"context_line":"                snapmirror_policy.get(\u0027sync_type\u0027) in \u0027automated_failover\u0027):"},{"line_number":112,"context_line":"            return True"},{"line_number":113,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"7c90230c_6c0708ca","line":110,"in_reply_to":"ee42dacb_03ef84ae","updated":"2026-03-10 06:58:14.000000000","message":"Done","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def is_automated_failover_policy(self, snapmirror_policy):"},{"line_number":110,"context_line":"        if (snapmirror_policy.get(\u0027type\u0027) in \u0027sync\u0027 and"},{"line_number":111,"context_line":"                snapmirror_policy.get(\u0027sync_type\u0027) in \u0027automated_failover\u0027):"},{"line_number":112,"context_line":"            return True"},{"line_number":113,"context_line":"        return False"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"95471ff6_9f2aca5d","line":111,"range":{"start_line":111,"start_character":55,"end_line":111,"end_character":73},"updated":"2026-02-24 21:21:00.000000000","message":"nit: \u0027sync\u0027 and \u0027automated_failover\u0027 should ideally be constants","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def is_automated_failover_policy(self, snapmirror_policy):"},{"line_number":110,"context_line":"        if (snapmirror_policy.get(\u0027type\u0027) in \u0027sync\u0027 and"},{"line_number":111,"context_line":"                snapmirror_policy.get(\u0027sync_type\u0027) in \u0027automated_failover\u0027):"},{"line_number":112,"context_line":"            return True"},{"line_number":113,"context_line":"        return False"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fd0015e6_73ff7f08","line":111,"range":{"start_line":111,"start_character":55,"end_line":111,"end_character":73},"in_reply_to":"95471ff6_9f2aca5d","updated":"2026-03-10 06:58:14.000000000","message":"Done","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":171,"context_line":"                   snapmirror_policy_name)"},{"line_number":172,"context_line":"            raise na_utils.NetAppDriverException(message\u003dmsg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        return snapmirror_policy[0]"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def create_snapmirror(self, src_backend_name, dest_backend_name,"},{"line_number":177,"context_line":"                          src_flexvol_name, dest_flexvol_name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"c330fe62_83f710d5","line":174,"updated":"2026-02-20 18:40:37.000000000","message":"Guaranteed to only return 1 at this time?  Or is the first one most important?","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                   snapmirror_policy_name)"},{"line_number":172,"context_line":"            raise na_utils.NetAppDriverException(message\u003dmsg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        return snapmirror_policy[0]"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def create_snapmirror(self, src_backend_name, dest_backend_name,"},{"line_number":177,"context_line":"                          src_flexvol_name, dest_flexvol_name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ca71da26_8ca7807e","line":174,"in_reply_to":"c330fe62_83f710d5","updated":"2026-03-09 07:46:35.000000000","message":"Yes this is guaranteed to return only 1 object. Get API returns a list of records here even if we use a name filtering.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":225,"context_line":"            else None"},{"line_number":226,"context_line":"        dest_cg \u003d \"cg_\" + dest_flexvol_name if active_sync_asymmetric_policy \\"},{"line_number":227,"context_line":"            else None"},{"line_number":228,"context_line":"        src_cg_path \u003d \"/cg/\" + str(src_cg)"},{"line_number":229,"context_line":"        dest_cg_path \u003d \"/cg/\" + str(dest_cg)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # 2. Check if SnapMirror relationship exists"}],"source_content_type":"text/x-python","patch_set":3,"id":"b6c7e64f_cb938e3c","line":228,"updated":"2026-02-20 18:40:37.000000000","message":"Same question as in my other review:  Do you really want the name to be \"/cg/None\" here if src_cg or dest_cg are None?","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"e970eb79c017a7b65e9d23ca368e3a9b4ec506f7","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            else None"},{"line_number":226,"context_line":"        dest_cg \u003d \"cg_\" + dest_flexvol_name if active_sync_asymmetric_policy \\"},{"line_number":227,"context_line":"            else None"},{"line_number":228,"context_line":"        src_cg_path \u003d \"/cg/\" + str(src_cg)"},{"line_number":229,"context_line":"        dest_cg_path \u003d \"/cg/\" + str(dest_cg)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # 2. Check if SnapMirror relationship exists"}],"source_content_type":"text/x-python","patch_set":3,"id":"c313c46a_9654c85c","line":228,"in_reply_to":"b6c7e64f_cb938e3c","updated":"2026-02-20 18:51:15.000000000","message":"Resolving this thread as I got a satisfactory answer in https://review.opendev.org/c/openstack/cinder/+/973908.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":413,"context_line":"            )"},{"line_number":414,"context_line":"            snapmirror \u003d existing_mirrors[0]"},{"line_number":415,"context_line":"            # If existing transfer is ongoing, do not interfere."},{"line_number":416,"context_line":"            if snapmirror.get(\u0027mirror-state\u0027) !\u003d \u0027snapmirrored\u0027 and \\"},{"line_number":417,"context_line":"                    snapmirror.get(\u0027mirror-state\u0027) !\u003d \u0027in_sync\u0027 and \\"},{"line_number":418,"context_line":"                    snapmirror.get(\u0027mirror-state\u0027) !\u003d \u0027transferring\u0027:"},{"line_number":419,"context_line":"                try:"},{"line_number":420,"context_line":"                    msg \u003d (\"SnapMirror between %(src_vserver)s:%(src_cg)s \""},{"line_number":421,"context_line":"                           \"and %(dest_vserver)s:%(dest_cg)s is in \""}],"source_content_type":"text/x-python","patch_set":3,"id":"0d400256_89dc8bcd","line":418,"range":{"start_line":416,"start_character":12,"end_line":418,"end_character":69},"updated":"2026-02-24 21:21:00.000000000","message":"nit: a better way to write this would be\n\n    if snapmirror.get(\u0027mirror-state\u0027) not in (\u0027snapmirrored\u0027, \u0027in_sync\u0027, \u0027transferring\u0027):","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            )"},{"line_number":414,"context_line":"            snapmirror \u003d existing_mirrors[0]"},{"line_number":415,"context_line":"            # If existing transfer is ongoing, do not interfere."},{"line_number":416,"context_line":"            if snapmirror.get(\u0027mirror-state\u0027) !\u003d \u0027snapmirrored\u0027 and \\"},{"line_number":417,"context_line":"                    snapmirror.get(\u0027mirror-state\u0027) !\u003d \u0027in_sync\u0027 and \\"},{"line_number":418,"context_line":"                    snapmirror.get(\u0027mirror-state\u0027) !\u003d \u0027transferring\u0027:"},{"line_number":419,"context_line":"                try:"},{"line_number":420,"context_line":"                    msg \u003d (\"SnapMirror between %(src_vserver)s:%(src_cg)s \""},{"line_number":421,"context_line":"                           \"and %(dest_vserver)s:%(dest_cg)s is in \""}],"source_content_type":"text/x-python","patch_set":3,"id":"02cb48fb_4f148023","line":418,"range":{"start_line":416,"start_character":12,"end_line":418,"end_character":69},"in_reply_to":"0d400256_89dc8bcd","updated":"2026-03-10 06:58:14.000000000","message":"Done","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def _get_create_snapmirror_for_cg_client(self, dest_client,"},{"line_number":438,"context_line":"                                             storage_object_type):"},{"line_number":439,"context_line":"        if storage_object_type \u003d\u003d na_utils.StorageObjectType.VOLUME:"},{"line_number":440,"context_line":"            return dest_client.create_snapmirror_for_cg_with_flexvols"},{"line_number":441,"context_line":"        else:"},{"line_number":442,"context_line":"            raise na_utils.NetAppDriverException("}],"source_content_type":"text/x-python","patch_set":3,"id":"fdd66867_8c470a17","line":439,"range":{"start_line":439,"start_character":0,"end_line":439,"end_character":68},"updated":"2026-02-24 21:21:00.000000000","message":"Does \u0027volume\u0027 refer to a flexvol here? Not sure how any other storage_object_type could propogate to here given the ONLY called to this method uses the \u0027volume\u0027 type\nhttps://review.opendev.org/c/openstack/cinder/+/975880/3/cinder/volume/drivers/netapp/dataontap/block_cmode.py#199","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def _get_create_snapmirror_for_cg_client(self, dest_client,"},{"line_number":438,"context_line":"                                             storage_object_type):"},{"line_number":439,"context_line":"        if storage_object_type \u003d\u003d na_utils.StorageObjectType.VOLUME:"},{"line_number":440,"context_line":"            return dest_client.create_snapmirror_for_cg_with_flexvols"},{"line_number":441,"context_line":"        else:"},{"line_number":442,"context_line":"            raise na_utils.NetAppDriverException("}],"source_content_type":"text/x-python","patch_set":3,"id":"0ef36b80_6b90388b","line":439,"range":{"start_line":439,"start_character":0,"end_line":439,"end_character":68},"in_reply_to":"fdd66867_8c470a17","updated":"2026-03-09 07:46:35.000000000","message":"This is to future proof Replication on ASAr2 platform where, the consistency group protects LUNs instead of VOLUMES. When we implement it, the create snapmirror function create_snapmirror_for_cg_with_luns will be returned.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":1086,"context_line":"            if src_client:"},{"line_number":1087,"context_line":"                cg_info \u003d src_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1088,"context_line":"            else:"},{"line_number":1089,"context_line":"                cg_info \u003d dst_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1090,"context_line":"            cg_name \u003d cg_info[0].get(\u0027cg_name\u0027)"},{"line_number":1091,"context_line":"        else:"},{"line_number":1092,"context_line":"            LOG.error(\"ASAr2 platform is not supported for replication\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3e6c0922_c4727333","line":1089,"updated":"2026-02-20 18:40:37.000000000","message":"Guessing that all vols will have the same data as the first one in terms of what you need?","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"            if src_client:"},{"line_number":1087,"context_line":"                cg_info \u003d src_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1088,"context_line":"            else:"},{"line_number":1089,"context_line":"                cg_info \u003d dst_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1090,"context_line":"            cg_name \u003d cg_info[0].get(\u0027cg_name\u0027)"},{"line_number":1091,"context_line":"        else:"},{"line_number":1092,"context_line":"            LOG.error(\"ASAr2 platform is not supported for replication\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"d3c6c82b_c9fd169a","line":1089,"in_reply_to":"3e6c0922_c4727333","updated":"2026-03-09 07:46:35.000000000","message":"thats correct. as per the initialiation they will all be part of same CG.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":1089,"context_line":"                cg_info \u003d dst_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1090,"context_line":"            cg_name \u003d cg_info[0].get(\u0027cg_name\u0027)"},{"line_number":1091,"context_line":"        else:"},{"line_number":1092,"context_line":"            LOG.error(\"ASAr2 platform is not supported for replication\")"},{"line_number":1093,"context_line":"            raise na_utils.NetAppDriverException(\"ASAr2 platform is not \""},{"line_number":1094,"context_line":"                                                 \"supported for replication\")"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        if src_client:"},{"line_number":1097,"context_line":"            # This is a planned failover as the source is reachable"}],"source_content_type":"text/x-python","patch_set":3,"id":"796b82ac_38d784c1","line":1094,"range":{"start_line":1092,"start_character":12,"end_line":1094,"end_character":77},"updated":"2026-02-24 21:21:00.000000000","message":"nit: since both messages contain the same string, better to rewrite this as\n\n\n    msg \u003d \"ASAr2 platform is not supported for replication\"\n    LOG.error(msg)\n    raise na_utils.NetAppDriverException(msg)","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":1089,"context_line":"                cg_info \u003d dst_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1090,"context_line":"            cg_name \u003d cg_info[0].get(\u0027cg_name\u0027)"},{"line_number":1091,"context_line":"        else:"},{"line_number":1092,"context_line":"            LOG.error(\"ASAr2 platform is not supported for replication\")"},{"line_number":1093,"context_line":"            raise na_utils.NetAppDriverException(\"ASAr2 platform is not \""},{"line_number":1094,"context_line":"                                                 \"supported for replication\")"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        if src_client:"},{"line_number":1097,"context_line":"            # This is a planned failover as the source is reachable"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a048f2b_10f48d98","line":1094,"range":{"start_line":1092,"start_character":12,"end_line":1094,"end_character":77},"in_reply_to":"06090291_43c24d9d","updated":"2026-03-13 00:59:10.000000000","message":"It looks like the change here either mistakenly didn\u0027t get submitted, or it got overwritten in a later patch set (if you did mean to make the change).","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"                cg_info \u003d dst_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1090,"context_line":"            cg_name \u003d cg_info[0].get(\u0027cg_name\u0027)"},{"line_number":1091,"context_line":"        else:"},{"line_number":1092,"context_line":"            LOG.error(\"ASAr2 platform is not supported for replication\")"},{"line_number":1093,"context_line":"            raise na_utils.NetAppDriverException(\"ASAr2 platform is not \""},{"line_number":1094,"context_line":"                                                 \"supported for replication\")"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        if src_client:"},{"line_number":1097,"context_line":"            # This is a planned failover as the source is reachable"}],"source_content_type":"text/x-python","patch_set":3,"id":"92b2cddb_13adbba0","line":1094,"range":{"start_line":1092,"start_character":12,"end_line":1094,"end_character":77},"in_reply_to":"1a048f2b_10f48d98","updated":"2026-03-17 11:37:54.000000000","message":"Acknowledged. Will take up in next PR.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"                cg_info \u003d dst_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1090,"context_line":"            cg_name \u003d cg_info[0].get(\u0027cg_name\u0027)"},{"line_number":1091,"context_line":"        else:"},{"line_number":1092,"context_line":"            LOG.error(\"ASAr2 platform is not supported for replication\")"},{"line_number":1093,"context_line":"            raise na_utils.NetAppDriverException(\"ASAr2 platform is not \""},{"line_number":1094,"context_line":"                                                 \"supported for replication\")"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        if src_client:"},{"line_number":1097,"context_line":"            # This is a planned failover as the source is reachable"}],"source_content_type":"text/x-python","patch_set":3,"id":"06090291_43c24d9d","line":1094,"range":{"start_line":1092,"start_character":12,"end_line":1094,"end_character":77},"in_reply_to":"796b82ac_38d784c1","updated":"2026-03-10 06:58:14.000000000","message":"Done","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"18d902a074d0b53c1c830dc65d86eb9cd4f19b67","unresolved":true,"context_lines":[{"line_number":1089,"context_line":"                cg_info \u003d dst_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1090,"context_line":"            cg_name \u003d cg_info[0].get(\u0027cg_name\u0027)"},{"line_number":1091,"context_line":"        else:"},{"line_number":1092,"context_line":"            LOG.error(\"ASAr2 platform is not supported for replication\")"},{"line_number":1093,"context_line":"            raise na_utils.NetAppDriverException(\"ASAr2 platform is not \""},{"line_number":1094,"context_line":"                                                 \"supported for replication\")"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        if src_client:"},{"line_number":1097,"context_line":"            # This is a planned failover as the source is reachable"}],"source_content_type":"text/x-python","patch_set":3,"id":"e7a6b6e9_ebd00f45","line":1094,"range":{"start_line":1092,"start_character":12,"end_line":1094,"end_character":77},"in_reply_to":"92b2cddb_13adbba0","updated":"2026-04-30 07:53:35.000000000","message":"This is still not addressed ...","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":1154,"context_line":"                                       secondary_backend_name, volumes):"},{"line_number":1155,"context_line":"        LOG.debug(\u0027data_motion::_complete_failback_active_sync started\u0027)"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        if primary_backend_name:"},{"line_number":1158,"context_line":"            msg \u003d _(\"Primary backend to which the replication will be \""},{"line_number":1159,"context_line":"                    \"failed back to is required.\")"},{"line_number":1160,"context_line":"            raise na_utils.NetAppDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"42f2ccfd_81f5e7c5","line":1157,"updated":"2026-02-20 18:40:37.000000000","message":"Shouldn\u0027t this check be the opposite (````if not primary_backend_name:````)?","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[{"line_number":1154,"context_line":"                                       secondary_backend_name, volumes):"},{"line_number":1155,"context_line":"        LOG.debug(\u0027data_motion::_complete_failback_active_sync started\u0027)"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        if primary_backend_name:"},{"line_number":1158,"context_line":"            msg \u003d _(\"Primary backend to which the replication will be \""},{"line_number":1159,"context_line":"                    \"failed back to is required.\")"},{"line_number":1160,"context_line":"            raise na_utils.NetAppDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5377ea8e_93572d71","line":1157,"in_reply_to":"42f2ccfd_81f5e7c5","updated":"2026-03-09 07:46:35.000000000","message":"Excellent catch. Updated.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":1154,"context_line":"                                       secondary_backend_name, volumes):"},{"line_number":1155,"context_line":"        LOG.debug(\u0027data_motion::_complete_failback_active_sync started\u0027)"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        if primary_backend_name:"},{"line_number":1158,"context_line":"            msg \u003d _(\"Primary backend to which the replication will be \""},{"line_number":1159,"context_line":"                    \"failed back to is required.\")"},{"line_number":1160,"context_line":"            raise na_utils.NetAppDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"78940487_5daeedfd","line":1157,"in_reply_to":"5377ea8e_93572d71","updated":"2026-03-13 00:59:10.000000000","message":"I do wonder if you should just use ```if not``` in case ```primary_backend_name``` or ```secondary_backend_name``` (in resolved comment) are empty instead of actually None.  Something to consider.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":1154,"context_line":"                                       secondary_backend_name, volumes):"},{"line_number":1155,"context_line":"        LOG.debug(\u0027data_motion::_complete_failback_active_sync started\u0027)"},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        if primary_backend_name:"},{"line_number":1158,"context_line":"            msg \u003d _(\"Primary backend to which the replication will be \""},{"line_number":1159,"context_line":"                    \"failed back to is required.\")"},{"line_number":1160,"context_line":"            raise na_utils.NetAppDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"8f3bf8bf_95419ecd","line":1157,"in_reply_to":"78940487_5daeedfd","updated":"2026-03-17 11:37:54.000000000","message":"This is just a safety check if the backends are not passed.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":1159,"context_line":"                    \"failed back to is required.\")"},{"line_number":1160,"context_line":"            raise na_utils.NetAppDriverException(msg)"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"        if secondary_backend_name:"},{"line_number":1163,"context_line":"            msg \u003d _(\"Secondary backend to which the replication is \""},{"line_number":1164,"context_line":"                    \"failed over is required.\")"},{"line_number":1165,"context_line":"            raise na_utils.NetAppDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"2b80a79c_c6007ca6","line":1162,"updated":"2026-02-20 18:40:37.000000000","message":"Same as above?  Is this the correct check?","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[{"line_number":1159,"context_line":"                    \"failed back to is required.\")"},{"line_number":1160,"context_line":"            raise na_utils.NetAppDriverException(msg)"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"        if secondary_backend_name:"},{"line_number":1163,"context_line":"            msg \u003d _(\"Secondary backend to which the replication is \""},{"line_number":1164,"context_line":"                    \"failed over is required.\")"},{"line_number":1165,"context_line":"            raise na_utils.NetAppDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"6f1fedef_ee0fe1d3","line":1162,"in_reply_to":"2b80a79c_c6007ca6","updated":"2026-03-09 07:46:35.000000000","message":"Done","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":1174,"context_line":"                \"failback.\","},{"line_number":1175,"context_line":"                primary_backend_name)"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"        if not self.configuration.netapp_disaggregated_platform:"},{"line_number":1178,"context_line":"            flexvols \u003d self.ssc_library.get_ssc_flexvol_names()"},{"line_number":1179,"context_line":"            cg_info \u003d src_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1180,"context_line":"            cg_name \u003d cg_info[0].get(\u0027cg_name\u0027)"},{"line_number":1181,"context_line":"        else:"},{"line_number":1182,"context_line":"            raise na_utils.NetAppDriverException("},{"line_number":1183,"context_line":"                \"ASAr2 platform is not supported for replication\")"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"        LOG.info(\"Failing back replication from secondary backend %s \""},{"line_number":1186,"context_line":"                 \"to primary backend %s. for consistency group %s\","}],"source_content_type":"text/x-python","patch_set":3,"id":"21344421_ef91ed2c","line":1183,"range":{"start_line":1177,"start_character":0,"end_line":1183,"end_character":66},"updated":"2026-02-24 21:21:00.000000000","message":"I see similar checks repeated multiple times and would like to suggest a better pattern that makes the code more readable\n\n     # Fail if ASAR2 is not configured\n     if self.configuration.netapp_disaggregated_platform:\n         raise na_utils.NetAppDriverException(\n             \"ASAr2 platform is not supported for replication\")\n\n     # Otherwise continue normally\n     flexvols \u003d self.ssc_library.get_ssc_flexvol_names()\n     cg_info \u003d src_client.get_flexvols_cg_info(flexvols[0])\n     cg_name \u003d cg_info[0].get(\u0027cg_name\u0027)","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[{"line_number":1174,"context_line":"                \"failback.\","},{"line_number":1175,"context_line":"                primary_backend_name)"},{"line_number":1176,"context_line":""},{"line_number":1177,"context_line":"        if not self.configuration.netapp_disaggregated_platform:"},{"line_number":1178,"context_line":"            flexvols \u003d self.ssc_library.get_ssc_flexvol_names()"},{"line_number":1179,"context_line":"            cg_info \u003d src_client.get_flexvols_cg_info(flexvols[0])"},{"line_number":1180,"context_line":"            cg_name \u003d cg_info[0].get(\u0027cg_name\u0027)"},{"line_number":1181,"context_line":"        else:"},{"line_number":1182,"context_line":"            raise na_utils.NetAppDriverException("},{"line_number":1183,"context_line":"                \"ASAr2 platform is not supported for replication\")"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"        LOG.info(\"Failing back replication from secondary backend %s \""},{"line_number":1186,"context_line":"                 \"to primary backend %s. for consistency group %s\","}],"source_content_type":"text/x-python","patch_set":3,"id":"f5d191a1_cf7230ad","line":1183,"range":{"start_line":1177,"start_character":0,"end_line":1183,"end_character":66},"in_reply_to":"21344421_ef91ed2c","updated":"2026-03-09 07:46:35.000000000","message":"The idea here is to future proof the code for ASAr2 implementation of replication. In the else part we will be fetching CG names based on luns.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":1185,"context_line":"        LOG.info(\"Failing back replication from secondary backend %s \""},{"line_number":1186,"context_line":"                 \"to primary backend %s. for consistency group %s\","},{"line_number":1187,"context_line":"                 secondary_backend_name, primary_backend_name, cg_name)"},{"line_number":1188,"context_line":"        src_backend_config \u003d config_utils.get_backend_configuration("},{"line_number":1189,"context_line":"            primary_backend_name)"},{"line_number":1190,"context_line":"        src_vserver \u003d src_backend_config.netapp_vserver"},{"line_number":1191,"context_line":"        dest_backend_config \u003d config_utils.get_backend_configuration("},{"line_number":1192,"context_line":"            secondary_backend_name)"},{"line_number":1193,"context_line":"        dest_vserver \u003d dest_backend_config.netapp_vserver"},{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"        # Failing back snapmirror from destiation back to source"},{"line_number":1196,"context_line":"        src_client.failover_snapmirror_active_sync(dest_vserver, cg_name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ad1c173_537ae2c4","line":1193,"range":{"start_line":1188,"start_character":0,"end_line":1193,"end_character":57},"updated":"2026-02-24 21:21:00.000000000","message":"Can we move this code in a helper method and use the same across multiple repeated occurrences as following:\n\n    def get_src_dest_vserver(primary_backend, secondary_backend):\n        src_backend_config \u003d config_utils.get_backend_configuration(\n            primary_backend_name)\n        src_vserver \u003d src_backend_config.netapp_vserver\n        dest_backend_config \u003d config_utils.get_backend_configuration(\n            secondary_backend_name)\n        dest_vserver \u003d dest_backend_config.netapp_vserver\n        return src_vserver, dest_vserver","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":1185,"context_line":"        LOG.info(\"Failing back replication from secondary backend %s \""},{"line_number":1186,"context_line":"                 \"to primary backend %s. for consistency group %s\","},{"line_number":1187,"context_line":"                 secondary_backend_name, primary_backend_name, cg_name)"},{"line_number":1188,"context_line":"        src_backend_config \u003d config_utils.get_backend_configuration("},{"line_number":1189,"context_line":"            primary_backend_name)"},{"line_number":1190,"context_line":"        src_vserver \u003d src_backend_config.netapp_vserver"},{"line_number":1191,"context_line":"        dest_backend_config \u003d config_utils.get_backend_configuration("},{"line_number":1192,"context_line":"            secondary_backend_name)"},{"line_number":1193,"context_line":"        dest_vserver \u003d dest_backend_config.netapp_vserver"},{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"        # Failing back snapmirror from destiation back to source"},{"line_number":1196,"context_line":"        src_client.failover_snapmirror_active_sync(dest_vserver, cg_name,"}],"source_content_type":"text/x-python","patch_set":3,"id":"e229f68a_75c9b398","line":1193,"range":{"start_line":1188,"start_character":0,"end_line":1193,"end_character":57},"in_reply_to":"3ad1c173_537ae2c4","updated":"2026-03-10 06:58:14.000000000","message":"Would want to avoid this as its an ondemand extraction of the vserver name and not a functional logic.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":1192,"context_line":"            secondary_backend_name)"},{"line_number":1193,"context_line":"        dest_vserver \u003d dest_backend_config.netapp_vserver"},{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"        # Failing back snapmirror from destiation back to source"},{"line_number":1196,"context_line":"        src_client.failover_snapmirror_active_sync(dest_vserver, cg_name,"},{"line_number":1197,"context_line":"                                                   src_vserver, cg_name)"},{"line_number":1198,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"0e54b709_84414605","line":1195,"range":{"start_line":1195,"start_character":39,"end_line":1195,"end_character":49},"updated":"2026-02-24 21:21:00.000000000","message":"destination","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":1192,"context_line":"            secondary_backend_name)"},{"line_number":1193,"context_line":"        dest_vserver \u003d dest_backend_config.netapp_vserver"},{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"        # Failing back snapmirror from destiation back to source"},{"line_number":1196,"context_line":"        src_client.failover_snapmirror_active_sync(dest_vserver, cg_name,"},{"line_number":1197,"context_line":"                                                   src_vserver, cg_name)"},{"line_number":1198,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5e0f50b7_38046f3c","line":1195,"range":{"start_line":1195,"start_character":39,"end_line":1195,"end_character":49},"in_reply_to":"0e54b709_84414605","updated":"2026-03-10 06:58:14.000000000","message":"Done","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":1304,"context_line":"            if (self.is_active_sync_configured(self.configuration) and"},{"line_number":1305,"context_line":"                    self.is_consistent_replication_enabled("},{"line_number":1306,"context_line":"                        self.configuration)):"},{"line_number":1307,"context_line":"                replication_targets \u003d ("},{"line_number":1308,"context_line":"                    self.get_replication_backend_names("},{"line_number":1309,"context_line":"                        self.configuration))"},{"line_number":1310,"context_line":"                secondary_backend_name \u003d replication_targets[0]"}],"source_content_type":"text/x-python","patch_set":3,"id":"e4498b1e_1b50fa46","line":1307,"updated":"2026-02-20 18:40:37.000000000","message":"Add comment about single backend name for consistency with other similar blocks? (and to explain magic array index)","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            if (self.is_active_sync_configured(self.configuration) and"},{"line_number":1305,"context_line":"                    self.is_consistent_replication_enabled("},{"line_number":1306,"context_line":"                        self.configuration)):"},{"line_number":1307,"context_line":"                replication_targets \u003d ("},{"line_number":1308,"context_line":"                    self.get_replication_backend_names("},{"line_number":1309,"context_line":"                        self.configuration))"},{"line_number":1310,"context_line":"                secondary_backend_name \u003d replication_targets[0]"}],"source_content_type":"text/x-python","patch_set":3,"id":"cfa21444_5abddf5a","line":1307,"in_reply_to":"e4498b1e_1b50fa46","updated":"2026-03-10 06:58:14.000000000","message":"Acknowledged","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":1353,"context_line":"                msg \u003d _(\"Could not complete failover: %s\") % e"},{"line_number":1354,"context_line":"                raise exception.UnableToFailOver(reason\u003dmsg)"},{"line_number":1355,"context_line":""},{"line_number":1356,"context_line":"            LOG.debug(\"data_motion::_failover ended\")"},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"            return active_backend_name, volume_updates, []"},{"line_number":1359,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"88c54a9d_f687b288","line":1356,"range":{"start_line":1356,"start_character":46,"end_line":1356,"end_character":51},"updated":"2026-02-24 21:21:00.000000000","message":"completed/finished sounds more accurate","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":1353,"context_line":"                msg \u003d _(\"Could not complete failover: %s\") % e"},{"line_number":1354,"context_line":"                raise exception.UnableToFailOver(reason\u003dmsg)"},{"line_number":1355,"context_line":""},{"line_number":1356,"context_line":"            LOG.debug(\"data_motion::_failover ended\")"},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"            return active_backend_name, volume_updates, []"},{"line_number":1359,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7028c828_e77bf2c0","line":1356,"range":{"start_line":1356,"start_character":46,"end_line":1356,"end_character":51},"in_reply_to":"88c54a9d_f687b288","updated":"2026-03-10 06:58:14.000000000","message":"Done","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":1454,"context_line":""},{"line_number":1455,"context_line":"        config \u003d config_utils.get_backend_configuration(src_backend_name)"},{"line_number":1456,"context_line":""},{"line_number":1457,"context_line":"        # Verify if nfs protocol is selected for the storage backend"},{"line_number":1458,"context_line":"        if config.safe_get(\u0027netapp_storage_protocol\u0027) \u003d\u003d \u0027nfs\u0027:"},{"line_number":1459,"context_line":"            msg \u003d _(\"AutomatedFailOver policy is not supported for \""},{"line_number":1460,"context_line":"                    \"NFS configured backends.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"7b3820dd_e6cd361c","line":1457,"range":{"start_line":1457,"start_character":10,"end_line":1457,"end_character":16},"updated":"2026-02-24 21:21:00.000000000","message":"Fail?","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":1454,"context_line":""},{"line_number":1455,"context_line":"        config \u003d config_utils.get_backend_configuration(src_backend_name)"},{"line_number":1456,"context_line":""},{"line_number":1457,"context_line":"        # Verify if nfs protocol is selected for the storage backend"},{"line_number":1458,"context_line":"        if config.safe_get(\u0027netapp_storage_protocol\u0027) \u003d\u003d \u0027nfs\u0027:"},{"line_number":1459,"context_line":"            msg \u003d _(\"AutomatedFailOver policy is not supported for \""},{"line_number":1460,"context_line":"                    \"NFS configured backends.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"ee1b210e_dd525f5d","line":1457,"range":{"start_line":1457,"start_character":10,"end_line":1457,"end_character":16},"in_reply_to":"7b3820dd_e6cd361c","updated":"2026-03-10 06:58:14.000000000","message":"Done","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"fea98d488920ffb1d4f5a61b3e7531bdbda1e583","unresolved":true,"context_lines":[{"line_number":1469,"context_line":"        # Verify if Source FlexVol volumes are part of different CGs."},{"line_number":1470,"context_line":"        # This happens when the FlexVol volumes configured previously"},{"line_number":1471,"context_line":"        # with a single CG replication"},{"line_number":1472,"context_line":"        # is not cleaned up."},{"line_number":1473,"context_line":"        src_backend_config \u003d ("},{"line_number":1474,"context_line":"            config_utils.get_backend_configuration(src_backend_name))"},{"line_number":1475,"context_line":"        src_vserver \u003d src_backend_config.netapp_vserver"}],"source_content_type":"text/x-python","patch_set":3,"id":"38880287_8427f4ce","line":1472,"range":{"start_line":1472,"start_character":0,"end_line":1472,"end_character":28},"updated":"2026-02-24 21:21:00.000000000","message":"nit: could be part of previous line in comment","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"36d4b130f62d264e20d7ab5a6564c19e9eb48b3d","unresolved":false,"context_lines":[{"line_number":1469,"context_line":"        # Verify if Source FlexVol volumes are part of different CGs."},{"line_number":1470,"context_line":"        # This happens when the FlexVol volumes configured previously"},{"line_number":1471,"context_line":"        # with a single CG replication"},{"line_number":1472,"context_line":"        # is not cleaned up."},{"line_number":1473,"context_line":"        src_backend_config \u003d ("},{"line_number":1474,"context_line":"            config_utils.get_backend_configuration(src_backend_name))"},{"line_number":1475,"context_line":"        src_vserver \u003d src_backend_config.netapp_vserver"}],"source_content_type":"text/x-python","patch_set":3,"id":"ac8bb76d_468b2da5","line":1472,"range":{"start_line":1472,"start_character":0,"end_line":1472,"end_character":28},"in_reply_to":"38880287_8427f4ce","updated":"2026-03-10 06:58:14.000000000","message":"Acknowledged","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"18d902a074d0b53c1c830dc65d86eb9cd4f19b67","unresolved":true,"context_lines":[{"line_number":1469,"context_line":"        # Verify if Source FlexVol volumes are part of different CGs."},{"line_number":1470,"context_line":"        # This happens when the FlexVol volumes configured previously"},{"line_number":1471,"context_line":"        # with a single CG replication"},{"line_number":1472,"context_line":"        # is not cleaned up."},{"line_number":1473,"context_line":"        src_backend_config \u003d ("},{"line_number":1474,"context_line":"            config_utils.get_backend_configuration(src_backend_name))"},{"line_number":1475,"context_line":"        src_vserver \u003d src_backend_config.netapp_vserver"}],"source_content_type":"text/x-python","patch_set":3,"id":"949b0580_7a75561f","line":1472,"range":{"start_line":1472,"start_character":0,"end_line":1472,"end_character":28},"in_reply_to":"ac8bb76d_468b2da5","updated":"2026-04-30 07:53:35.000000000","message":"Still not addressed ...","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1105c33ebf183fd32285296f5b2d8a8abb06ab1f","unresolved":true,"context_lines":[{"line_number":1526,"context_line":"        # This ensures that creating new consistency groups"},{"line_number":1527,"context_line":"        # and FlexVol volumes in the destination backend"},{"line_number":1528,"context_line":"        # will not encounter conflicts."},{"line_number":1529,"context_line":"        if not existing_mirrors:"},{"line_number":1530,"context_line":"            LOG.info(\"No existing SnapMirror relationships found for CG %s. \""},{"line_number":1531,"context_line":"                     \"Checking for CG and FlexVol naming conflicts in\""},{"line_number":1532,"context_line":"                     \" destination backend.\", cg_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"0dbf56a3_27ced8e6","line":1529,"updated":"2026-02-20 18:40:37.000000000","message":"It it possible for there to be a race condition between this block and the actual creation of the CG?","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"1a645537406e07dfdc2acd6b8eae38845698bad3","unresolved":false,"context_lines":[{"line_number":1526,"context_line":"        # This ensures that creating new consistency groups"},{"line_number":1527,"context_line":"        # and FlexVol volumes in the destination backend"},{"line_number":1528,"context_line":"        # will not encounter conflicts."},{"line_number":1529,"context_line":"        if not existing_mirrors:"},{"line_number":1530,"context_line":"            LOG.info(\"No existing SnapMirror relationships found for CG %s. \""},{"line_number":1531,"context_line":"                     \"Checking for CG and FlexVol naming conflicts in\""},{"line_number":1532,"context_line":"                     \" destination backend.\", cg_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1725580d_cc91910a","line":1529,"in_reply_to":"0dbf56a3_27ced8e6","updated":"2026-03-09 07:46:35.000000000","message":"No it wont be, as this function is always called in _handle_housekeeping_tasks workflow which will not be called from multiple places.","commit_id":"9fef01686519d3bdab016db2943e3a73fbeabf9f"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":125,"context_line":"            self.get_replication_backend_names(configuration))"},{"line_number":126,"context_line":"        if replication_enabled:"},{"line_number":127,"context_line":"            return self.get_replication_policy(configuration) in \\"},{"line_number":128,"context_line":"                (REPLICATION_POLICY_AUTOMATED_FAILOVER,"},{"line_number":129,"context_line":"                 REPLICATION_POLICY_AUTOMATED_FAILOVER_DUPLEX)"},{"line_number":130,"context_line":"        return False"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"a69a1374_37dec192","line":128,"updated":"2026-03-13 00:59:10.000000000","message":"Check in ACTIVE_SYNC_ASYMMETRIC_POLICIES instead?  Or do you anticipate a future where ACTIVE_SYNC_ASYMMETRIC_POLICIES will diverge from this check?","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            self.get_replication_backend_names(configuration))"},{"line_number":126,"context_line":"        if replication_enabled:"},{"line_number":127,"context_line":"            return self.get_replication_policy(configuration) in \\"},{"line_number":128,"context_line":"                (REPLICATION_POLICY_AUTOMATED_FAILOVER,"},{"line_number":129,"context_line":"                 REPLICATION_POLICY_AUTOMATED_FAILOVER_DUPLEX)"},{"line_number":130,"context_line":"        return False"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"d60de732_cd5bdf73","line":128,"in_reply_to":"a69a1374_37dec192","updated":"2026-03-17 11:37:54.000000000","message":"Will take up in next PR.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":846,"context_line":"                self._expand_flexvols_not_in_cg(src_client, src_vserver,"},{"line_number":847,"context_line":"                                                src_cg_name, cg_info)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"        if replication_policy \u003d\u003d \"AutomatedFailOver\":"},{"line_number":850,"context_line":"            (self."},{"line_number":851,"context_line":"                _consistent_replication_precheck_for_af_policy("},{"line_number":852,"context_line":"                    src_backend_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ebe73b72_1c32ebfc","line":849,"updated":"2026-03-13 00:59:10.000000000","message":"Use your constant here too.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":846,"context_line":"                self._expand_flexvols_not_in_cg(src_client, src_vserver,"},{"line_number":847,"context_line":"                                                src_cg_name, cg_info)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"        if replication_policy \u003d\u003d \"AutomatedFailOver\":"},{"line_number":850,"context_line":"            (self."},{"line_number":851,"context_line":"                _consistent_replication_precheck_for_af_policy("},{"line_number":852,"context_line":"                    src_backend_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"caac6a5d_1c4a88c0","line":849,"in_reply_to":"ebe73b72_1c32ebfc","updated":"2026-03-17 11:37:54.000000000","message":"Will take up in next PR.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":853,"context_line":"                    destination_backend_names,"},{"line_number":854,"context_line":"                    storage_object_type,"},{"line_number":855,"context_line":"                    storage_object_names))"},{"line_number":856,"context_line":"        elif replication_policy \u003d\u003d \"AutomatedFailOverDuplex\":"},{"line_number":857,"context_line":"            (self."},{"line_number":858,"context_line":"                _consistent_replication_precheck_for_afd_policy("},{"line_number":859,"context_line":"                    src_backend_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1d1119cd_144983a4","line":856,"updated":"2026-03-13 00:59:10.000000000","message":"Use your constant.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":853,"context_line":"                    destination_backend_names,"},{"line_number":854,"context_line":"                    storage_object_type,"},{"line_number":855,"context_line":"                    storage_object_names))"},{"line_number":856,"context_line":"        elif replication_policy \u003d\u003d \"AutomatedFailOverDuplex\":"},{"line_number":857,"context_line":"            (self."},{"line_number":858,"context_line":"                _consistent_replication_precheck_for_afd_policy("},{"line_number":859,"context_line":"                    src_backend_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5568579f_c89df65c","line":856,"in_reply_to":"1d1119cd_144983a4","updated":"2026-03-17 11:37:54.000000000","message":"Will take up in next PR.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"18d902a074d0b53c1c830dc65d86eb9cd4f19b67","unresolved":true,"context_lines":[{"line_number":1457,"context_line":"                \u0027updates\u0027: {\u0027replication_status\u0027: replication_status},"},{"line_number":1458,"context_line":"            }"},{"line_number":1459,"context_line":"            volume_updates.append(volume_update)"},{"line_number":1460,"context_line":"        LOG.debug(\u0027data_motion::_complete_failback completed\u0027)"},{"line_number":1461,"context_line":"        return active_backend_name, volume_updates, []"},{"line_number":1462,"context_line":""},{"line_number":1463,"context_line":"    def _complete_failback_active_sync(self, primary_backend_name,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba4a6340_570fabd7","line":1460,"range":{"start_line":1460,"start_character":51,"end_line":1460,"end_character":60},"updated":"2026-04-30 07:53:35.000000000","message":"nit: `finished` would be good here to avoid repeating words","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"18d902a074d0b53c1c830dc65d86eb9cd4f19b67","unresolved":true,"context_lines":[{"line_number":1464,"context_line":"                                       secondary_backend_name, volumes):"},{"line_number":1465,"context_line":"        LOG.debug(\u0027data_motion::_complete_failback_active_sync started\u0027)"},{"line_number":1466,"context_line":""},{"line_number":1467,"context_line":"        if primary_backend_name is None:"},{"line_number":1468,"context_line":"            msg \u003d _(\"Primary backend to which the replication will be \""},{"line_number":1469,"context_line":"                    \"failed back to is required.\")"},{"line_number":1470,"context_line":"            raise na_utils.NetAppDriverException(msg)"}],"source_content_type":"text/x-python","patch_set":10,"id":"8ca6bc8f_7f38d25c","line":1467,"range":{"start_line":1467,"start_character":8,"end_line":1467,"end_character":39},"updated":"2026-04-30 07:53:35.000000000","message":"just to be sure, we\u0027ve reversed the condition here\nPreviously it was checking if primary_backend_name is not None and now it\u0027s checking for None.\nGiven the message below, the current condition looks correct but I\u0027m curious how it used to function correctly before?","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"18d902a074d0b53c1c830dc65d86eb9cd4f19b67","unresolved":true,"context_lines":[{"line_number":1612,"context_line":""},{"line_number":1613,"context_line":"    def _failover(self, context, volumes, secondary_id\u003dNone, groups\u003dNone):"},{"line_number":1614,"context_line":""},{"line_number":1615,"context_line":"        LOG.debug(\"data_motion::_failover started\")"},{"line_number":1616,"context_line":"        LOG.debug(\"Secondary ID: %s\", secondary_id)"},{"line_number":1617,"context_line":""},{"line_number":1618,"context_line":"        \"\"\"Failover to replication target.\"\"\""},{"line_number":1619,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"a4b933f9_d10da420","line":1616,"range":{"start_line":1615,"start_character":0,"end_line":1616,"end_character":51},"updated":"2026-04-30 07:53:35.000000000","message":"nit: I really don\u0027t like the pattern here and it might cause unnecessary flooding of logs, would be good to have 1 DEBUG log instead of multiple like\n\n    LOG.debug(\"data_motion::_failover started with Secondary ID: %s\", secondary_id)","commit_id":"03c97a7981d512f2580577014fee8b8f5660f5b7"}],"cinder/volume/drivers/netapp/utils.py":[{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d9b953eaae90dc2ce5b937279a7b79738ce7afe6","unresolved":true,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class ReplicationPolicy(Enum):"},{"line_number":96,"context_line":"    AUTOMATED_FAIL_OVER \u003d \u0027AutomatedFailOver\u0027"},{"line_number":97,"context_line":"    AUTOMATED_FAIL_OVER_DUPLEX \u003d \u0027AutomatedFailOverDuplex\u0027"},{"line_number":98,"context_line":"    ASYNCHRONOUS \u003d \u0027Asynchronous\u0027"},{"line_number":99,"context_line":"    MIRROR_ALL_SNAPSHOTS \u003d \u0027MirrorAllSnapshots\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ba526f8_974927ef","line":96,"updated":"2026-03-13 00:59:10.000000000","message":"I wonder if this enum should be used in the other place where you defined  constants (or vice versa)","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"},{"author":{"_account_id":38623,"name":"Sanketh Shetty","display_name":"Sanketh Shetty","email":"sanketh.shetty@netapp.com","username":"sanketh-netapp","status":"NetApp"},"change_message_id":"5fc3fbb30c61451d2d156026ca59cace836e6a1f","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class ReplicationPolicy(Enum):"},{"line_number":96,"context_line":"    AUTOMATED_FAIL_OVER \u003d \u0027AutomatedFailOver\u0027"},{"line_number":97,"context_line":"    AUTOMATED_FAIL_OVER_DUPLEX \u003d \u0027AutomatedFailOverDuplex\u0027"},{"line_number":98,"context_line":"    ASYNCHRONOUS \u003d \u0027Asynchronous\u0027"},{"line_number":99,"context_line":"    MIRROR_ALL_SNAPSHOTS \u003d \u0027MirrorAllSnapshots\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"26f51b59_5e288115","line":96,"in_reply_to":"9ba526f8_974927ef","updated":"2026-03-17 11:37:54.000000000","message":"Yes we will sure take it up in upcoming PRs.","commit_id":"40a3bfc1ae579212974a5ba8982f89e8b0ca46b9"}]}
