)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"6680eb7adb73506721829eea7f3cbc44b443c15d","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Pure Storage NVMe-RoCE driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add driver to support NVMe over RoCE for the Pure Storage FlashArray."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Depends-On: I278dd4a6fcbdc1bc477e998eabe07edf81dabd21"},{"line_number":12,"context_line":"Change-Id: Ie964990e0d377aef94d970818338a239919bcc8c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":44,"id":"2a3e2ede_4d3b1d48","line":9,"updated":"2022-07-27 22:22:41.000000000","message":"missing reference to blueprint:\n\nImplements: blueprint purestorage-nvme-driver-for-flasharray","commit_id":"6f5d4d21b06e0d22ec3920af5deee3ee13864a63"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"3221b8026bcf963c8b3c7d88509b4fced908fc5b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Pure Storage NVMe-RoCE driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add driver to support NVMe over RoCE for the Pure Storage FlashArray."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Depends-On: I278dd4a6fcbdc1bc477e998eabe07edf81dabd21"},{"line_number":12,"context_line":"Change-Id: Ie964990e0d377aef94d970818338a239919bcc8c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":44,"id":"b20a2e91_7d71b564","line":9,"in_reply_to":"2a3e2ede_4d3b1d48","updated":"2022-07-28 01:15:46.000000000","message":"Done","commit_id":"6f5d4d21b06e0d22ec3920af5deee3ee13864a63"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"f907ac667d9a37b4dad2e88d3981780ed4e865ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"610f898a_f17a5da2","updated":"2022-01-14 13:08:13.000000000","message":"One query mentioned in comment below.","commit_id":"81fc2e04a40072d33f09edcec82b568c0116c68d"},{"author":{"_account_id":33807,"name":"Jacob Wang","email":"jacob_wang1@dell.com","username":"jacob0522"},"change_message_id":"45692e8e2b63b1e9b1c50ff3a51a89c7be3f7117","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"b63135bf_f5c429d2","updated":"2022-01-14 09:11:10.000000000","message":"run-DellEMC PowerFlex CI","commit_id":"81fc2e04a40072d33f09edcec82b568c0116c68d"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"f17864e2a6491de7348bab66301bcf2e711ee43b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"94821eeb_ef7c89f3","updated":"2022-01-17 12:03:15.000000000","message":"Thanks for addressing previous comment.\nOne typo \u0026 related query.","commit_id":"3fbd285a9430a8ae7b3abb32cd08e93872c0557b"},{"author":{"_account_id":32966,"name":"jiang guodao","email":"jguodao@vmware.com","username":"jguodao"},"change_message_id":"297d750e97972e47fa2540f3617063519facb593","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"84a30afe_b8c94d99","updated":"2022-01-17 05:32:36.000000000","message":"vmware-recheck-patch","commit_id":"3fbd285a9430a8ae7b3abb32cd08e93872c0557b"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ce25ae51f3d63f238a48e9e91ab8634f61a5abab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"b2531d72_2823e4dc","in_reply_to":"94821eeb_ef7c89f3","updated":"2022-06-21 14:20:21.000000000","message":"Done","commit_id":"3fbd285a9430a8ae7b3abb32cd08e93872c0557b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b55ce6cde3823e54f20d5fada9c1401109de9790","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7ec8c97e_1939306b","updated":"2022-01-18 10:24:39.000000000","message":"Hi,\n\nSome optimizations mentioned inline.","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"8401013d19793aaa8c77e100ba4c53ad2dac124e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"3bcdd1b5_b3560c8a","updated":"2022-01-18 05:16:18.000000000","message":"Zuul has passed. My comment has been addressed. So +1.","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"bcccc8003f79371b2d04004136eb257a78726830","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"26be772b_7034b4b3","updated":"2022-01-18 20:42:39.000000000","message":"@Simon: suggestion inline.","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"0016876f_ad641534","updated":"2022-01-18 23:28:51.000000000","message":"A few things noted inline, nothing major.  Haven\u0027t looked over the tests yet.","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"75efe196497a641323bfda40a23e6f13d4414230","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"720125b5_3627c132","updated":"2022-01-18 23:32:08.000000000","message":"Looks like I had some kind of race with the Dell CI, and Gerrit has put my comments in https://review.opendev.org/c/openstack/cinder/+/799871/13#message-e8c57b5f83761bae2e12fc431b87e3f3444f6f62","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"70af473c1077fa81d0305136950b68dceca27aef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"d6074abb_f40cea2d","updated":"2022-01-18 19:22:03.000000000","message":"run Pure Storage CI","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9f85a78ee979ad0af93b191b67c191269a538f89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"80cddaac_502e24ae","updated":"2022-01-19 04:36:15.000000000","message":"Revisions and tests look OK.  Typo noted inline.\n\nDo you have a CI job set up to test the NVMe driver?  I only see iscsi and fc.","commit_id":"0477b51e5c9a4b8baaa1f43a7fb321adb2e2b6de"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"8ec18c165bed83750ba64ce2829817e85710ab16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"7668e6c5_3ada910b","in_reply_to":"80cddaac_502e24ae","updated":"2022-01-19 13:41:38.000000000","message":"Sadly not. the NVMe CI build has hit some resourcing issues and we aren\u0027t going to make the deadline.\nWe will have to wait for the Z-cycle now, when we should be able to add FC and sync rep support as well.","commit_id":"0477b51e5c9a4b8baaa1f43a7fb321adb2e2b6de"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"9aa7a163a9810bddab5df0075ac7b6601b737f0a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"c54ec20d_bbfbbce8","updated":"2022-01-19 16:49:27.000000000","message":"run Pure Storage CI","commit_id":"b02aa55a0ff0401d6dc97a91903e41ad5fc91553"},{"author":{"_account_id":33807,"name":"Jacob Wang","email":"jacob_wang1@dell.com","username":"jacob0522"},"change_message_id":"321ff00d95e1ca964897b516fe4b8efcab70a4f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"456688d7_e0534836","updated":"2022-01-20 09:10:38.000000000","message":"run-DellEMC Unity CI","commit_id":"b02aa55a0ff0401d6dc97a91903e41ad5fc91553"},{"author":{"_account_id":32966,"name":"jiang guodao","email":"jguodao@vmware.com","username":"jguodao"},"change_message_id":"c0edbc1a3f2cd2aed3eda5ab8a1c673ccd783e98","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"796fb993_e8e86674","updated":"2022-03-22 08:12:46.000000000","message":"vmware-recheck-patch","commit_id":"9ec9f897fac5c2b1ce0291eacab480fa261f97fe"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"470b61b236965dcd27acc54b8619ab85df7ea347","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"0676726a_ed102186","updated":"2022-07-07 16:00:50.000000000","message":"run Pure Storage CI","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"d3f83f65c299aa527a53bbffde6eba01eab6d2e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"207c62ff_a711fa85","updated":"2022-06-24 22:34:40.000000000","message":"run Pure Storage CI","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"906191d7529b1663f6a690da86915ec038e4e24d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"7b1e1f9d_430144ce","updated":"2022-07-06 18:45:37.000000000","message":"run Pure Storage CI","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"667d60d9ec3cfa48d6856900ffd5e5cc1d007657","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"ef7e93e5_23b5ca1a","updated":"2022-07-05 15:33:43.000000000","message":"run Pure Storage CI","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"bd5879d87d37a2fa4732828f7203fb3e4f86d3c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"93856313_8c8a3e9c","updated":"2022-07-08 19:53:14.000000000","message":"run Pure Storage CI","commit_id":"0308e2d41e14a0fbed7601f008f3302335872f1d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"745d07507e40eb9c0af109ac55941143ebb60216","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"c810b336_db011bdd","updated":"2022-07-08 18:48:57.000000000","message":"run Pure Storage CI","commit_id":"0308e2d41e14a0fbed7601f008f3302335872f1d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"a1ef4b77516ed82f485a4ca1618e5a36278669a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"cd7c3869_24d6247f","updated":"2022-07-08 20:50:21.000000000","message":"run Pure Storage CI","commit_id":"0308e2d41e14a0fbed7601f008f3302335872f1d"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"54cddc2f9a5ec65c53148dc2c31161cea5c3f0f6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"7a81132c_66a29ca3","updated":"2022-07-13 01:21:50.000000000","message":"CI check results ... please address the items marked with \u0027𐄂\u0027\n\n🗸 CI_WIKI_NAME correct in driver properties: Pure_Storage_CI\n🗸 CI wiki page is there: https://wiki.openstack.org/wiki/ThirdPartySystems/Pure_Storage_CI\n  - email ping to contact info on the wiki (sent 2 June 2022, resent 12 July))\n  𐄂 received pong\n𐄂 checked recheck trigger\n  * trigger: \"run-Pure Storage CI\"\n  (doesn\u0027t seem to be working)\n🗸 CI is responding on the new driver patch\n  * successful run comment link: https://review.opendev.org/c/openstack/cinder/+/799871/26#message-c8767539b480c84582a61d7c9f304050cc8a3d43\n  actually, fc \u0026 iscsi succeeded, but nvme reported DISK_FULL\n  only run with logs is https://review.opendev.org/c/openstack/cinder/+/799871/26#message-75557718c81db4dd76f310a1d665ae38763d6f2b\n  logs: http://openstack-logs.purestorage.com/71/799871/24/thirdparty-check/pure-devstack-cinder-tempest-nvme-roce-aio/376e00b/\n🗸 CI is responding on other patches\n  * https://review.opendev.org/q/reviewedby:openstack-third-party-ci%2540purestorage.com+project:openstack/cinder+-file:cinder/volume/drivers/pure.py\n𐄂 CI is responding on os-brick patches\n  * https://review.opendev.org/q/reviewedby:openstack-third-party-ci%2540purestorage.com+project:openstack/os-brick\n🗸 CI results\n  🗸 easy to find logs\n  for protocol NVMe-RoCE:\n  * cinder.conf:\n    🗸 actually using the driver\n    🗸 cinder configured to use features claimed in the matrix\n  * tempest.conf:\n    🗸 tempest configured to test features claimed in the matrix\n","commit_id":"5873f0dac578051a021479d0129dad6c83b2454d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"054958e9bfa7717b439295527915bd36ad2a5b46","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"2c79514d_7339edb4","updated":"2022-07-10 15:41:33.000000000","message":"run Pure Storage CI","commit_id":"5873f0dac578051a021479d0129dad6c83b2454d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"e3b2974bb6a13f00c342f50c5dfb384014e33765","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"7a4719fb_482c6bc9","updated":"2022-07-10 17:12:38.000000000","message":"run Pure Storage CI","commit_id":"5873f0dac578051a021479d0129dad6c83b2454d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"a1525f6eca2e661ca166b9b3f4f5313c037838bb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"b0349ad5_9e5a6729","in_reply_to":"7a81132c_66a29ca3","updated":"2022-07-13 19:56:14.000000000","message":"trigger does work - you seem to have added a - in the call\nnvme zuul job not picking up os-brick paytches - working on fixing that now\nwasn\u0027t aware that os-brick patches needed to be covered by the 3rd party CIs...","commit_id":"5873f0dac578051a021479d0129dad6c83b2454d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"91ba564bc4d3dbee9e0981b2309145b864a89cc1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"23778a5b_ff2eb547","updated":"2022-07-13 19:56:32.000000000","message":"recheck","commit_id":"8e35d0aff6696445ded8270b7e4fc3160495e041"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"05cfbb10e7a42ea3b9dd9c3f4bd73e692021b999","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"888bdb6a_01eb77b2","updated":"2022-07-14 07:10:25.000000000","message":"Code changes look good. Zuul also passed.\nJust couple of queries inline.","commit_id":"3c45887e667d96a25a827b53b804e93ecf4e76ec"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5241b6643bd77d796bd94f20022bc82ea39f411b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"06048835_3b10779f","updated":"2022-07-14 18:29:52.000000000","message":"recheck\n","commit_id":"94caa1247f6bd2051042afc9087d97a54a1abfa3"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"1eec11255e6b18d38fb68394b8a26fd0085762ac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"30f6f1be_27572861","updated":"2022-07-15 09:53:27.000000000","message":"One small query inline.","commit_id":"f0a8178d2e25397719e5a31ed61bb35b5d0e4683"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"7ca7973844cf5ca6c62dae317f9954c3814052ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"4d547347_5461b06f","updated":"2022-07-14 21:36:03.000000000","message":"run Pure Storage CI","commit_id":"f0a8178d2e25397719e5a31ed61bb35b5d0e4683"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"d31bd7a2f56e57abd63ffeef056d4c3c6434897c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":32,"id":"b50185df_2e680046","updated":"2022-07-15 14:18:34.000000000","message":"run Pure Storage CI","commit_id":"f0a8178d2e25397719e5a31ed61bb35b5d0e4683"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"8cd2bea286f11e302d35c2ae26e0f1f107b40b37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"17866bc4_a990868e","updated":"2022-07-15 18:47:50.000000000","message":"recheck","commit_id":"e4382ae8b75b7b7256ab13f28cae7389901905ae"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"cb98e58edd1c8e52552817865ab83a659036f92c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"89a7d551_89356687","updated":"2022-07-15 18:42:22.000000000","message":"recheck","commit_id":"e4382ae8b75b7b7256ab13f28cae7389901905ae"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"533b1f76eb1c39a7a9295fff3ee2883f4ad28ef7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"688384e0_ddb6bfd5","updated":"2022-07-18 10:01:36.000000000","message":"My queries have been addressed. Thanks.","commit_id":"4491b1757f95dbd717e804fd99d26034aeccae6f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"544df1f645075f35152f958db2081b6ddbcd4468","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"e5299bc8_0c9e0192","updated":"2022-07-15 20:01:53.000000000","message":"recheck","commit_id":"4491b1757f95dbd717e804fd99d26034aeccae6f"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"f9f5a4a9c55913c4053eed0daed3d1f983849734","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"75d46089_e6d7b656","updated":"2022-07-18 17:18:33.000000000","message":"recheck","commit_id":"29eb57b193c6189d3d9fcf6813ad1ec8bec817cc"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"cd8bfdf91b3a77824ba5b76b27838c37337c164d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":36,"id":"09a2f176_e76bd2bf","updated":"2022-07-19 16:25:34.000000000","message":"run Pure Storage CI","commit_id":"29eb57b193c6189d3d9fcf6813ad1ec8bec817cc"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"8852af7cd1afd83fd81f4cc0b8f5573e6b1a1e47","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":37,"id":"67da6594_4cf68d32","updated":"2022-07-19 20:41:19.000000000","message":"run Pure Storage CI","commit_id":"e9a7df6c0d99499b26b3d0bab51108e0a8611fb4"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"c7b0b093d7f65f4dc03b76d54e6ddb9cdaff1417","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"6fdfeeea_143a6233","updated":"2022-07-20 21:43:18.000000000","message":"recheck","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2eb4ede7da38b7376afd3dda0d0b21aec549a807","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"38b61b9c_feb4ad91","updated":"2022-07-20 21:40:58.000000000","message":"run Pure Storage CI","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"c6fceb7820475c71c6006bf5437d97dc9b2044ab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":47,"id":"b4ab905e_3eff03be","updated":"2022-07-28 03:31:06.000000000","message":"Hi Simon, I added a few more comments.","commit_id":"dad1e54599168aa94f39c149c63368351107ad1a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e68f0f4438192165d19cddb27bb4737e1b651a46","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":48,"id":"197ba483_d7428786","updated":"2022-07-28 14:47:24.000000000","message":"Looks like I forgot to vote.","commit_id":"208dd8f7c11781224b820fbf376b0d70c57701a0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2097044102678eb9435da96ff7e6f32511d8a431","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":48,"id":"e324ff3d_24692dee","updated":"2022-07-28 09:57:10.000000000","message":"Simon, thank you for making all those changes.\n\nThere are just a couple of things left.","commit_id":"208dd8f7c11781224b820fbf376b0d70c57701a0"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"a6cbc472b715f36c2322fa3b69cf19fee96a5957","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"3a8f0ab9_8b710498","updated":"2022-07-29 17:57:50.000000000","message":"Looks like all the comments have been addressed and if not, they can be addressed in a follow up. CI has reported success. LGTM.\n\npure-devstack-cinder-tempest-nvme-roce-aio http://openstack-logs.purestorage.com/71/799871/49/thirdparty-check/pure-devstack-cinder-tempest-nvme-roce-aio/522a5d0/ : SUCCESS in 1h 49m 18s (non-voting)","commit_id":"dfbcca0d8b03050d2ca56984605c1dc27353ecc3"},{"author":{"_account_id":31779,"name":"Jean Pierre Roquesalane","display_name":"happystacker","email":"jeanpierre.roquesalane@dell.com","username":"happystacker"},"change_message_id":"d2a31afff2406a1a4198d456b760a358914bb109","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"828b9233_e7f3ed31","updated":"2022-07-29 16:58:31.000000000","message":"run-DellEMC Unity CI","commit_id":"dfbcca0d8b03050d2ca56984605c1dc27353ecc3"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"0b20cefa331b157567371c5ba57779e784f92010","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":49,"id":"1fe2655e_f477124a","in_reply_to":"3a8f0ab9_8b710498","updated":"2022-07-29 18:43:34.000000000","message":"OK! Sounds good to me","commit_id":"dfbcca0d8b03050d2ca56984605c1dc27353ecc3"}],"cinder/tests/unit/volume/drivers/test_pure.py":[{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"f907ac667d9a37b4dad2e88d3981780ed4e865ee","unresolved":true,"context_lines":[{"line_number":4601,"context_line":"        mock_get_nguid"},{"line_number":4602,"context_line":"    ):"},{"line_number":4603,"context_line":"        repl_extra_specs \u003d {"},{"line_number":4604,"context_line":"            \"replication_type\": \"\u003cin\u003e sync\","},{"line_number":4605,"context_line":"            \"replication_enabled\": \"\u003cis\u003e true\","},{"line_number":4606,"context_line":"        }"},{"line_number":4607,"context_line":"        vol, vol_name \u003d self.new_fake_vol(type_extra_specs\u003drepl_extra_specs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"58af7cc4_43903ca4","line":4604,"range":{"start_line":4604,"start_character":12,"end_line":4604,"end_character":44},"updated":"2022-01-14 13:08:13.000000000","message":"In release note \u0026 .rst file, it is mentioned that sync replication is not supported by NVMe.\nSo, should this parameter be: \u0027\u003cin\u003e async\u0027","commit_id":"81fc2e04a40072d33f09edcec82b568c0116c68d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2025fd494a097ac4c942990c76b6dbf3cd286178","unresolved":true,"context_lines":[{"line_number":4601,"context_line":"        mock_get_nguid"},{"line_number":4602,"context_line":"    ):"},{"line_number":4603,"context_line":"        repl_extra_specs \u003d {"},{"line_number":4604,"context_line":"            \"replication_type\": \"\u003cin\u003e sync\","},{"line_number":4605,"context_line":"            \"replication_enabled\": \"\u003cis\u003e true\","},{"line_number":4606,"context_line":"        }"},{"line_number":4607,"context_line":"        vol, vol_name \u003d self.new_fake_vol(type_extra_specs\u003drepl_extra_specs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"aa040539_2cd3f8e5","line":4604,"range":{"start_line":4604,"start_character":12,"end_line":4604,"end_character":44},"in_reply_to":"58af7cc4_43903ca4","updated":"2022-01-14 15:24:09.000000000","message":"This is a test for sync rep, but given the array doesn\u0027t support it yet I\u0027ll remove these tests.\nHave added a new test to ensure that the driver code raises an exception when the NVMe driver tries to set up sync rep.","commit_id":"81fc2e04a40072d33f09edcec82b568c0116c68d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1c03a492f1650e02dbd5423e60335b0101cfe66e","unresolved":false,"context_lines":[{"line_number":4601,"context_line":"        mock_get_nguid"},{"line_number":4602,"context_line":"    ):"},{"line_number":4603,"context_line":"        repl_extra_specs \u003d {"},{"line_number":4604,"context_line":"            \"replication_type\": \"\u003cin\u003e sync\","},{"line_number":4605,"context_line":"            \"replication_enabled\": \"\u003cis\u003e true\","},{"line_number":4606,"context_line":"        }"},{"line_number":4607,"context_line":"        vol, vol_name \u003d self.new_fake_vol(type_extra_specs\u003drepl_extra_specs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"216aa096_1cced40b","line":4604,"range":{"start_line":4604,"start_character":12,"end_line":4604,"end_character":44},"in_reply_to":"aa040539_2cd3f8e5","updated":"2022-03-04 19:39:59.000000000","message":"Done","commit_id":"81fc2e04a40072d33f09edcec82b568c0116c68d"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"f907ac667d9a37b4dad2e88d3981780ed4e865ee","unresolved":true,"context_lines":[{"line_number":4649,"context_line":"        mock_get_nguid"},{"line_number":4650,"context_line":"    ):"},{"line_number":4651,"context_line":"        repl_extra_specs \u003d {"},{"line_number":4652,"context_line":"            \"replication_type\": \"\u003cin\u003e sync\","},{"line_number":4653,"context_line":"            \"replication_enabled\": \"\u003cis\u003e true\","},{"line_number":4654,"context_line":"        }"},{"line_number":4655,"context_line":"        vol, vol_name \u003d self.new_fake_vol(type_extra_specs\u003drepl_extra_specs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"b1af73d3_9ecc1166","line":4652,"range":{"start_line":4652,"start_character":12,"end_line":4652,"end_character":43},"updated":"2022-01-14 13:08:13.000000000","message":"same question as above","commit_id":"81fc2e04a40072d33f09edcec82b568c0116c68d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1c03a492f1650e02dbd5423e60335b0101cfe66e","unresolved":false,"context_lines":[{"line_number":4649,"context_line":"        mock_get_nguid"},{"line_number":4650,"context_line":"    ):"},{"line_number":4651,"context_line":"        repl_extra_specs \u003d {"},{"line_number":4652,"context_line":"            \"replication_type\": \"\u003cin\u003e sync\","},{"line_number":4653,"context_line":"            \"replication_enabled\": \"\u003cis\u003e true\","},{"line_number":4654,"context_line":"        }"},{"line_number":4655,"context_line":"        vol, vol_name \u003d self.new_fake_vol(type_extra_specs\u003drepl_extra_specs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"65e12c33_43d23490","line":4652,"range":{"start_line":4652,"start_character":12,"end_line":4652,"end_character":43},"in_reply_to":"70083b9d_18c7e07a","updated":"2022-03-04 19:39:59.000000000","message":"Done","commit_id":"81fc2e04a40072d33f09edcec82b568c0116c68d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2025fd494a097ac4c942990c76b6dbf3cd286178","unresolved":true,"context_lines":[{"line_number":4649,"context_line":"        mock_get_nguid"},{"line_number":4650,"context_line":"    ):"},{"line_number":4651,"context_line":"        repl_extra_specs \u003d {"},{"line_number":4652,"context_line":"            \"replication_type\": \"\u003cin\u003e sync\","},{"line_number":4653,"context_line":"            \"replication_enabled\": \"\u003cis\u003e true\","},{"line_number":4654,"context_line":"        }"},{"line_number":4655,"context_line":"        vol, vol_name \u003d self.new_fake_vol(type_extra_specs\u003drepl_extra_specs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"70083b9d_18c7e07a","line":4652,"range":{"start_line":4652,"start_character":12,"end_line":4652,"end_character":43},"in_reply_to":"b1af73d3_9ecc1166","updated":"2022-01-14 15:24:09.000000000","message":"As above","commit_id":"81fc2e04a40072d33f09edcec82b568c0116c68d"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"f17864e2a6491de7348bab66301bcf2e711ee43b","unresolved":true,"context_lines":[{"line_number":4734,"context_line":"        mock_get_nguid"},{"line_number":4735,"context_line":"    ):"},{"line_number":4736,"context_line":"        repl_extra_specs \u003d {"},{"line_number":4737,"context_line":"            \"replication_type\": \"\u003cin\u003e sync\","},{"line_number":4738,"context_line":"            \"replication_enabled\": \"\u003cis\u003e true\","},{"line_number":4739,"context_line":"        }"},{"line_number":4740,"context_line":"        vol, vol_name \u003d self.new_fake_vol(type_extra_specs\u003drepl_extra_specs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"a8d9652c_2814be16","line":4737,"updated":"2022-01-17 12:03:15.000000000","message":"As per above reasoning, should this test be also commented?","commit_id":"3fbd285a9430a8ae7b3abb32cd08e93872c0557b"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"b6e1df9481fb4def8c9d383e34369b46f68bf826","unresolved":false,"context_lines":[{"line_number":4734,"context_line":"        mock_get_nguid"},{"line_number":4735,"context_line":"    ):"},{"line_number":4736,"context_line":"        repl_extra_specs \u003d {"},{"line_number":4737,"context_line":"            \"replication_type\": \"\u003cin\u003e sync\","},{"line_number":4738,"context_line":"            \"replication_enabled\": \"\u003cis\u003e true\","},{"line_number":4739,"context_line":"        }"},{"line_number":4740,"context_line":"        vol, vol_name \u003d self.new_fake_vol(type_extra_specs\u003drepl_extra_specs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5815ab65_19b26c08","line":4737,"in_reply_to":"a8d9652c_2814be16","updated":"2022-01-17 14:26:04.000000000","message":"Done","commit_id":"3fbd285a9430a8ae7b3abb32cd08e93872c0557b"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"05cfbb10e7a42ea3b9dd9c3f4bd73e692021b999","unresolved":true,"context_lines":[{"line_number":335,"context_line":"        \"target_port\": NVME_PORT,"},{"line_number":336,"context_line":"        \"nqn\": TARGET_NQN,"},{"line_number":337,"context_line":"        \"target_discovered\": False,"},{"line_number":338,"context_line":"        \"target_portal\": (NVME_IPS[0], 4420, \"rdma\"),"},{"line_number":339,"context_line":"        \"discard\": True,"},{"line_number":340,"context_line":"        \"target_luns\": [1, 1, 1, 1],"},{"line_number":341,"context_line":"        \"target_nqns\": [TARGET_NQN, TARGET_NQN, TARGET_NQN, TARGET_NQN],"}],"source_content_type":"text/x-python","patch_set":29,"id":"53bacd30_5d37e825","line":338,"range":{"start_line":338,"start_character":39,"end_line":338,"end_character":43},"updated":"2022-07-14 07:10:25.000000000","message":"Can the constant (NVME_PORT) be used in this line (and many other lines eg. 342 to 345, etc)?","commit_id":"3c45887e667d96a25a827b53b804e93ecf4e76ec"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"8c874998adb6bed509ad8d57816676f130b5c076","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        \"target_port\": NVME_PORT,"},{"line_number":336,"context_line":"        \"nqn\": TARGET_NQN,"},{"line_number":337,"context_line":"        \"target_discovered\": False,"},{"line_number":338,"context_line":"        \"target_portal\": (NVME_IPS[0], 4420, \"rdma\"),"},{"line_number":339,"context_line":"        \"discard\": True,"},{"line_number":340,"context_line":"        \"target_luns\": [1, 1, 1, 1],"},{"line_number":341,"context_line":"        \"target_nqns\": [TARGET_NQN, TARGET_NQN, TARGET_NQN, TARGET_NQN],"}],"source_content_type":"text/x-python","patch_set":29,"id":"d88374a5_7b4ba6e5","line":338,"range":{"start_line":338,"start_character":39,"end_line":338,"end_character":43},"in_reply_to":"53bacd30_5d37e825","updated":"2022-07-14 13:28:13.000000000","message":"Done","commit_id":"3c45887e667d96a25a827b53b804e93ecf4e76ec"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"b3fc7261de5092d8e64cf7cf16c827c58c7cc3f9","unresolved":true,"context_lines":[{"line_number":353,"context_line":"        \"volume_nguid\": \"0009714b5cb916324a9374c470002b2c8\","},{"line_number":354,"context_line":"    },"},{"line_number":355,"context_line":"}"},{"line_number":356,"context_line":"NVME_CONNECTION_INFO_AC \u003d {"},{"line_number":357,"context_line":"    \"driver_volume_type\": \"nvmeof\","},{"line_number":358,"context_line":"    \"data\": {"},{"line_number":359,"context_line":"        \"target_nqn\": TARGET_NQN,"}],"source_content_type":"text/x-python","patch_set":44,"id":"f4f2ad63_ee4cdf22","line":356,"updated":"2022-07-27 22:12:49.000000000","message":"This and other fakes related to AC are not being used as tests are currently commented. Wouldn\u0027t be better to propose them in a follow up patch later?","commit_id":"6f5d4d21b06e0d22ec3920af5deee3ee13864a63"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"3221b8026bcf963c8b3c7d88509b4fced908fc5b","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        \"volume_nguid\": \"0009714b5cb916324a9374c470002b2c8\","},{"line_number":354,"context_line":"    },"},{"line_number":355,"context_line":"}"},{"line_number":356,"context_line":"NVME_CONNECTION_INFO_AC \u003d {"},{"line_number":357,"context_line":"    \"driver_volume_type\": \"nvmeof\","},{"line_number":358,"context_line":"    \"data\": {"},{"line_number":359,"context_line":"        \"target_nqn\": TARGET_NQN,"}],"source_content_type":"text/x-python","patch_set":44,"id":"5d9a2ccb_ba114907","line":356,"in_reply_to":"f4f2ad63_ee4cdf22","updated":"2022-07-28 01:15:46.000000000","message":"Done","commit_id":"6f5d4d21b06e0d22ec3920af5deee3ee13864a63"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"b3fc7261de5092d8e64cf7cf16c827c58c7cc3f9","unresolved":true,"context_lines":[{"line_number":4584,"context_line":"            NVME_CONNECTOR,"},{"line_number":4585,"context_line":"        )"},{"line_number":4586,"context_line":""},{"line_number":4587,"context_line":"# TODO: (simondodsley) These three tests need to be uncommented for the Z-cycke"},{"line_number":4588,"context_line":"#    once AC is supported by NVMe."},{"line_number":4589,"context_line":"#"},{"line_number":4590,"context_line":"#    @mock.patch(NVME_DRIVER_OBJ + \"._get_nguid\")"}],"source_content_type":"text/x-python","patch_set":44,"id":"fdff9bb1_216df5e7","line":4587,"updated":"2022-07-27 22:12:49.000000000","message":"Are you going to uncomment these tests before merging this change? If not, I recommend moving to another patch including fakes.","commit_id":"6f5d4d21b06e0d22ec3920af5deee3ee13864a63"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"b3fc7261de5092d8e64cf7cf16c827c58c7cc3f9","unresolved":true,"context_lines":[{"line_number":4584,"context_line":"            NVME_CONNECTOR,"},{"line_number":4585,"context_line":"        )"},{"line_number":4586,"context_line":""},{"line_number":4587,"context_line":"# TODO: (simondodsley) These three tests need to be uncommented for the Z-cycke"},{"line_number":4588,"context_line":"#    once AC is supported by NVMe."},{"line_number":4589,"context_line":"#"},{"line_number":4590,"context_line":"#    @mock.patch(NVME_DRIVER_OBJ + \"._get_nguid\")"}],"source_content_type":"text/x-python","patch_set":44,"id":"c585c117_c02df9ed","line":4587,"updated":"2022-07-27 22:12:49.000000000","message":"s/Z-cycke/Z-cycle","commit_id":"6f5d4d21b06e0d22ec3920af5deee3ee13864a63"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"3221b8026bcf963c8b3c7d88509b4fced908fc5b","unresolved":false,"context_lines":[{"line_number":4584,"context_line":"            NVME_CONNECTOR,"},{"line_number":4585,"context_line":"        )"},{"line_number":4586,"context_line":""},{"line_number":4587,"context_line":"# TODO: (simondodsley) These three tests need to be uncommented for the Z-cycke"},{"line_number":4588,"context_line":"#    once AC is supported by NVMe."},{"line_number":4589,"context_line":"#"},{"line_number":4590,"context_line":"#    @mock.patch(NVME_DRIVER_OBJ + \"._get_nguid\")"}],"source_content_type":"text/x-python","patch_set":44,"id":"edfc5d06_891052ce","line":4587,"in_reply_to":"c585c117_c02df9ed","updated":"2022-07-28 01:15:46.000000000","message":"Done","commit_id":"6f5d4d21b06e0d22ec3920af5deee3ee13864a63"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"3221b8026bcf963c8b3c7d88509b4fced908fc5b","unresolved":false,"context_lines":[{"line_number":4584,"context_line":"            NVME_CONNECTOR,"},{"line_number":4585,"context_line":"        )"},{"line_number":4586,"context_line":""},{"line_number":4587,"context_line":"# TODO: (simondodsley) These three tests need to be uncommented for the Z-cycke"},{"line_number":4588,"context_line":"#    once AC is supported by NVMe."},{"line_number":4589,"context_line":"#"},{"line_number":4590,"context_line":"#    @mock.patch(NVME_DRIVER_OBJ + \"._get_nguid\")"}],"source_content_type":"text/x-python","patch_set":44,"id":"6d2620ee_2a2bec2a","line":4587,"in_reply_to":"fdff9bb1_216df5e7","updated":"2022-07-28 01:15:46.000000000","message":"Done","commit_id":"6f5d4d21b06e0d22ec3920af5deee3ee13864a63"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"d867d4e4973cb249381aea3c8e1633687401488e","unresolved":true,"context_lines":[{"line_number":87,"context_line":"NVME_IPS \u003d [\"10.0.0.\" + str(i + 1) for i in range(len(NVME_PORT_NAMES))]"},{"line_number":88,"context_line":"NVME_IPS +\u003d [\"[2001:db8::\" + str(i + 1) + \"]\""},{"line_number":89,"context_line":"             for i in range(len(NVME_PORT_NAMES))]"},{"line_number":90,"context_line":"AC_NVME_IPS \u003d [\"10.0.0.\" + str(i + 1 + len(NVME_PORT_NAMES))"},{"line_number":91,"context_line":"               for i in range(len(NVME_PORT_NAMES))]"},{"line_number":92,"context_line":"AC_NVME_IPS +\u003d [\"[2001:db8::1:\" + str(i + 1) + \"]\""},{"line_number":93,"context_line":"                for i in range(len(NVME_PORT_NAMES))]"}],"source_content_type":"text/x-python","patch_set":46,"id":"0f95b29e_f6c06c88","line":90,"updated":"2022-07-28 01:30:42.000000000","message":"this is no longer necessary","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"b8c67588771ad9a524c60da418368010b7768009","unresolved":false,"context_lines":[{"line_number":87,"context_line":"NVME_IPS \u003d [\"10.0.0.\" + str(i + 1) for i in range(len(NVME_PORT_NAMES))]"},{"line_number":88,"context_line":"NVME_IPS +\u003d [\"[2001:db8::\" + str(i + 1) + \"]\""},{"line_number":89,"context_line":"             for i in range(len(NVME_PORT_NAMES))]"},{"line_number":90,"context_line":"AC_NVME_IPS \u003d [\"10.0.0.\" + str(i + 1 + len(NVME_PORT_NAMES))"},{"line_number":91,"context_line":"               for i in range(len(NVME_PORT_NAMES))]"},{"line_number":92,"context_line":"AC_NVME_IPS +\u003d [\"[2001:db8::1:\" + str(i + 1) + \"]\""},{"line_number":93,"context_line":"                for i in range(len(NVME_PORT_NAMES))]"}],"source_content_type":"text/x-python","patch_set":46,"id":"26d1b478_cba81935","line":90,"in_reply_to":"0f95b29e_f6c06c88","updated":"2022-07-28 02:33:54.000000000","message":"Done","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"d867d4e4973cb249381aea3c8e1633687401488e","unresolved":true,"context_lines":[{"line_number":89,"context_line":"             for i in range(len(NVME_PORT_NAMES))]"},{"line_number":90,"context_line":"AC_NVME_IPS \u003d [\"10.0.0.\" + str(i + 1 + len(NVME_PORT_NAMES))"},{"line_number":91,"context_line":"               for i in range(len(NVME_PORT_NAMES))]"},{"line_number":92,"context_line":"AC_NVME_IPS +\u003d [\"[2001:db8::1:\" + str(i + 1) + \"]\""},{"line_number":93,"context_line":"                for i in range(len(NVME_PORT_NAMES))]"},{"line_number":94,"context_line":"NVME_CIDR \u003d \"0.0.0.0/0\""},{"line_number":95,"context_line":"NVME_CIDR_V6 \u003d \"::/0\""}],"source_content_type":"text/x-python","patch_set":46,"id":"0fcdece2_2265e9f7","line":92,"updated":"2022-07-28 01:30:42.000000000","message":"same","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"b8c67588771ad9a524c60da418368010b7768009","unresolved":false,"context_lines":[{"line_number":89,"context_line":"             for i in range(len(NVME_PORT_NAMES))]"},{"line_number":90,"context_line":"AC_NVME_IPS \u003d [\"10.0.0.\" + str(i + 1 + len(NVME_PORT_NAMES))"},{"line_number":91,"context_line":"               for i in range(len(NVME_PORT_NAMES))]"},{"line_number":92,"context_line":"AC_NVME_IPS +\u003d [\"[2001:db8::1:\" + str(i + 1) + \"]\""},{"line_number":93,"context_line":"                for i in range(len(NVME_PORT_NAMES))]"},{"line_number":94,"context_line":"NVME_CIDR \u003d \"0.0.0.0/0\""},{"line_number":95,"context_line":"NVME_CIDR_V6 \u003d \"::/0\""}],"source_content_type":"text/x-python","patch_set":46,"id":"c17fe37b_b55a88de","line":92,"in_reply_to":"0fcdece2_2265e9f7","updated":"2022-07-28 02:33:54.000000000","message":"Done","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"d867d4e4973cb249381aea3c8e1633687401488e","unresolved":true,"context_lines":[{"line_number":135,"context_line":"ISCSI_CONNECTOR \u003d {\"initiator\": INITIATOR_IQN, \"host\": HOSTNAME}"},{"line_number":136,"context_line":"FC_CONNECTOR \u003d {\"wwpns\": {INITIATOR_WWN}, \"host\": HOSTNAME}"},{"line_number":137,"context_line":"TARGET_NQN \u003d \"nqn.2010-06.com.purestorage:flasharray.12345abc\""},{"line_number":138,"context_line":"AC_TARGET_NQN \u003d \"nqn.2010-06.com.purestorage:flasharray.67890def\""},{"line_number":139,"context_line":"TARGET_IQN \u003d \"iqn.2010-06.com.purestorage:flasharray.12345abc\""},{"line_number":140,"context_line":"AC_TARGET_IQN \u003d \"iqn.2018-06.com.purestorage:flasharray.67890def\""},{"line_number":141,"context_line":"TARGET_WWN \u003d \"21000024ff59fe94\""}],"source_content_type":"text/x-python","patch_set":46,"id":"bca71883_fbf66d72","line":138,"updated":"2022-07-28 01:30:42.000000000","message":"same","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"b8c67588771ad9a524c60da418368010b7768009","unresolved":false,"context_lines":[{"line_number":135,"context_line":"ISCSI_CONNECTOR \u003d {\"initiator\": INITIATOR_IQN, \"host\": HOSTNAME}"},{"line_number":136,"context_line":"FC_CONNECTOR \u003d {\"wwpns\": {INITIATOR_WWN}, \"host\": HOSTNAME}"},{"line_number":137,"context_line":"TARGET_NQN \u003d \"nqn.2010-06.com.purestorage:flasharray.12345abc\""},{"line_number":138,"context_line":"AC_TARGET_NQN \u003d \"nqn.2010-06.com.purestorage:flasharray.67890def\""},{"line_number":139,"context_line":"TARGET_IQN \u003d \"iqn.2010-06.com.purestorage:flasharray.12345abc\""},{"line_number":140,"context_line":"AC_TARGET_IQN \u003d \"iqn.2018-06.com.purestorage:flasharray.67890def\""},{"line_number":141,"context_line":"TARGET_WWN \u003d \"21000024ff59fe94\""}],"source_content_type":"text/x-python","patch_set":46,"id":"86b2aa47_213393a7","line":138,"in_reply_to":"bca71883_fbf66d72","updated":"2022-07-28 02:33:54.000000000","message":"Done","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"d867d4e4973cb249381aea3c8e1633687401488e","unresolved":true,"context_lines":[{"line_number":171,"context_line":"               \"portal\": ip + \":\" + TARGET_ROCE_PORT,"},{"line_number":172,"context_line":"               \"wwn\": None,"},{"line_number":173,"context_line":"               } for name, ip in zip(NVME_PORT_NAMES * 2, NVME_IPS)]"},{"line_number":174,"context_line":"AC_NVME_PORTS \u003d [{\"name\": name,"},{"line_number":175,"context_line":"                  \"nqn\": AC_TARGET_NQN,"},{"line_number":176,"context_line":"                  \"iqn\": None,"},{"line_number":177,"context_line":"                  \"portal\": ip + \":\" + TARGET_ROCE_PORT,"}],"source_content_type":"text/x-python","patch_set":46,"id":"ce713560_a84d9613","line":174,"updated":"2022-07-28 01:30:42.000000000","message":"this is no longer necessary","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"b8c67588771ad9a524c60da418368010b7768009","unresolved":false,"context_lines":[{"line_number":171,"context_line":"               \"portal\": ip + \":\" + TARGET_ROCE_PORT,"},{"line_number":172,"context_line":"               \"wwn\": None,"},{"line_number":173,"context_line":"               } for name, ip in zip(NVME_PORT_NAMES * 2, NVME_IPS)]"},{"line_number":174,"context_line":"AC_NVME_PORTS \u003d [{\"name\": name,"},{"line_number":175,"context_line":"                  \"nqn\": AC_TARGET_NQN,"},{"line_number":176,"context_line":"                  \"iqn\": None,"},{"line_number":177,"context_line":"                  \"portal\": ip + \":\" + TARGET_ROCE_PORT,"}],"source_content_type":"text/x-python","patch_set":46,"id":"d69b287e_fe7da012","line":174,"in_reply_to":"ce713560_a84d9613","updated":"2022-07-28 02:33:54.000000000","message":"Done","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"}],"cinder/volume/drivers/pure.py":[{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"f17864e2a6491de7348bab66301bcf2e711ee43b","unresolved":true,"context_lines":[{"line_number":283,"context_line":"                    repl_type \u003d\u003d REPLICATION_TYPE_SYNC"},{"line_number":284,"context_line":"                    and \"NVMe\" in self._storage_protocol"},{"line_number":285,"context_line":"                ):"},{"line_number":286,"context_line":"                    msg \u003d _(\u0027NVMe driver does not supoort synchronous \u0027"},{"line_number":287,"context_line":"                            \u0027replication\u0027)"},{"line_number":288,"context_line":"                    raise PureDriverException(reason\u003dmsg)"},{"line_number":289,"context_line":"                uniform \u003d strutils.bool_from_string("}],"source_content_type":"text/x-python","patch_set":11,"id":"b843252a_c130e7d0","line":286,"range":{"start_line":286,"start_character":50,"end_line":286,"end_character":57},"updated":"2022-01-17 12:03:15.000000000","message":"nit: support","commit_id":"3fbd285a9430a8ae7b3abb32cd08e93872c0557b"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1c03a492f1650e02dbd5423e60335b0101cfe66e","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                    repl_type \u003d\u003d REPLICATION_TYPE_SYNC"},{"line_number":284,"context_line":"                    and \"NVMe\" in self._storage_protocol"},{"line_number":285,"context_line":"                ):"},{"line_number":286,"context_line":"                    msg \u003d _(\u0027NVMe driver does not supoort synchronous \u0027"},{"line_number":287,"context_line":"                            \u0027replication\u0027)"},{"line_number":288,"context_line":"                    raise PureDriverException(reason\u003dmsg)"},{"line_number":289,"context_line":"                uniform \u003d strutils.bool_from_string("}],"source_content_type":"text/x-python","patch_set":11,"id":"9917eab4_b4ddd316","line":286,"range":{"start_line":286,"start_character":50,"end_line":286,"end_character":57},"in_reply_to":"b843252a_c130e7d0","updated":"2022-03-04 19:39:59.000000000","message":"Ack","commit_id":"3fbd285a9430a8ae7b3abb32cd08e93872c0557b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b55ce6cde3823e54f20d5fada9c1401109de9790","unresolved":true,"context_lines":[{"line_number":2970,"context_line":"        \"\"\""},{"line_number":2971,"context_line":"        array \u003d self._get_current_array()"},{"line_number":2972,"context_line":"        volume_info \u003d array.get_volume(pure_vol_name)"},{"line_number":2973,"context_line":"        nguid \u003d \"00\" + volume_info[\u0027serial\u0027][0:14] + \\"},{"line_number":2974,"context_line":"                \"24a937\" + volume_info[\u0027serial\u0027][-10:]"},{"line_number":2975,"context_line":"        return nguid.lower()"},{"line_number":2976,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fb9ee451_63341a5f","line":2973,"range":{"start_line":2973,"start_character":45,"end_line":2973,"end_character":49},"updated":"2022-01-18 10:24:39.000000000","message":"On L#2967, it\u0027s mentioned we will be taking 7 bytes of volume serial number but here we\u0027re taking 14 bytes? (excluding the overhead, 1 char \u003d 1 byte in python)","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1c03a492f1650e02dbd5423e60335b0101cfe66e","unresolved":false,"context_lines":[{"line_number":2970,"context_line":"        \"\"\""},{"line_number":2971,"context_line":"        array \u003d self._get_current_array()"},{"line_number":2972,"context_line":"        volume_info \u003d array.get_volume(pure_vol_name)"},{"line_number":2973,"context_line":"        nguid \u003d \"00\" + volume_info[\u0027serial\u0027][0:14] + \\"},{"line_number":2974,"context_line":"                \"24a937\" + volume_info[\u0027serial\u0027][-10:]"},{"line_number":2975,"context_line":"        return nguid.lower()"},{"line_number":2976,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"465daa13_57fc80a3","line":2973,"range":{"start_line":2973,"start_character":45,"end_line":2973,"end_character":49},"in_reply_to":"4736e8fc_2232c6c3","updated":"2022-03-04 19:39:59.000000000","message":"Done","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2f376a1b738154762123df0394bffd771a3623b7","unresolved":true,"context_lines":[{"line_number":2970,"context_line":"        \"\"\""},{"line_number":2971,"context_line":"        array \u003d self._get_current_array()"},{"line_number":2972,"context_line":"        volume_info \u003d array.get_volume(pure_vol_name)"},{"line_number":2973,"context_line":"        nguid \u003d \"00\" + volume_info[\u0027serial\u0027][0:14] + \\"},{"line_number":2974,"context_line":"                \"24a937\" + volume_info[\u0027serial\u0027][-10:]"},{"line_number":2975,"context_line":"        return nguid.lower()"},{"line_number":2976,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"4736e8fc_2232c6c3","line":2973,"range":{"start_line":2973,"start_character":45,"end_line":2973,"end_character":49},"in_reply_to":"fb9ee451_63341a5f","updated":"2022-01-18 13:48:06.000000000","message":"To disambiguate I will call these octets, but in UUID parlance they are `bytes`","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b55ce6cde3823e54f20d5fada9c1401109de9790","unresolved":true,"context_lines":[{"line_number":2970,"context_line":"        \"\"\""},{"line_number":2971,"context_line":"        array \u003d self._get_current_array()"},{"line_number":2972,"context_line":"        volume_info \u003d array.get_volume(pure_vol_name)"},{"line_number":2973,"context_line":"        nguid \u003d \"00\" + volume_info[\u0027serial\u0027][0:14] + \\"},{"line_number":2974,"context_line":"                \"24a937\" + volume_info[\u0027serial\u0027][-10:]"},{"line_number":2975,"context_line":"        return nguid.lower()"},{"line_number":2976,"context_line":""},{"line_number":2977,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"794acf5b_d850e683","line":2974,"range":{"start_line":2973,"start_character":16,"end_line":2974,"end_character":54},"updated":"2022-01-18 10:24:39.000000000","message":"please use parenthesis () to enclose this rather than \\","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b55ce6cde3823e54f20d5fada9c1401109de9790","unresolved":true,"context_lines":[{"line_number":2971,"context_line":"        array \u003d self._get_current_array()"},{"line_number":2972,"context_line":"        volume_info \u003d array.get_volume(pure_vol_name)"},{"line_number":2973,"context_line":"        nguid \u003d \"00\" + volume_info[\u0027serial\u0027][0:14] + \\"},{"line_number":2974,"context_line":"                \"24a937\" + volume_info[\u0027serial\u0027][-10:]"},{"line_number":2975,"context_line":"        return nguid.lower()"},{"line_number":2976,"context_line":""},{"line_number":2977,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"76341e49_c37d8bf7","line":2974,"range":{"start_line":2974,"start_character":49,"end_line":2974,"end_character":53},"updated":"2022-01-18 10:24:39.000000000","message":"same, here we are taking 10 chars instead of 5","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1c03a492f1650e02dbd5423e60335b0101cfe66e","unresolved":false,"context_lines":[{"line_number":2971,"context_line":"        array \u003d self._get_current_array()"},{"line_number":2972,"context_line":"        volume_info \u003d array.get_volume(pure_vol_name)"},{"line_number":2973,"context_line":"        nguid \u003d \"00\" + volume_info[\u0027serial\u0027][0:14] + \\"},{"line_number":2974,"context_line":"                \"24a937\" + volume_info[\u0027serial\u0027][-10:]"},{"line_number":2975,"context_line":"        return nguid.lower()"},{"line_number":2976,"context_line":""},{"line_number":2977,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"e64dfcd3_c7ce94a5","line":2974,"range":{"start_line":2974,"start_character":49,"end_line":2974,"end_character":53},"in_reply_to":"175f567a_c57b3c52","updated":"2022-03-04 19:39:59.000000000","message":"Done","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2f376a1b738154762123df0394bffd771a3623b7","unresolved":true,"context_lines":[{"line_number":2971,"context_line":"        array \u003d self._get_current_array()"},{"line_number":2972,"context_line":"        volume_info \u003d array.get_volume(pure_vol_name)"},{"line_number":2973,"context_line":"        nguid \u003d \"00\" + volume_info[\u0027serial\u0027][0:14] + \\"},{"line_number":2974,"context_line":"                \"24a937\" + volume_info[\u0027serial\u0027][-10:]"},{"line_number":2975,"context_line":"        return nguid.lower()"},{"line_number":2976,"context_line":""},{"line_number":2977,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"175f567a_c57b3c52","line":2974,"range":{"start_line":2974,"start_character":49,"end_line":2974,"end_character":53},"in_reply_to":"76341e49_c37d8bf7","updated":"2022-01-18 13:48:06.000000000","message":"as above","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2f376a1b738154762123df0394bffd771a3623b7","unresolved":false,"context_lines":[{"line_number":2970,"context_line":"        \"\"\""},{"line_number":2971,"context_line":"        array \u003d self._get_current_array()"},{"line_number":2972,"context_line":"        volume_info \u003d array.get_volume(pure_vol_name)"},{"line_number":2973,"context_line":"        nguid \u003d \"00\" + volume_info[\u0027serial\u0027][0:14] + \\"},{"line_number":2974,"context_line":"                \"24a937\" + volume_info[\u0027serial\u0027][-10:]"},{"line_number":2975,"context_line":"        return nguid.lower()"},{"line_number":2976,"context_line":""},{"line_number":2977,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"353eed92_900eb350","line":2974,"range":{"start_line":2973,"start_character":16,"end_line":2974,"end_character":54},"in_reply_to":"794acf5b_d850e683","updated":"2022-01-18 13:48:06.000000000","message":"Done","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b55ce6cde3823e54f20d5fada9c1401109de9790","unresolved":true,"context_lines":[{"line_number":2978,"context_line":"    def _get_array_wwns_nqns(array):"},{"line_number":2979,"context_line":"        \"\"\"Return list of wwns from the array\"\"\""},{"line_number":2980,"context_line":"        ports \u003d array.list_ports()"},{"line_number":2981,"context_line":"        wwns \u003d [port[\"wwn\"] for port in ports if port[\"wwn\"] and port[\"nqn\"]]"},{"line_number":2982,"context_line":"        nqns \u003d [port[\"nqn\"] for port in ports if port[\"wwn\"] and port[\"nqn\"]]"},{"line_number":2983,"context_line":"        return wwns, nqns"},{"line_number":2984,"context_line":""},{"line_number":2985,"context_line":"    def _build_initiator_target_map(self, target_wwns, connector):"}],"source_content_type":"text/x-python","patch_set":12,"id":"cfed852e_3abd7201","line":2982,"range":{"start_line":2981,"start_character":0,"end_line":2982,"end_character":77},"updated":"2022-01-18 10:24:39.000000000","message":"instead of looping twice on ports with same condition, it\u0027s better to do with one interation\n\n    wwns, nqns \u003d [], []\n    for port in ports:\n        if port[\"wwn\"] and port[\"nqn\"]:\n            wwns.append(port[\"wwn\"])\n            nqns.append(port[\"nqn\"])","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2f376a1b738154762123df0394bffd771a3623b7","unresolved":false,"context_lines":[{"line_number":2978,"context_line":"    def _get_array_wwns_nqns(array):"},{"line_number":2979,"context_line":"        \"\"\"Return list of wwns from the array\"\"\""},{"line_number":2980,"context_line":"        ports \u003d array.list_ports()"},{"line_number":2981,"context_line":"        wwns \u003d [port[\"wwn\"] for port in ports if port[\"wwn\"] and port[\"nqn\"]]"},{"line_number":2982,"context_line":"        nqns \u003d [port[\"nqn\"] for port in ports if port[\"wwn\"] and port[\"nqn\"]]"},{"line_number":2983,"context_line":"        return wwns, nqns"},{"line_number":2984,"context_line":""},{"line_number":2985,"context_line":"    def _build_initiator_target_map(self, target_wwns, connector):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fd99afed_ab19cf25","line":2982,"range":{"start_line":2981,"start_character":0,"end_line":2982,"end_character":77},"in_reply_to":"cfed852e_3abd7201","updated":"2022-01-18 13:48:06.000000000","message":"Done","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b55ce6cde3823e54f20d5fada9c1401109de9790","unresolved":true,"context_lines":[{"line_number":3008,"context_line":""},{"line_number":3009,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3010,"context_line":"        \"\"\"Return dict describing existing Purity host object or None.\"\"\""},{"line_number":3011,"context_line":"        if remote:"},{"line_number":3012,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3013,"context_line":"        else:"},{"line_number":3014,"context_line":"            hosts \u003d array.list_hosts()"},{"line_number":3015,"context_line":"        matching_hosts \u003d []"},{"line_number":3016,"context_line":"        for host in hosts:"},{"line_number":3017,"context_line":"            if connector[\"nqn\"] in host[\"nqn\"]:"}],"source_content_type":"text/x-python","patch_set":12,"id":"f34a5b53_05841593","line":3014,"range":{"start_line":3011,"start_character":0,"end_line":3014,"end_character":38},"updated":"2022-01-18 10:24:39.000000000","message":"can\u0027t we just get this as\n    hosts \u003d array.list_hosts(remote\u003dremote)","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1c03a492f1650e02dbd5423e60335b0101cfe66e","unresolved":false,"context_lines":[{"line_number":3008,"context_line":""},{"line_number":3009,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3010,"context_line":"        \"\"\"Return dict describing existing Purity host object or None.\"\"\""},{"line_number":3011,"context_line":"        if remote:"},{"line_number":3012,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3013,"context_line":"        else:"},{"line_number":3014,"context_line":"            hosts \u003d array.list_hosts()"},{"line_number":3015,"context_line":"        matching_hosts \u003d []"},{"line_number":3016,"context_line":"        for host in hosts:"},{"line_number":3017,"context_line":"            if connector[\"nqn\"] in host[\"nqn\"]:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7de64032_c0f6cc46","line":3014,"range":{"start_line":3011,"start_character":0,"end_line":3014,"end_character":38},"in_reply_to":"c6978361_fcff14c0","updated":"2022-03-04 19:39:59.000000000","message":"Done","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2f376a1b738154762123df0394bffd771a3623b7","unresolved":true,"context_lines":[{"line_number":3008,"context_line":""},{"line_number":3009,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3010,"context_line":"        \"\"\"Return dict describing existing Purity host object or None.\"\"\""},{"line_number":3011,"context_line":"        if remote:"},{"line_number":3012,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3013,"context_line":"        else:"},{"line_number":3014,"context_line":"            hosts \u003d array.list_hosts()"},{"line_number":3015,"context_line":"        matching_hosts \u003d []"},{"line_number":3016,"context_line":"        for host in hosts:"},{"line_number":3017,"context_line":"            if connector[\"nqn\"] in host[\"nqn\"]:"}],"source_content_type":"text/x-python","patch_set":12,"id":"c6978361_fcff14c0","line":3014,"range":{"start_line":3011,"start_character":0,"end_line":3014,"end_character":38},"in_reply_to":"f34a5b53_05841593","updated":"2022-01-18 13:48:06.000000000","message":"Sadly not - there is a subtle output difference between array.list_hosts(remote\u003dFalse) and array.list_hosts()","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b55ce6cde3823e54f20d5fada9c1401109de9790","unresolved":true,"context_lines":[{"line_number":3012,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3013,"context_line":"        else:"},{"line_number":3014,"context_line":"            hosts \u003d array.list_hosts()"},{"line_number":3015,"context_line":"        matching_hosts \u003d []"},{"line_number":3016,"context_line":"        for host in hosts:"},{"line_number":3017,"context_line":"            if connector[\"nqn\"] in host[\"nqn\"]:"},{"line_number":3018,"context_line":"                matching_hosts.append(host)"},{"line_number":3019,"context_line":"        return matching_hosts"},{"line_number":3020,"context_line":""},{"line_number":3021,"context_line":"    @pure_driver_debug_trace"}],"source_content_type":"text/x-python","patch_set":12,"id":"da0bfd27_c2024996","line":3018,"range":{"start_line":3015,"start_character":0,"end_line":3018,"end_character":43},"updated":"2022-01-18 10:24:39.000000000","message":"this can be simplified with a list comprehension,\n\n    matching_hosts \u003d [host for host in hosts if connector[\"nqn\"] in host[\"nqn\"]]","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2f376a1b738154762123df0394bffd771a3623b7","unresolved":false,"context_lines":[{"line_number":3012,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3013,"context_line":"        else:"},{"line_number":3014,"context_line":"            hosts \u003d array.list_hosts()"},{"line_number":3015,"context_line":"        matching_hosts \u003d []"},{"line_number":3016,"context_line":"        for host in hosts:"},{"line_number":3017,"context_line":"            if connector[\"nqn\"] in host[\"nqn\"]:"},{"line_number":3018,"context_line":"                matching_hosts.append(host)"},{"line_number":3019,"context_line":"        return matching_hosts"},{"line_number":3020,"context_line":""},{"line_number":3021,"context_line":"    @pure_driver_debug_trace"}],"source_content_type":"text/x-python","patch_set":12,"id":"6a62f0b7_287af200","line":3018,"range":{"start_line":3015,"start_character":0,"end_line":3018,"end_character":43},"in_reply_to":"da0bfd27_c2024996","updated":"2022-01-18 13:48:06.000000000","message":"Done","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b55ce6cde3823e54f20d5fada9c1401109de9790","unresolved":true,"context_lines":[{"line_number":3038,"context_line":"            connection \u003d self._connect(array, pure_vol_name, connector)"},{"line_number":3039,"context_line":"            if self.transport_type \u003d\u003d \"fc\":"},{"line_number":3040,"context_line":"                array_wwns, array_nqns \u003d self._get_array_wwns_nqns(array)"},{"line_number":3041,"context_line":"                for nqn in array_nqns:"},{"line_number":3042,"context_line":"                    target_nqns.append(nqn)"},{"line_number":3043,"context_line":"                for wwn in array_wwns:"},{"line_number":3044,"context_line":"                    target_wwns.append(wwn)"},{"line_number":3045,"context_line":"                    target_luns.append(connection[\"lun\"])"},{"line_number":3046,"context_line":""},{"line_number":3047,"context_line":"                # Build the zoning map based on *all* wwns, this could be"},{"line_number":3048,"context_line":"                # multiple arrays connecting to the same host with a strected"}],"source_content_type":"text/x-python","patch_set":12,"id":"c33fcce5_1e058540","line":3045,"range":{"start_line":3041,"start_character":0,"end_line":3045,"end_character":57},"updated":"2022-01-18 10:24:39.000000000","message":"This can be simplified as,\n    import copy\n\n    target_nqns \u003d copy.deepcopy(array_nqns)\n    target_wwns \u003d copy.deepcopy(array_wwns)\n    target_luns \u003d [connection[\"lun\"] * len(target_wwns)]","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2f376a1b738154762123df0394bffd771a3623b7","unresolved":false,"context_lines":[{"line_number":3038,"context_line":"            connection \u003d self._connect(array, pure_vol_name, connector)"},{"line_number":3039,"context_line":"            if self.transport_type \u003d\u003d \"fc\":"},{"line_number":3040,"context_line":"                array_wwns, array_nqns \u003d self._get_array_wwns_nqns(array)"},{"line_number":3041,"context_line":"                for nqn in array_nqns:"},{"line_number":3042,"context_line":"                    target_nqns.append(nqn)"},{"line_number":3043,"context_line":"                for wwn in array_wwns:"},{"line_number":3044,"context_line":"                    target_wwns.append(wwn)"},{"line_number":3045,"context_line":"                    target_luns.append(connection[\"lun\"])"},{"line_number":3046,"context_line":""},{"line_number":3047,"context_line":"                # Build the zoning map based on *all* wwns, this could be"},{"line_number":3048,"context_line":"                # multiple arrays connecting to the same host with a strected"}],"source_content_type":"text/x-python","patch_set":12,"id":"032291ba_9ffc23b4","line":3045,"range":{"start_line":3041,"start_character":0,"end_line":3045,"end_character":57},"in_reply_to":"c33fcce5_1e058540","updated":"2022-01-18 13:48:06.000000000","message":"Done","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"b55ce6cde3823e54f20d5fada9c1401109de9790","unresolved":true,"context_lines":[{"line_number":3059,"context_line":"                        \"target_luns\": target_luns,"},{"line_number":3060,"context_line":"                        \"nqn\": target_nqns[0],"},{"line_number":3061,"context_line":"                        \"target_nqns\": target_nqns,"},{"line_number":3062,"context_line":"                        \"target_wwn\": target_wwns,"},{"line_number":3063,"context_line":"                        \"target_wwns\": target_wwns,"},{"line_number":3064,"context_line":"                        \"initiator_target_map\": init_targ_map,"},{"line_number":3065,"context_line":"                        \"discard\": True,"}],"source_content_type":"text/x-python","patch_set":12,"id":"c7b7aea2_00dd40be","line":3062,"range":{"start_line":3062,"start_character":38,"end_line":3062,"end_character":49},"updated":"2022-01-18 10:24:39.000000000","message":"shouldn\u0027t this be target_wwns[0]","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"2f376a1b738154762123df0394bffd771a3623b7","unresolved":false,"context_lines":[{"line_number":3059,"context_line":"                        \"target_luns\": target_luns,"},{"line_number":3060,"context_line":"                        \"nqn\": target_nqns[0],"},{"line_number":3061,"context_line":"                        \"target_nqns\": target_nqns,"},{"line_number":3062,"context_line":"                        \"target_wwn\": target_wwns,"},{"line_number":3063,"context_line":"                        \"target_wwns\": target_wwns,"},{"line_number":3064,"context_line":"                        \"initiator_target_map\": init_targ_map,"},{"line_number":3065,"context_line":"                        \"discard\": True,"}],"source_content_type":"text/x-python","patch_set":12,"id":"aea0963c_911f2427","line":3062,"range":{"start_line":3062,"start_character":38,"end_line":3062,"end_character":49},"in_reply_to":"c7b7aea2_00dd40be","updated":"2022-01-18 13:48:06.000000000","message":"Done","commit_id":"87ec02d1cfbb25b3114fb92771a277838c8ec2d5"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":true,"context_lines":[{"line_number":106,"context_line":"                     \"targets hosts are allowed to connect to. It supports \""},{"line_number":107,"context_line":"                     \"IPv4 and IPv6 subnets. This parameter supersedes \""},{"line_number":108,"context_line":"                     \"pure_nvme_cidr.\"),"},{"line_number":109,"context_line":"    cfg.StrOpt(\"pure_nvme_transport\", default\u003d\"roce\","},{"line_number":110,"context_line":"               help\u003d\"The NVMe transport layer to be used by the NVMe driver. \""},{"line_number":111,"context_line":"                    \"This only supports RoCE at this time.\"),"},{"line_number":112,"context_line":"    cfg.BoolOpt(\"pure_eradicate_on_delete\","}],"source_content_type":"text/x-python","patch_set":13,"id":"65b06e53_85db8dec","line":109,"updated":"2022-01-18 23:28:51.000000000","message":"Might as well add \u0027choices\u0027 to this (like you do at line 65), will make it easier to configure.","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5bd828bd79482f3f9c4c2a7e1c1fd34ef022cfa1","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                     \"targets hosts are allowed to connect to. It supports \""},{"line_number":107,"context_line":"                     \"IPv4 and IPv6 subnets. This parameter supersedes \""},{"line_number":108,"context_line":"                     \"pure_nvme_cidr.\"),"},{"line_number":109,"context_line":"    cfg.StrOpt(\"pure_nvme_transport\", default\u003d\"roce\","},{"line_number":110,"context_line":"               help\u003d\"The NVMe transport layer to be used by the NVMe driver. \""},{"line_number":111,"context_line":"                    \"This only supports RoCE at this time.\"),"},{"line_number":112,"context_line":"    cfg.BoolOpt(\"pure_eradicate_on_delete\","}],"source_content_type":"text/x-python","patch_set":13,"id":"103a0606_2340933d","line":109,"in_reply_to":"65b06e53_85db8dec","updated":"2022-01-19 00:18:54.000000000","message":"Done","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"cc5b5d854dbd96292d83dd27ade00c33db6eb840","unresolved":true,"context_lines":[{"line_number":2928,"context_line":""},{"line_number":2929,"context_line":""},{"line_number":2930,"context_line":"@interface.volumedriver"},{"line_number":2931,"context_line":"class PureNVMEDriver(PureBaseVolumeDriver, driver.BaseVD):"},{"line_number":2932,"context_line":"    \"\"\"OpenStack Volume Driver to support Pure Storage FlashArray."},{"line_number":2933,"context_line":""},{"line_number":2934,"context_line":"    This version of the driver enables the use of NVMe over different"}],"source_content_type":"text/x-python","patch_set":13,"id":"8b41a5b0_940cd369","line":2931,"updated":"2022-01-18 17:41:34.000000000","message":"This file is getting quite large.  With this addition, this will now have 3 drivers in it, plus the base class.","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"bcccc8003f79371b2d04004136eb257a78726830","unresolved":true,"context_lines":[{"line_number":2928,"context_line":""},{"line_number":2929,"context_line":""},{"line_number":2930,"context_line":"@interface.volumedriver"},{"line_number":2931,"context_line":"class PureNVMEDriver(PureBaseVolumeDriver, driver.BaseVD):"},{"line_number":2932,"context_line":"    \"\"\"OpenStack Volume Driver to support Pure Storage FlashArray."},{"line_number":2933,"context_line":""},{"line_number":2934,"context_line":"    This version of the driver enables the use of NVMe over different"}],"source_content_type":"text/x-python","patch_set":13,"id":"68e453f0_47f2a0f2","line":2931,"in_reply_to":"21788217_36ef79a0","updated":"2022-01-18 20:42:39.000000000","message":"You can do something like this:\nhttps://opendev.org/openstack/cinder/src/commit/23494a6d6c51451688191e1847a458f1d3cdcaa5/cinder/volume/drivers/san/__init__.py#L24-L25\n\n(Though check with Gorka, he may have a better idea.)","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":true,"context_lines":[{"line_number":2928,"context_line":""},{"line_number":2929,"context_line":""},{"line_number":2930,"context_line":"@interface.volumedriver"},{"line_number":2931,"context_line":"class PureNVMEDriver(PureBaseVolumeDriver, driver.BaseVD):"},{"line_number":2932,"context_line":"    \"\"\"OpenStack Volume Driver to support Pure Storage FlashArray."},{"line_number":2933,"context_line":""},{"line_number":2934,"context_line":"    This version of the driver enables the use of NVMe over different"}],"source_content_type":"text/x-python","patch_set":13,"id":"b9ad48cb_5080ebe5","line":2931,"in_reply_to":"68e453f0_47f2a0f2","updated":"2022-01-18 23:28:51.000000000","message":"Also, since the merge deadline is Friday, I think it would be OK to do the split in a follow up (though aim to make it happen in Yoga).","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"47174170f8175bf77fcf67668db3f24c5bc82ebc","unresolved":true,"context_lines":[{"line_number":2928,"context_line":""},{"line_number":2929,"context_line":""},{"line_number":2930,"context_line":"@interface.volumedriver"},{"line_number":2931,"context_line":"class PureNVMEDriver(PureBaseVolumeDriver, driver.BaseVD):"},{"line_number":2932,"context_line":"    \"\"\"OpenStack Volume Driver to support Pure Storage FlashArray."},{"line_number":2933,"context_line":""},{"line_number":2934,"context_line":"    This version of the driver enables the use of NVMe over different"}],"source_content_type":"text/x-python","patch_set":13,"id":"21788217_36ef79a0","line":2931,"in_reply_to":"8b41a5b0_940cd369","updated":"2022-01-18 17:48:01.000000000","message":"Fair point, but TBH I have no idea how to split this out into different files and still retain backwards compatabilitry","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5bd828bd79482f3f9c4c2a7e1c1fd34ef022cfa1","unresolved":false,"context_lines":[{"line_number":2928,"context_line":""},{"line_number":2929,"context_line":""},{"line_number":2930,"context_line":"@interface.volumedriver"},{"line_number":2931,"context_line":"class PureNVMEDriver(PureBaseVolumeDriver, driver.BaseVD):"},{"line_number":2932,"context_line":"    \"\"\"OpenStack Volume Driver to support Pure Storage FlashArray."},{"line_number":2933,"context_line":""},{"line_number":2934,"context_line":"    This version of the driver enables the use of NVMe over different"}],"source_content_type":"text/x-python","patch_set":13,"id":"30cc67d7_90e801d2","line":2931,"in_reply_to":"b9ad48cb_5080ebe5","updated":"2022-01-19 00:18:54.000000000","message":"Ack","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":true,"context_lines":[{"line_number":2942,"context_line":"        execute \u003d kwargs.pop(\"execute\", utils.execute)"},{"line_number":2943,"context_line":"        super(PureNVMEDriver, self).__init__(execute\u003dexecute,"},{"line_number":2944,"context_line":"                                             *args, **kwargs)"},{"line_number":2945,"context_line":"        # TODO (simondodsley) This check is to allow addition of FC and TCP"},{"line_number":2946,"context_line":"        # transport types in the future"},{"line_number":2947,"context_line":"        if ("},{"line_number":2948,"context_line":"            not self.configuration.pure_nvme_transport.lower()"},{"line_number":2949,"context_line":"            in SUPPORTED_NVME_TRANSPORTS"},{"line_number":2950,"context_line":"        ):"},{"line_number":2951,"context_line":"            msg \u003d _(\u0027Invalid NVMe Transport Type specified\u0027)"},{"line_number":2952,"context_line":"            raise PureDriverException(reason\u003dmsg)"},{"line_number":2953,"context_line":""},{"line_number":2954,"context_line":"        if self.configuration.pure_nvme_transport.lower() \u003d\u003d \"roce\":"},{"line_number":2955,"context_line":"            transport_type \u003d \"rdma\""}],"source_content_type":"text/x-python","patch_set":13,"id":"31e37b64_bf893dce","line":2952,"range":{"start_line":2945,"start_character":0,"end_line":2952,"end_character":49},"updated":"2022-01-18 23:28:51.000000000","message":"If you use SUPPORTED_NVME_TRANSPORTS to supply the \u0027choices\u0027 in the config option, you won\u0027t need to do this check.  You\u0027ll also be able to skip the .lower() calls below.","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5bd828bd79482f3f9c4c2a7e1c1fd34ef022cfa1","unresolved":false,"context_lines":[{"line_number":2942,"context_line":"        execute \u003d kwargs.pop(\"execute\", utils.execute)"},{"line_number":2943,"context_line":"        super(PureNVMEDriver, self).__init__(execute\u003dexecute,"},{"line_number":2944,"context_line":"                                             *args, **kwargs)"},{"line_number":2945,"context_line":"        # TODO (simondodsley) This check is to allow addition of FC and TCP"},{"line_number":2946,"context_line":"        # transport types in the future"},{"line_number":2947,"context_line":"        if ("},{"line_number":2948,"context_line":"            not self.configuration.pure_nvme_transport.lower()"},{"line_number":2949,"context_line":"            in SUPPORTED_NVME_TRANSPORTS"},{"line_number":2950,"context_line":"        ):"},{"line_number":2951,"context_line":"            msg \u003d _(\u0027Invalid NVMe Transport Type specified\u0027)"},{"line_number":2952,"context_line":"            raise PureDriverException(reason\u003dmsg)"},{"line_number":2953,"context_line":""},{"line_number":2954,"context_line":"        if self.configuration.pure_nvme_transport.lower() \u003d\u003d \"roce\":"},{"line_number":2955,"context_line":"            transport_type \u003d \"rdma\""}],"source_content_type":"text/x-python","patch_set":13,"id":"844b29c6_1f0c690a","line":2952,"range":{"start_line":2945,"start_character":0,"end_line":2952,"end_character":49},"in_reply_to":"31e37b64_bf893dce","updated":"2022-01-19 00:18:54.000000000","message":"Done","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":true,"context_lines":[{"line_number":3011,"context_line":"        return init_targ_map"},{"line_number":3012,"context_line":""},{"line_number":3013,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3014,"context_line":"        \"\"\"Return dict describing existing Purity host object or None.\"\"\""},{"line_number":3015,"context_line":"        if remote:"},{"line_number":3016,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3017,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f845c7f_39d5cd71","line":3014,"range":{"start_line":3014,"start_character":11,"end_line":3014,"end_character":70},"updated":"2022-01-18 23:28:51.000000000","message":"I don\u0027t think this is accurate -- looks like you are returning a list (possibly empty) of host objects","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1c03a492f1650e02dbd5423e60335b0101cfe66e","unresolved":false,"context_lines":[{"line_number":3011,"context_line":"        return init_targ_map"},{"line_number":3012,"context_line":""},{"line_number":3013,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3014,"context_line":"        \"\"\"Return dict describing existing Purity host object or None.\"\"\""},{"line_number":3015,"context_line":"        if remote:"},{"line_number":3016,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3017,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3551f7f2_dfe00521","line":3014,"range":{"start_line":3014,"start_character":11,"end_line":3014,"end_character":70},"in_reply_to":"28b406f8_1c928777","updated":"2022-03-04 19:39:59.000000000","message":"Done","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5bd828bd79482f3f9c4c2a7e1c1fd34ef022cfa1","unresolved":true,"context_lines":[{"line_number":3011,"context_line":"        return init_targ_map"},{"line_number":3012,"context_line":""},{"line_number":3013,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3014,"context_line":"        \"\"\"Return dict describing existing Purity host object or None.\"\"\""},{"line_number":3015,"context_line":"        if remote:"},{"line_number":3016,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3017,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"28b406f8_1c928777","line":3014,"range":{"start_line":3014,"start_character":11,"end_line":3014,"end_character":70},"in_reply_to":"5f845c7f_39d5cd71","updated":"2022-01-19 00:18:54.000000000","message":"True - it\u0027s a list of dicts","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":true,"context_lines":[{"line_number":3012,"context_line":""},{"line_number":3013,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3014,"context_line":"        \"\"\"Return dict describing existing Purity host object or None.\"\"\""},{"line_number":3015,"context_line":"        if remote:"},{"line_number":3016,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3017,"context_line":"        else:"},{"line_number":3018,"context_line":"            hosts \u003d array.list_hosts()"},{"line_number":3019,"context_line":"        matching_hosts \u003d [host for host in hosts"},{"line_number":3020,"context_line":"                          if connector[\u0027nqn\u0027] in host[\u0027nqn\u0027]]"},{"line_number":3021,"context_line":"        return matching_hosts"}],"source_content_type":"text/x-python","patch_set":13,"id":"52f23354_0a4aadfb","line":3018,"range":{"start_line":3015,"start_character":0,"end_line":3018,"end_character":38},"updated":"2022-01-18 23:28:51.000000000","message":"I\u0027m having deja vu here.  I think you can replace the conditional block with\n\n  hosts \u003d array.list_hosts(remote\u003dremote)","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1c03a492f1650e02dbd5423e60335b0101cfe66e","unresolved":false,"context_lines":[{"line_number":3012,"context_line":""},{"line_number":3013,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3014,"context_line":"        \"\"\"Return dict describing existing Purity host object or None.\"\"\""},{"line_number":3015,"context_line":"        if remote:"},{"line_number":3016,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3017,"context_line":"        else:"},{"line_number":3018,"context_line":"            hosts \u003d array.list_hosts()"},{"line_number":3019,"context_line":"        matching_hosts \u003d [host for host in hosts"},{"line_number":3020,"context_line":"                          if connector[\u0027nqn\u0027] in host[\u0027nqn\u0027]]"},{"line_number":3021,"context_line":"        return matching_hosts"}],"source_content_type":"text/x-python","patch_set":13,"id":"024e8b78_68057897","line":3018,"range":{"start_line":3015,"start_character":0,"end_line":3018,"end_character":38},"in_reply_to":"2ba23516_6078a7a9","updated":"2022-03-04 19:39:59.000000000","message":"Done","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5bd828bd79482f3f9c4c2a7e1c1fd34ef022cfa1","unresolved":true,"context_lines":[{"line_number":3012,"context_line":""},{"line_number":3013,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3014,"context_line":"        \"\"\"Return dict describing existing Purity host object or None.\"\"\""},{"line_number":3015,"context_line":"        if remote:"},{"line_number":3016,"context_line":"            hosts \u003d array.list_hosts(remote\u003dTrue)"},{"line_number":3017,"context_line":"        else:"},{"line_number":3018,"context_line":"            hosts \u003d array.list_hosts()"},{"line_number":3019,"context_line":"        matching_hosts \u003d [host for host in hosts"},{"line_number":3020,"context_line":"                          if connector[\u0027nqn\u0027] in host[\u0027nqn\u0027]]"},{"line_number":3021,"context_line":"        return matching_hosts"}],"source_content_type":"text/x-python","patch_set":13,"id":"2ba23516_6078a7a9","line":3018,"range":{"start_line":3015,"start_character":0,"end_line":3018,"end_character":38},"in_reply_to":"52f23354_0a4aadfb","updated":"2022-01-19 00:18:54.000000000","message":"After checking, this can be changed","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":true,"context_lines":[{"line_number":3045,"context_line":"                target_luns \u003d [connection[\"lun\"] + len(target_wwns)]"},{"line_number":3046,"context_line":""},{"line_number":3047,"context_line":"                # Build the zoning map based on *all* wwns, this could be"},{"line_number":3048,"context_line":"                # multiple arrays connecting to the same host with a strected"},{"line_number":3049,"context_line":"                # volume if and when sync-rep is supported on NVMe."},{"line_number":3050,"context_line":"                init_targ_map \u003d self._build_initiator_target_map(target_wwns,"},{"line_number":3051,"context_line":"                                                                 connector)"}],"source_content_type":"text/x-python","patch_set":13,"id":"38ae061c_0a67acf9","line":3048,"range":{"start_line":3048,"start_character":69,"end_line":3048,"end_character":77},"updated":"2022-01-18 23:28:51.000000000","message":"should this be \u0027stretched\u0027?","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5bd828bd79482f3f9c4c2a7e1c1fd34ef022cfa1","unresolved":false,"context_lines":[{"line_number":3045,"context_line":"                target_luns \u003d [connection[\"lun\"] + len(target_wwns)]"},{"line_number":3046,"context_line":""},{"line_number":3047,"context_line":"                # Build the zoning map based on *all* wwns, this could be"},{"line_number":3048,"context_line":"                # multiple arrays connecting to the same host with a strected"},{"line_number":3049,"context_line":"                # volume if and when sync-rep is supported on NVMe."},{"line_number":3050,"context_line":"                init_targ_map \u003d self._build_initiator_target_map(target_wwns,"},{"line_number":3051,"context_line":"                                                                 connector)"}],"source_content_type":"text/x-python","patch_set":13,"id":"2b3cd710_d0cb474b","line":3048,"range":{"start_line":3048,"start_character":69,"end_line":3048,"end_character":77},"in_reply_to":"38ae061c_0a67acf9","updated":"2022-01-19 00:18:54.000000000","message":"Done","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"9f85a78ee979ad0af93b191b67c191269a538f89","unresolved":true,"context_lines":[{"line_number":3034,"context_line":"                target_luns \u003d [connection[\"lun\"] + len(target_wwns)]"},{"line_number":3035,"context_line":""},{"line_number":3036,"context_line":"                # Build the zoning map based on *all* wwns, this could be"},{"line_number":3037,"context_line":"                # multiple arrays connecting to the same host with a stretced"},{"line_number":3038,"context_line":"                # volume if and when sync-rep is supported on NVMe."},{"line_number":3039,"context_line":"                init_targ_map \u003d self._build_initiator_target_map(target_wwns,"},{"line_number":3040,"context_line":"                                                                 connector)"}],"source_content_type":"text/x-python","patch_set":14,"id":"2b057a3a_f7f740dd","line":3037,"range":{"start_line":3037,"start_character":69,"end_line":3037,"end_character":77},"updated":"2022-01-19 04:36:15.000000000","message":"stretched?","commit_id":"0477b51e5c9a4b8baaa1f43a7fb321adb2e2b6de"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"8ec18c165bed83750ba64ce2829817e85710ab16","unresolved":false,"context_lines":[{"line_number":3034,"context_line":"                target_luns \u003d [connection[\"lun\"] + len(target_wwns)]"},{"line_number":3035,"context_line":""},{"line_number":3036,"context_line":"                # Build the zoning map based on *all* wwns, this could be"},{"line_number":3037,"context_line":"                # multiple arrays connecting to the same host with a stretced"},{"line_number":3038,"context_line":"                # volume if and when sync-rep is supported on NVMe."},{"line_number":3039,"context_line":"                init_targ_map \u003d self._build_initiator_target_map(target_wwns,"},{"line_number":3040,"context_line":"                                                                 connector)"}],"source_content_type":"text/x-python","patch_set":14,"id":"97164109_6369e51c","line":3037,"range":{"start_line":3037,"start_character":69,"end_line":3037,"end_character":77},"in_reply_to":"2b057a3a_f7f740dd","updated":"2022-01-19 13:41:38.000000000","message":"Done","commit_id":"0477b51e5c9a4b8baaa1f43a7fb321adb2e2b6de"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                     \"targets hosts are allowed to connect to. It supports \""},{"line_number":98,"context_line":"                     \"IPv4 and IPv6 subnets. This parameter supersedes \""},{"line_number":99,"context_line":"                     \"pure_iscsi_cidr.\"),"},{"line_number":100,"context_line":"    cfg.StrOpt(\"pure_nvme_cidr\", default\u003d\"0.0.0.0/0\","},{"line_number":101,"context_line":"               help\u003d\"CIDR of FlashArray NVMe targets hosts are allowed to \""},{"line_number":102,"context_line":"                    \"connect to. Default will allow connection to any \""},{"line_number":103,"context_line":"                    \"IPv4 address. This parameter now supports IPv6 subnets. \""},{"line_number":104,"context_line":"                    \"Ignored when pure_nvme_cidr_list is set.\"),"},{"line_number":105,"context_line":"    cfg.ListOpt(\"pure_nvme_cidr_list\", default\u003dNone,"},{"line_number":106,"context_line":"                help\u003d\"Comma-separated list of CIDR of FlashArray NVMe \""},{"line_number":107,"context_line":"                     \"targets hosts are allowed to connect to. It supports \""}],"source_content_type":"text/x-python","patch_set":21,"id":"16cc3b48_e2cd0ba2","line":104,"range":{"start_line":100,"start_character":0,"end_line":104,"end_character":64},"updated":"2022-07-27 15:50:35.000000000","message":"I don\u0027t really like this whole pure_nvme_cidr and then pure_nvme_cidr_list.  Since the latter it\u0027s a comma separated list, setting a single element is done exactly the same way as pure_nvme_cidr.\n\nNot downvoting since it\u0027s consistent with the iscsi definitions.","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":108,"context_line":"                     \"IPv4 and IPv6 subnets. This parameter supersedes \""},{"line_number":109,"context_line":"                     \"pure_nvme_cidr.\"),"},{"line_number":110,"context_line":"    cfg.StrOpt(\"pure_nvme_transport\", default\u003d\"roce\","},{"line_number":111,"context_line":"               choices\u003d[\u0027roce\u0027, \u0027fc\u0027],"},{"line_number":112,"context_line":"               help\u003d\"The NVMe transport layer to be used by the NVMe driver. \""},{"line_number":113,"context_line":"                    \"This only supports RoCE and FC at this time.\"),"},{"line_number":114,"context_line":"    cfg.BoolOpt(\"pure_eradicate_on_delete\","}],"source_content_type":"text/x-python","patch_set":21,"id":"121ddd4e_fec801ce","line":111,"range":{"start_line":111,"start_character":32,"end_line":111,"end_character":36},"updated":"2022-07-27 15:50:35.000000000","message":"-1: This is not supported by os-brick for NVMe-oF, so the driver should not present it as a choice yet.","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                     \"IPv4 and IPv6 subnets. This parameter supersedes \""},{"line_number":109,"context_line":"                     \"pure_nvme_cidr.\"),"},{"line_number":110,"context_line":"    cfg.StrOpt(\"pure_nvme_transport\", default\u003d\"roce\","},{"line_number":111,"context_line":"               choices\u003d[\u0027roce\u0027, \u0027fc\u0027],"},{"line_number":112,"context_line":"               help\u003d\"The NVMe transport layer to be used by the NVMe driver. \""},{"line_number":113,"context_line":"                    \"This only supports RoCE and FC at this time.\"),"},{"line_number":114,"context_line":"    cfg.BoolOpt(\"pure_eradicate_on_delete\","}],"source_content_type":"text/x-python","patch_set":21,"id":"b48255b4_381144bf","line":111,"range":{"start_line":111,"start_character":32,"end_line":111,"end_character":36},"in_reply_to":"121ddd4e_fec801ce","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":2951,"context_line":""},{"line_number":2952,"context_line":""},{"line_number":2953,"context_line":"@interface.volumedriver"},{"line_number":2954,"context_line":"class PureNVMEDriver(PureBaseVolumeDriver, driver.BaseVD):"},{"line_number":2955,"context_line":"    \"\"\"OpenStack Volume Driver to support Pure Storage FlashArray."},{"line_number":2956,"context_line":""},{"line_number":2957,"context_line":"    This version of the driver enables the use of NVMe over different"}],"source_content_type":"text/x-python","patch_set":21,"id":"48ae3a9a_18fcfddd","line":2954,"updated":"2022-07-27 15:50:35.000000000","message":"-1: It is missing method `get_driver_options`, which is necessary since the NVMe driver has different config options than the base driver returns.","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2097044102678eb9435da96ff7e6f32511d8a431","unresolved":true,"context_lines":[{"line_number":2951,"context_line":""},{"line_number":2952,"context_line":""},{"line_number":2953,"context_line":"@interface.volumedriver"},{"line_number":2954,"context_line":"class PureNVMEDriver(PureBaseVolumeDriver, driver.BaseVD):"},{"line_number":2955,"context_line":"    \"\"\"OpenStack Volume Driver to support Pure Storage FlashArray."},{"line_number":2956,"context_line":""},{"line_number":2957,"context_line":"    This version of the driver enables the use of NVMe over different"}],"source_content_type":"text/x-python","patch_set":21,"id":"603847d8_282c2658","line":2954,"in_reply_to":"0ce9aa0e_8b37c91c","updated":"2022-07-28 09:57:10.000000000","message":"-1: But the base driver implementation doesn\u0027t return the new 3 nvme-of specific configuration options: pure_nvme_transport, pure_nvme_cidr_list, pure_nvme_cidr\n\nAnd I assume that some of the other configuration options that the base driver returns are useless for this nvmeof driver.","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":true,"context_lines":[{"line_number":2951,"context_line":""},{"line_number":2952,"context_line":""},{"line_number":2953,"context_line":"@interface.volumedriver"},{"line_number":2954,"context_line":"class PureNVMEDriver(PureBaseVolumeDriver, driver.BaseVD):"},{"line_number":2955,"context_line":"    \"\"\"OpenStack Volume Driver to support Pure Storage FlashArray."},{"line_number":2956,"context_line":""},{"line_number":2957,"context_line":"    This version of the driver enables the use of NVMe over different"}],"source_content_type":"text/x-python","patch_set":21,"id":"0ce9aa0e_8b37c91c","line":2954,"in_reply_to":"48ae3a9a_18fcfddd","updated":"2022-07-27 16:43:19.000000000","message":"it inherits this from the PureBaseVolumeDriver","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bfa7bb0801cea4961daedfd3dda2d6bba4b13ba","unresolved":false,"context_lines":[{"line_number":2951,"context_line":""},{"line_number":2952,"context_line":""},{"line_number":2953,"context_line":"@interface.volumedriver"},{"line_number":2954,"context_line":"class PureNVMEDriver(PureBaseVolumeDriver, driver.BaseVD):"},{"line_number":2955,"context_line":"    \"\"\"OpenStack Volume Driver to support Pure Storage FlashArray."},{"line_number":2956,"context_line":""},{"line_number":2957,"context_line":"    This version of the driver enables the use of NVMe over different"}],"source_content_type":"text/x-python","patch_set":21,"id":"ae9ba06f_0b1bc9ea","line":2954,"in_reply_to":"603847d8_282c2658","updated":"2022-07-29 13:53:30.000000000","message":"Added the nvme into the main parent `get_driver_options()`.","commit_id":"116568eaf12c0119e417f4375e0f5868d1234e48"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"05cfbb10e7a42ea3b9dd9c3f4bd73e692021b999","unresolved":true,"context_lines":[{"line_number":3078,"context_line":"                        \"target_luns\": target_luns,"},{"line_number":3079,"context_line":"                        \"nqn\": target_nqns[0],"},{"line_number":3080,"context_line":"                        \"target_nqn\": target_nqns[0],"},{"line_number":3081,"context_line":"                        \"target_port\": 4420,"},{"line_number":3082,"context_line":"                        \"target_nqns\": target_nqns,"},{"line_number":3083,"context_line":"                        \"target_wwn\": target_wwns[0],"},{"line_number":3084,"context_line":"                        \"target_wwns\": target_wwns,"}],"source_content_type":"text/x-python","patch_set":29,"id":"a0f9ad23_6d3a74c4","line":3081,"range":{"start_line":3081,"start_character":39,"end_line":3081,"end_character":43},"updated":"2022-07-14 07:10:25.000000000","message":"The port number (4420) is used at 3 places in this file.\nJust like in test_pure.py, can it be defined as constant ?","commit_id":"3c45887e667d96a25a827b53b804e93ecf4e76ec"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"8c874998adb6bed509ad8d57816676f130b5c076","unresolved":false,"context_lines":[{"line_number":3078,"context_line":"                        \"target_luns\": target_luns,"},{"line_number":3079,"context_line":"                        \"nqn\": target_nqns[0],"},{"line_number":3080,"context_line":"                        \"target_nqn\": target_nqns[0],"},{"line_number":3081,"context_line":"                        \"target_port\": 4420,"},{"line_number":3082,"context_line":"                        \"target_nqns\": target_nqns,"},{"line_number":3083,"context_line":"                        \"target_wwn\": target_wwns[0],"},{"line_number":3084,"context_line":"                        \"target_wwns\": target_wwns,"}],"source_content_type":"text/x-python","patch_set":29,"id":"0e7192c0_e50ca12f","line":3081,"range":{"start_line":3081,"start_character":39,"end_line":3081,"end_character":43},"in_reply_to":"a0f9ad23_6d3a74c4","updated":"2022-07-14 13:28:13.000000000","message":"Done","commit_id":"3c45887e667d96a25a827b53b804e93ecf4e76ec"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"1eec11255e6b18d38fb68394b8a26fd0085762ac","unresolved":true,"context_lines":[{"line_number":3158,"context_line":"            props[\"data\"][\"target_nqns\"] \u003d target_nqns"},{"line_number":3159,"context_line":"            props[\"data\"][\"portals\"] \u003d target_portals"},{"line_number":3160,"context_line":"            props[\"data\"][\"target_nqn\"] \u003d target_nqns[0]"},{"line_number":3161,"context_line":"#            props[\"data\"][\"nqn\"] \u003d target_nqns[0]"},{"line_number":3162,"context_line":"#            props[\"data\"][\"target_port\"] \u003d NVME_PORT"},{"line_number":3163,"context_line":"#            props[\"data\"][\"target_portal\"] \u003d target_portals[0][0]"},{"line_number":3164,"context_line":""},{"line_number":3165,"context_line":"        return props"},{"line_number":3166,"context_line":""},{"line_number":3167,"context_line":"    def _get_target_nvme_ports(self, array):"}],"source_content_type":"text/x-python","patch_set":32,"id":"cfe62278_d61da18c","line":3164,"range":{"start_line":3161,"start_character":0,"end_line":3164,"end_character":0},"updated":"2022-07-15 09:53:27.000000000","message":"nit: Are these three lines required ?","commit_id":"f0a8178d2e25397719e5a31ed61bb35b5d0e4683"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1373104e1e6ad6ecf850d87cff51c4c596a2d4fd","unresolved":true,"context_lines":[{"line_number":3158,"context_line":"            props[\"data\"][\"target_nqns\"] \u003d target_nqns"},{"line_number":3159,"context_line":"            props[\"data\"][\"portals\"] \u003d target_portals"},{"line_number":3160,"context_line":"            props[\"data\"][\"target_nqn\"] \u003d target_nqns[0]"},{"line_number":3161,"context_line":"#            props[\"data\"][\"nqn\"] \u003d target_nqns[0]"},{"line_number":3162,"context_line":"#            props[\"data\"][\"target_port\"] \u003d NVME_PORT"},{"line_number":3163,"context_line":"#            props[\"data\"][\"target_portal\"] \u003d target_portals[0][0]"},{"line_number":3164,"context_line":""},{"line_number":3165,"context_line":"        return props"},{"line_number":3166,"context_line":""},{"line_number":3167,"context_line":"    def _get_target_nvme_ports(self, array):"}],"source_content_type":"text/x-python","patch_set":32,"id":"e28586bd_c72b2da4","line":3164,"range":{"start_line":3161,"start_character":0,"end_line":3164,"end_character":0},"in_reply_to":"cfe62278_d61da18c","updated":"2022-07-15 19:50:23.000000000","message":"Not now os-brick has been fixed - taking them out","commit_id":"f0a8178d2e25397719e5a31ed61bb35b5d0e4683"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"400ec77d024b24aa412207e1640c04fc880f5aba","unresolved":false,"context_lines":[{"line_number":3158,"context_line":"            props[\"data\"][\"target_nqns\"] \u003d target_nqns"},{"line_number":3159,"context_line":"            props[\"data\"][\"portals\"] \u003d target_portals"},{"line_number":3160,"context_line":"            props[\"data\"][\"target_nqn\"] \u003d target_nqns[0]"},{"line_number":3161,"context_line":"#            props[\"data\"][\"nqn\"] \u003d target_nqns[0]"},{"line_number":3162,"context_line":"#            props[\"data\"][\"target_port\"] \u003d NVME_PORT"},{"line_number":3163,"context_line":"#            props[\"data\"][\"target_portal\"] \u003d target_portals[0][0]"},{"line_number":3164,"context_line":""},{"line_number":3165,"context_line":"        return props"},{"line_number":3166,"context_line":""},{"line_number":3167,"context_line":"    def _get_target_nvme_ports(self, array):"}],"source_content_type":"text/x-python","patch_set":32,"id":"d2ba8e2a_9c8f8a80","line":3164,"range":{"start_line":3161,"start_character":0,"end_line":3164,"end_character":0},"in_reply_to":"e28586bd_c72b2da4","updated":"2022-07-18 17:18:15.000000000","message":"Done","commit_id":"f0a8178d2e25397719e5a31ed61bb35b5d0e4683"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":110,"context_line":"    cfg.StrOpt(\"pure_nvme_transport\", default\u003d\"roce\","},{"line_number":111,"context_line":"               choices\u003d[\u0027roce\u0027, \u0027fc\u0027],"},{"line_number":112,"context_line":"               help\u003d\"The NVMe transport layer to be used by the NVMe driver. \""},{"line_number":113,"context_line":"                    \"This only supports RoCE and FC at this time.\"),"},{"line_number":114,"context_line":"    cfg.BoolOpt(\"pure_eradicate_on_delete\","},{"line_number":115,"context_line":"                default\u003dFalse,"},{"line_number":116,"context_line":"                help\u003d\"When enabled, all Pure volumes, snapshots, and \""}],"source_content_type":"text/x-python","patch_set":38,"id":"8920e5f1_8e43386e","line":113,"range":{"start_line":113,"start_character":49,"end_line":113,"end_character":51},"updated":"2022-07-27 15:50:35.000000000","message":"This needs change as well.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    cfg.StrOpt(\"pure_nvme_transport\", default\u003d\"roce\","},{"line_number":111,"context_line":"               choices\u003d[\u0027roce\u0027, \u0027fc\u0027],"},{"line_number":112,"context_line":"               help\u003d\"The NVMe transport layer to be used by the NVMe driver. \""},{"line_number":113,"context_line":"                    \"This only supports RoCE and FC at this time.\"),"},{"line_number":114,"context_line":"    cfg.BoolOpt(\"pure_eradicate_on_delete\","},{"line_number":115,"context_line":"                default\u003dFalse,"},{"line_number":116,"context_line":"                help\u003d\"When enabled, all Pure volumes, snapshots, and \""}],"source_content_type":"text/x-python","patch_set":38,"id":"b142fb56_68891e88","line":113,"range":{"start_line":113,"start_character":49,"end_line":113,"end_character":51},"in_reply_to":"8920e5f1_8e43386e","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"HOST_CREATE_MAX_RETRIES \u003d 5"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"SUPPORTED_NVME_TRANSPORTS \u003d [\"roce\", \"fc\"]  # Ready to TCP in the future"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"USER_AGENT_BASE \u003d \u0027OpenStack Cinder\u0027"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"a5fc540a_0738ed2c","line":164,"updated":"2022-07-27 15:50:35.000000000","message":"-1: FC is not supported yet and this constant doesn\u0027t seem to be used anywhere.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"HOST_CREATE_MAX_RETRIES \u003d 5"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"SUPPORTED_NVME_TRANSPORTS \u003d [\"roce\", \"fc\"]  # Ready to TCP in the future"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"USER_AGENT_BASE \u003d \u0027OpenStack Cinder\u0027"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"12b9293e_709419d5","line":164,"in_reply_to":"a5fc540a_0738ed2c","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":2970,"context_line":"        execute \u003d kwargs.pop(\"execute\", utils.execute)"},{"line_number":2971,"context_line":"        super(PureNVMEDriver, self).__init__(execute\u003dexecute,"},{"line_number":2972,"context_line":"                                             *args, **kwargs)"},{"line_number":2973,"context_line":"        if self.configuration.pure_nvme_transport.lower() \u003d\u003d \"roce\":"},{"line_number":2974,"context_line":"            self.transport_type \u003d \"rdma\""},{"line_number":2975,"context_line":"            self._storage_protocol \u003d constants.NVMEOF_ROCE"},{"line_number":2976,"context_line":"        elif self.configuration.pure_nvme_transport.lower() \u003d\u003d \"fc\":"}],"source_content_type":"text/x-python","patch_set":38,"id":"f2cab0e5_e909c00e","line":2973,"range":{"start_line":2973,"start_character":49,"end_line":2973,"end_character":57},"updated":"2022-07-27 15:50:35.000000000","message":"nit: not necessary, since the \u0027pure_nvme_transport\u0027 option only allows the lowercase value (it\u0027d be different if parameter ignore_case was added there).","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":2970,"context_line":"        execute \u003d kwargs.pop(\"execute\", utils.execute)"},{"line_number":2971,"context_line":"        super(PureNVMEDriver, self).__init__(execute\u003dexecute,"},{"line_number":2972,"context_line":"                                             *args, **kwargs)"},{"line_number":2973,"context_line":"        if self.configuration.pure_nvme_transport.lower() \u003d\u003d \"roce\":"},{"line_number":2974,"context_line":"            self.transport_type \u003d \"rdma\""},{"line_number":2975,"context_line":"            self._storage_protocol \u003d constants.NVMEOF_ROCE"},{"line_number":2976,"context_line":"        elif self.configuration.pure_nvme_transport.lower() \u003d\u003d \"fc\":"}],"source_content_type":"text/x-python","patch_set":38,"id":"58c0963b_21e7bfb4","line":2973,"range":{"start_line":2973,"start_character":49,"end_line":2973,"end_character":57},"in_reply_to":"f2cab0e5_e909c00e","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":2970,"context_line":"        execute \u003d kwargs.pop(\"execute\", utils.execute)"},{"line_number":2971,"context_line":"        super(PureNVMEDriver, self).__init__(execute\u003dexecute,"},{"line_number":2972,"context_line":"                                             *args, **kwargs)"},{"line_number":2973,"context_line":"        if self.configuration.pure_nvme_transport.lower() \u003d\u003d \"roce\":"},{"line_number":2974,"context_line":"            self.transport_type \u003d \"rdma\""},{"line_number":2975,"context_line":"            self._storage_protocol \u003d constants.NVMEOF_ROCE"},{"line_number":2976,"context_line":"        elif self.configuration.pure_nvme_transport.lower() \u003d\u003d \"fc\":"},{"line_number":2977,"context_line":"            self.transport_type \u003d ("},{"line_number":2978,"context_line":"                self.configuration.pure_nvme_transport.lower()"},{"line_number":2979,"context_line":"            )"},{"line_number":2980,"context_line":"            self._storage_protocol \u003d constants.NVMEOF_FC"},{"line_number":2981,"context_line":"        else:  # We are left with TCP"},{"line_number":2982,"context_line":"            self.transport_type \u003d ("},{"line_number":2983,"context_line":"                self.configuration.pure_nvme_transport.lower()"},{"line_number":2984,"context_line":"            )"},{"line_number":2985,"context_line":"            self._storage_protocol \u003d constants.NVMEOF_TCP"},{"line_number":2986,"context_line":"        self._lookup_service \u003d fczm_utils.create_lookup_service()"},{"line_number":2987,"context_line":""},{"line_number":2988,"context_line":"    def _get_nguid(self, pure_vol_name):"}],"source_content_type":"text/x-python","patch_set":38,"id":"1375c9ef_a01e9615","line":2985,"range":{"start_line":2973,"start_character":0,"end_line":2985,"end_character":57},"updated":"2022-07-27 15:50:35.000000000","message":"-1: We know for a fact that it\u0027s going to be roce, so we shouldn\u0027t be adding all this code.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":2970,"context_line":"        execute \u003d kwargs.pop(\"execute\", utils.execute)"},{"line_number":2971,"context_line":"        super(PureNVMEDriver, self).__init__(execute\u003dexecute,"},{"line_number":2972,"context_line":"                                             *args, **kwargs)"},{"line_number":2973,"context_line":"        if self.configuration.pure_nvme_transport.lower() \u003d\u003d \"roce\":"},{"line_number":2974,"context_line":"            self.transport_type \u003d \"rdma\""},{"line_number":2975,"context_line":"            self._storage_protocol \u003d constants.NVMEOF_ROCE"},{"line_number":2976,"context_line":"        elif self.configuration.pure_nvme_transport.lower() \u003d\u003d \"fc\":"},{"line_number":2977,"context_line":"            self.transport_type \u003d ("},{"line_number":2978,"context_line":"                self.configuration.pure_nvme_transport.lower()"},{"line_number":2979,"context_line":"            )"},{"line_number":2980,"context_line":"            self._storage_protocol \u003d constants.NVMEOF_FC"},{"line_number":2981,"context_line":"        else:  # We are left with TCP"},{"line_number":2982,"context_line":"            self.transport_type \u003d ("},{"line_number":2983,"context_line":"                self.configuration.pure_nvme_transport.lower()"},{"line_number":2984,"context_line":"            )"},{"line_number":2985,"context_line":"            self._storage_protocol \u003d constants.NVMEOF_TCP"},{"line_number":2986,"context_line":"        self._lookup_service \u003d fczm_utils.create_lookup_service()"},{"line_number":2987,"context_line":""},{"line_number":2988,"context_line":"    def _get_nguid(self, pure_vol_name):"}],"source_content_type":"text/x-python","patch_set":38,"id":"f9e65600_f07823f7","line":2985,"range":{"start_line":2973,"start_character":0,"end_line":2985,"end_character":57},"in_reply_to":"1375c9ef_a01e9615","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":2983,"context_line":"                self.configuration.pure_nvme_transport.lower()"},{"line_number":2984,"context_line":"            )"},{"line_number":2985,"context_line":"            self._storage_protocol \u003d constants.NVMEOF_TCP"},{"line_number":2986,"context_line":"        self._lookup_service \u003d fczm_utils.create_lookup_service()"},{"line_number":2987,"context_line":""},{"line_number":2988,"context_line":"    def _get_nguid(self, pure_vol_name):"},{"line_number":2989,"context_line":"        \"\"\"Return the NGUID based on the volume\u0027s serial number"}],"source_content_type":"text/x-python","patch_set":38,"id":"93c00ccc_c38576ca","line":2986,"updated":"2022-07-27 15:50:35.000000000","message":"-1: No FC, so no FC zoning, right?","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":2983,"context_line":"                self.configuration.pure_nvme_transport.lower()"},{"line_number":2984,"context_line":"            )"},{"line_number":2985,"context_line":"            self._storage_protocol \u003d constants.NVMEOF_TCP"},{"line_number":2986,"context_line":"        self._lookup_service \u003d fczm_utils.create_lookup_service()"},{"line_number":2987,"context_line":""},{"line_number":2988,"context_line":"    def _get_nguid(self, pure_vol_name):"},{"line_number":2989,"context_line":"        \"\"\"Return the NGUID based on the volume\u0027s serial number"}],"source_content_type":"text/x-python","patch_set":38,"id":"4f1b24a3_89cb6864","line":2986,"in_reply_to":"93c00ccc_c38576ca","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":false,"context_lines":[{"line_number":2988,"context_line":"    def _get_nguid(self, pure_vol_name):"},{"line_number":2989,"context_line":"        \"\"\"Return the NGUID based on the volume\u0027s serial number"},{"line_number":2990,"context_line":""},{"line_number":2991,"context_line":"        The NGUID is constructed from the volume serial number and"},{"line_number":2992,"context_line":"        3 octet OUI"},{"line_number":2993,"context_line":""},{"line_number":2994,"context_line":"        // octet 0:              padding"},{"line_number":2995,"context_line":"        // octets 1 - 7:         first 7 octets of volume serial number"},{"line_number":2996,"context_line":"        // octets 8 - 10:        3 octet OUI (24a937)"},{"line_number":2997,"context_line":"        // octets 11 - 15:       last 5 octets of volume serial number"},{"line_number":2998,"context_line":"        \"\"\""},{"line_number":2999,"context_line":"        array \u003d self._get_current_array()"},{"line_number":3000,"context_line":"        volume_info \u003d array.get_volume(pure_vol_name)"}],"source_content_type":"text/x-python","patch_set":38,"id":"c9c5a907_40c75b28","line":2997,"range":{"start_line":2991,"start_character":0,"end_line":2997,"end_character":70},"updated":"2022-07-27 15:50:35.000000000","message":"Thank you for this comment!  It makes reviewing it easier.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3002,"context_line":"                 \"24a937\" + volume_info[\u0027serial\u0027][-10:])"},{"line_number":3003,"context_line":"        return nguid.lower()"},{"line_number":3004,"context_line":""},{"line_number":3005,"context_line":"    @staticmethod"},{"line_number":3006,"context_line":"    def _get_array_wwns_nqns(array):"},{"line_number":3007,"context_line":"        \"\"\"Return list of wwns from the array\"\"\""},{"line_number":3008,"context_line":"        ports \u003d array.list_ports()"},{"line_number":3009,"context_line":"        wwns, nqns \u003d [], []"},{"line_number":3010,"context_line":"        for port in ports:"},{"line_number":3011,"context_line":"            if port[\"wwn\"] and port[\"nqn\"]:"},{"line_number":3012,"context_line":"                wwns.append(port[\"wwn\"])"},{"line_number":3013,"context_line":"                nqns.append(port[\"nqn\"])"},{"line_number":3014,"context_line":"        return wwns, nqns"},{"line_number":3015,"context_line":""},{"line_number":3016,"context_line":"    def _build_initiator_target_map(self, target_wwns, connector):"},{"line_number":3017,"context_line":"        \"\"\"Build the target_wwns and the initiator target map.\"\"\""},{"line_number":3018,"context_line":"        init_targ_map \u003d {}"},{"line_number":3019,"context_line":""},{"line_number":3020,"context_line":"        if self._lookup_service:"},{"line_number":3021,"context_line":"            # use FC san lookup to determine which NSPs to use"},{"line_number":3022,"context_line":"            # for the new VLUN."},{"line_number":3023,"context_line":"            dev_map \u003d self._lookup_service.get_device_mapping_from_network("},{"line_number":3024,"context_line":"                connector[\u0027wwpns\u0027],"},{"line_number":3025,"context_line":"                target_wwns)"},{"line_number":3026,"context_line":""},{"line_number":3027,"context_line":"            for fabric_name in dev_map:"},{"line_number":3028,"context_line":"                fabric \u003d dev_map[fabric_name]"},{"line_number":3029,"context_line":"                for initiator in fabric[\u0027initiator_port_wwn_list\u0027]:"},{"line_number":3030,"context_line":"                    if initiator not in init_targ_map:"},{"line_number":3031,"context_line":"                        init_targ_map[initiator] \u003d []"},{"line_number":3032,"context_line":"                    init_targ_map[initiator] +\u003d fabric[\u0027target_port_wwn_list\u0027]"},{"line_number":3033,"context_line":"                    init_targ_map[initiator] \u003d list(set("},{"line_number":3034,"context_line":"                        init_targ_map[initiator]))"},{"line_number":3035,"context_line":"        else:"},{"line_number":3036,"context_line":"            init_targ_map \u003d dict.fromkeys(connector[\"wwpns\"], target_wwns)"},{"line_number":3037,"context_line":""},{"line_number":3038,"context_line":"        return init_targ_map"},{"line_number":3039,"context_line":""},{"line_number":3040,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3041,"context_line":"        \"\"\"Return a list of dicts describing existing host objects or None.\"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"172e1d35_e3ef2b2a","line":3038,"range":{"start_line":3005,"start_character":0,"end_line":3038,"end_character":28},"updated":"2022-07-27 15:50:35.000000000","message":"-1: No FC support yet.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3002,"context_line":"                 \"24a937\" + volume_info[\u0027serial\u0027][-10:])"},{"line_number":3003,"context_line":"        return nguid.lower()"},{"line_number":3004,"context_line":""},{"line_number":3005,"context_line":"    @staticmethod"},{"line_number":3006,"context_line":"    def _get_array_wwns_nqns(array):"},{"line_number":3007,"context_line":"        \"\"\"Return list of wwns from the array\"\"\""},{"line_number":3008,"context_line":"        ports \u003d array.list_ports()"},{"line_number":3009,"context_line":"        wwns, nqns \u003d [], []"},{"line_number":3010,"context_line":"        for port in ports:"},{"line_number":3011,"context_line":"            if port[\"wwn\"] and port[\"nqn\"]:"},{"line_number":3012,"context_line":"                wwns.append(port[\"wwn\"])"},{"line_number":3013,"context_line":"                nqns.append(port[\"nqn\"])"},{"line_number":3014,"context_line":"        return wwns, nqns"},{"line_number":3015,"context_line":""},{"line_number":3016,"context_line":"    def _build_initiator_target_map(self, target_wwns, connector):"},{"line_number":3017,"context_line":"        \"\"\"Build the target_wwns and the initiator target map.\"\"\""},{"line_number":3018,"context_line":"        init_targ_map \u003d {}"},{"line_number":3019,"context_line":""},{"line_number":3020,"context_line":"        if self._lookup_service:"},{"line_number":3021,"context_line":"            # use FC san lookup to determine which NSPs to use"},{"line_number":3022,"context_line":"            # for the new VLUN."},{"line_number":3023,"context_line":"            dev_map \u003d self._lookup_service.get_device_mapping_from_network("},{"line_number":3024,"context_line":"                connector[\u0027wwpns\u0027],"},{"line_number":3025,"context_line":"                target_wwns)"},{"line_number":3026,"context_line":""},{"line_number":3027,"context_line":"            for fabric_name in dev_map:"},{"line_number":3028,"context_line":"                fabric \u003d dev_map[fabric_name]"},{"line_number":3029,"context_line":"                for initiator in fabric[\u0027initiator_port_wwn_list\u0027]:"},{"line_number":3030,"context_line":"                    if initiator not in init_targ_map:"},{"line_number":3031,"context_line":"                        init_targ_map[initiator] \u003d []"},{"line_number":3032,"context_line":"                    init_targ_map[initiator] +\u003d fabric[\u0027target_port_wwn_list\u0027]"},{"line_number":3033,"context_line":"                    init_targ_map[initiator] \u003d list(set("},{"line_number":3034,"context_line":"                        init_targ_map[initiator]))"},{"line_number":3035,"context_line":"        else:"},{"line_number":3036,"context_line":"            init_targ_map \u003d dict.fromkeys(connector[\"wwpns\"], target_wwns)"},{"line_number":3037,"context_line":""},{"line_number":3038,"context_line":"        return init_targ_map"},{"line_number":3039,"context_line":""},{"line_number":3040,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3041,"context_line":"        \"\"\"Return a list of dicts describing existing host objects or None.\"\"\""}],"source_content_type":"text/x-python","patch_set":38,"id":"8260e772_f8fed338","line":3038,"range":{"start_line":3005,"start_character":0,"end_line":3038,"end_character":28},"in_reply_to":"172e1d35_e3ef2b2a","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3037,"context_line":""},{"line_number":3038,"context_line":"        return init_targ_map"},{"line_number":3039,"context_line":""},{"line_number":3040,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3041,"context_line":"        \"\"\"Return a list of dicts describing existing host objects or None.\"\"\""},{"line_number":3042,"context_line":"        hosts \u003d array.list_hosts(remote\u003dremote)"},{"line_number":3043,"context_line":"        matching_hosts \u003d [host for host in hosts"}],"source_content_type":"text/x-python","patch_set":38,"id":"d3785108_8a1eb03a","line":3040,"range":{"start_line":3040,"start_character":8,"end_line":3040,"end_character":17},"updated":"2022-07-27 15:50:35.000000000","message":"nit: Name should be plural since it returns a list\n\n  def _get_hosts(...):","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3037,"context_line":""},{"line_number":3038,"context_line":"        return init_targ_map"},{"line_number":3039,"context_line":""},{"line_number":3040,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":3041,"context_line":"        \"\"\"Return a list of dicts describing existing host objects or None.\"\"\""},{"line_number":3042,"context_line":"        hosts \u003d array.list_hosts(remote\u003dremote)"},{"line_number":3043,"context_line":"        matching_hosts \u003d [host for host in hosts"}],"source_content_type":"text/x-python","patch_set":38,"id":"bf5cff84_40779c2f","line":3040,"range":{"start_line":3040,"start_character":8,"end_line":3040,"end_character":17},"in_reply_to":"d3785108_8a1eb03a","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3062,"context_line":"        target_nqns \u003d []"},{"line_number":3063,"context_line":"        for array in target_arrays:"},{"line_number":3064,"context_line":"            connection \u003d self._connect(array, pure_vol_name, connector)"},{"line_number":3065,"context_line":"            if self.transport_type \u003d\u003d \"fc\":"},{"line_number":3066,"context_line":"                array_wwns, array_nqns \u003d self._get_array_wwns_nqns(array)"},{"line_number":3067,"context_line":"                target_nqns \u003d copy.deepcopy(array_nqns)"},{"line_number":3068,"context_line":"                target_wwns \u003d copy.deepcopy(array_wwns)"},{"line_number":3069,"context_line":"                target_luns \u003d [connection[\"lun\"] + len(target_wwns)]"},{"line_number":3070,"context_line":""},{"line_number":3071,"context_line":"                # Build the zoning map based on *all* wwns, this could be"},{"line_number":3072,"context_line":"                # multiple arrays connecting to the same host with a stretced"},{"line_number":3073,"context_line":"                # volume if and when sync-rep is supported on NVMe."},{"line_number":3074,"context_line":"                init_targ_map \u003d self._build_initiator_target_map(target_wwns,"},{"line_number":3075,"context_line":"                                                                 connector)"},{"line_number":3076,"context_line":""},{"line_number":3077,"context_line":"                properties \u003d {"},{"line_number":3078,"context_line":"                    \"driver_volume_type\": \"nvmefc\","},{"line_number":3079,"context_line":"                    \"data\": {"},{"line_number":3080,"context_line":"                        \"target_lun\": target_luns[0],"},{"line_number":3081,"context_line":"                        \"target_luns\": target_luns,"},{"line_number":3082,"context_line":"                        \"target_nqn\": target_nqns[0],"},{"line_number":3083,"context_line":"                        \"target_wwn\": target_wwns[0],"},{"line_number":3084,"context_line":"                        \"target_wwns\": target_wwns,"},{"line_number":3085,"context_line":"                        \"initiator_target_map\": init_targ_map,"},{"line_number":3086,"context_line":"                        \"discard\": True,"},{"line_number":3087,"context_line":"                    }"},{"line_number":3088,"context_line":"                }"},{"line_number":3089,"context_line":"            else:"},{"line_number":3090,"context_line":"                target_ports \u003d self._get_target_nvme_ports(array)"},{"line_number":3091,"context_line":"                targets.append("}],"source_content_type":"text/x-python","patch_set":38,"id":"5b657f95_34ef717a","line":3088,"range":{"start_line":3065,"start_character":0,"end_line":3088,"end_character":17},"updated":"2022-07-27 15:50:35.000000000","message":"-1: This is still not supported by os-brick","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3062,"context_line":"        target_nqns \u003d []"},{"line_number":3063,"context_line":"        for array in target_arrays:"},{"line_number":3064,"context_line":"            connection \u003d self._connect(array, pure_vol_name, connector)"},{"line_number":3065,"context_line":"            if self.transport_type \u003d\u003d \"fc\":"},{"line_number":3066,"context_line":"                array_wwns, array_nqns \u003d self._get_array_wwns_nqns(array)"},{"line_number":3067,"context_line":"                target_nqns \u003d copy.deepcopy(array_nqns)"},{"line_number":3068,"context_line":"                target_wwns \u003d copy.deepcopy(array_wwns)"},{"line_number":3069,"context_line":"                target_luns \u003d [connection[\"lun\"] + len(target_wwns)]"},{"line_number":3070,"context_line":""},{"line_number":3071,"context_line":"                # Build the zoning map based on *all* wwns, this could be"},{"line_number":3072,"context_line":"                # multiple arrays connecting to the same host with a stretced"},{"line_number":3073,"context_line":"                # volume if and when sync-rep is supported on NVMe."},{"line_number":3074,"context_line":"                init_targ_map \u003d self._build_initiator_target_map(target_wwns,"},{"line_number":3075,"context_line":"                                                                 connector)"},{"line_number":3076,"context_line":""},{"line_number":3077,"context_line":"                properties \u003d {"},{"line_number":3078,"context_line":"                    \"driver_volume_type\": \"nvmefc\","},{"line_number":3079,"context_line":"                    \"data\": {"},{"line_number":3080,"context_line":"                        \"target_lun\": target_luns[0],"},{"line_number":3081,"context_line":"                        \"target_luns\": target_luns,"},{"line_number":3082,"context_line":"                        \"target_nqn\": target_nqns[0],"},{"line_number":3083,"context_line":"                        \"target_wwn\": target_wwns[0],"},{"line_number":3084,"context_line":"                        \"target_wwns\": target_wwns,"},{"line_number":3085,"context_line":"                        \"initiator_target_map\": init_targ_map,"},{"line_number":3086,"context_line":"                        \"discard\": True,"},{"line_number":3087,"context_line":"                    }"},{"line_number":3088,"context_line":"                }"},{"line_number":3089,"context_line":"            else:"},{"line_number":3090,"context_line":"                target_ports \u003d self._get_target_nvme_ports(array)"},{"line_number":3091,"context_line":"                targets.append("}],"source_content_type":"text/x-python","patch_set":38,"id":"87f04c7f_f8f11ab2","line":3088,"range":{"start_line":3065,"start_character":0,"end_line":3088,"end_character":17},"in_reply_to":"5b657f95_34ef717a","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3096,"context_line":"                )"},{"line_number":3097,"context_line":"                properties \u003d self._build_connection_properties(targets)"},{"line_number":3098,"context_line":""},{"line_number":3099,"context_line":"        properties[\"data\"][\"wwn\"] \u003d self._get_wwn(pure_vol_name)"},{"line_number":3100,"context_line":"        properties[\"data\"][\"volume_nguid\"] \u003d self._get_nguid(pure_vol_name)"},{"line_number":3101,"context_line":"        if self.transport_type \u003d\u003d \"fc\":"},{"line_number":3102,"context_line":"            fczm_utils.add_fc_zone(properties)"}],"source_content_type":"text/x-python","patch_set":38,"id":"446d1077_4fe722cb","line":3099,"updated":"2022-07-27 15:50:35.000000000","message":"?: I don\u0027t think this is part of the os-brick connection info, right?","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3096,"context_line":"                )"},{"line_number":3097,"context_line":"                properties \u003d self._build_connection_properties(targets)"},{"line_number":3098,"context_line":""},{"line_number":3099,"context_line":"        properties[\"data\"][\"wwn\"] \u003d self._get_wwn(pure_vol_name)"},{"line_number":3100,"context_line":"        properties[\"data\"][\"volume_nguid\"] \u003d self._get_nguid(pure_vol_name)"},{"line_number":3101,"context_line":"        if self.transport_type \u003d\u003d \"fc\":"},{"line_number":3102,"context_line":"            fczm_utils.add_fc_zone(properties)"}],"source_content_type":"text/x-python","patch_set":38,"id":"a34055c9_b6426587","line":3099,"in_reply_to":"446d1077_4fe722cb","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3098,"context_line":""},{"line_number":3099,"context_line":"        properties[\"data\"][\"wwn\"] \u003d self._get_wwn(pure_vol_name)"},{"line_number":3100,"context_line":"        properties[\"data\"][\"volume_nguid\"] \u003d self._get_nguid(pure_vol_name)"},{"line_number":3101,"context_line":"        if self.transport_type \u003d\u003d \"fc\":"},{"line_number":3102,"context_line":"            fczm_utils.add_fc_zone(properties)"},{"line_number":3103,"context_line":""},{"line_number":3104,"context_line":"        return properties"},{"line_number":3105,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"e4a08ac2_8fbfeef6","line":3102,"range":{"start_line":3101,"start_character":0,"end_line":3102,"end_character":46},"updated":"2022-07-27 15:50:35.000000000","message":"-1: No FC support","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3098,"context_line":""},{"line_number":3099,"context_line":"        properties[\"data\"][\"wwn\"] \u003d self._get_wwn(pure_vol_name)"},{"line_number":3100,"context_line":"        properties[\"data\"][\"volume_nguid\"] \u003d self._get_nguid(pure_vol_name)"},{"line_number":3101,"context_line":"        if self.transport_type \u003d\u003d \"fc\":"},{"line_number":3102,"context_line":"            fczm_utils.add_fc_zone(properties)"},{"line_number":3103,"context_line":""},{"line_number":3104,"context_line":"        return properties"},{"line_number":3105,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"a64bc395_2bde8fb1","line":3102,"range":{"start_line":3101,"start_character":0,"end_line":3102,"end_character":46},"in_reply_to":"e4a08ac2_8fbfeef6","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3107,"context_line":"        props \u003d {"},{"line_number":3108,"context_line":"            \"driver_volume_type\": \"nvmeof\","},{"line_number":3109,"context_line":"            \"data\": {"},{"line_number":3110,"context_line":"                \"discard\": True,"},{"line_number":3111,"context_line":"            },"},{"line_number":3112,"context_line":"        }"},{"line_number":3113,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"dbe56d73_151e1517","line":3110,"updated":"2022-07-27 15:50:35.000000000","message":"-1: If volumes support discard, then driver should also report \u0027sparse_copy_volume\u0027 to True when reporting capabilities to the scheduler.\n\nThat way when cinder does dd to your volumes it will preserve sparseness.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3107,"context_line":"        props \u003d {"},{"line_number":3108,"context_line":"            \"driver_volume_type\": \"nvmeof\","},{"line_number":3109,"context_line":"            \"data\": {"},{"line_number":3110,"context_line":"                \"discard\": True,"},{"line_number":3111,"context_line":"            },"},{"line_number":3112,"context_line":"        }"},{"line_number":3113,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"f140b1bc_c834d9c0","line":3110,"in_reply_to":"dbe56d73_151e1517","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3121,"context_line":"        else:"},{"line_number":3122,"context_line":"            cidrs \u003d [self.configuration.pure_nvme_cidr]"},{"line_number":3123,"context_line":""},{"line_number":3124,"context_line":"        check_cidrs \u003d [ipaddress.ip_network(item) for item in cidrs]"},{"line_number":3125,"context_line":""},{"line_number":3126,"context_line":"        target_luns \u003d []"},{"line_number":3127,"context_line":"        target_nqns \u003d []"}],"source_content_type":"text/x-python","patch_set":38,"id":"1018517a_b90dd3ad","line":3124,"range":{"start_line":3124,"start_character":23,"end_line":3124,"end_character":49},"updated":"2022-07-27 15:50:35.000000000","message":"-1: This should be checked on the driver setup phase so it fails to start with bad data.  If bad configuration is provided it will only raise ValueError here once it tries to connect.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":true,"context_lines":[{"line_number":3121,"context_line":"        else:"},{"line_number":3122,"context_line":"            cidrs \u003d [self.configuration.pure_nvme_cidr]"},{"line_number":3123,"context_line":""},{"line_number":3124,"context_line":"        check_cidrs \u003d [ipaddress.ip_network(item) for item in cidrs]"},{"line_number":3125,"context_line":""},{"line_number":3126,"context_line":"        target_luns \u003d []"},{"line_number":3127,"context_line":"        target_nqns \u003d []"}],"source_content_type":"text/x-python","patch_set":38,"id":"2921059a_26d0d32f","line":3124,"range":{"start_line":3124,"start_character":23,"end_line":3124,"end_character":49},"in_reply_to":"1018517a_b90dd3ad","updated":"2022-07-27 16:43:19.000000000","message":"There is a risk that the storage admin could change the IP addresses of the array whilst the cinder driver is still up and therefore we need to check every time the array tries to connect.\nOtherwise the driver will hang waiting for connection timeouts for each \u0027bad\u0027 IP address.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2097044102678eb9435da96ff7e6f32511d8a431","unresolved":true,"context_lines":[{"line_number":3121,"context_line":"        else:"},{"line_number":3122,"context_line":"            cidrs \u003d [self.configuration.pure_nvme_cidr]"},{"line_number":3123,"context_line":""},{"line_number":3124,"context_line":"        check_cidrs \u003d [ipaddress.ip_network(item) for item in cidrs]"},{"line_number":3125,"context_line":""},{"line_number":3126,"context_line":"        target_luns \u003d []"},{"line_number":3127,"context_line":"        target_nqns \u003d []"}],"source_content_type":"text/x-python","patch_set":38,"id":"fe32d709_89ed3d40","line":3124,"range":{"start_line":3124,"start_character":23,"end_line":3124,"end_character":49},"in_reply_to":"2921059a_26d0d32f","updated":"2022-07-28 09:57:10.000000000","message":"-1: Maybe I\u0027m missing something... but the ipaddress.ip_network method doesn\u0027t check if the IP is accessible or anything. It just checks that the string is a valid IP address and converts it into an IPv4Network or IPv6Network instance [1].\n\nSo it doesn\u0027t matter whether storage admin changes IPs on the array or not, this will only fail if the configuration options are not valid IP addresses, and that\u0027s going to be the same on start as in here.\n\n\n[1]: https://docs.python.org/3/library/ipaddress.html#ipaddress.ip_network","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bfa7bb0801cea4961daedfd3dda2d6bba4b13ba","unresolved":true,"context_lines":[{"line_number":3121,"context_line":"        else:"},{"line_number":3122,"context_line":"            cidrs \u003d [self.configuration.pure_nvme_cidr]"},{"line_number":3123,"context_line":""},{"line_number":3124,"context_line":"        check_cidrs \u003d [ipaddress.ip_network(item) for item in cidrs]"},{"line_number":3125,"context_line":""},{"line_number":3126,"context_line":"        target_luns \u003d []"},{"line_number":3127,"context_line":"        target_nqns \u003d []"}],"source_content_type":"text/x-python","patch_set":38,"id":"0e4bf9fd_ae4842d5","line":3124,"range":{"start_line":3124,"start_character":23,"end_line":3124,"end_character":49},"in_reply_to":"55383461_6a9c0611","updated":"2022-07-29 13:53:30.000000000","message":"So I see what you are saying but I\u0027d like to keep this here for a few reasons. \n1. all we are doing is a simple check to ensure the target ports are in range. There are cases when a backend can have multple target ports attached to different VLANs and this is what we are trying to do. There is no error if there are no appropriate ports. This is captured elsewhere.\n2. This is a large change that will require unit test changes and TBH my python isn\u0027t that good and I don\u0027t have a developer available to do this that would allow the fixes to be done before the driver merge freeze.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"1f2032c0849eb1083c2858a2cd324f17df1b112b","unresolved":true,"context_lines":[{"line_number":3121,"context_line":"        else:"},{"line_number":3122,"context_line":"            cidrs \u003d [self.configuration.pure_nvme_cidr]"},{"line_number":3123,"context_line":""},{"line_number":3124,"context_line":"        check_cidrs \u003d [ipaddress.ip_network(item) for item in cidrs]"},{"line_number":3125,"context_line":""},{"line_number":3126,"context_line":"        target_luns \u003d []"},{"line_number":3127,"context_line":"        target_nqns \u003d []"}],"source_content_type":"text/x-python","patch_set":38,"id":"55383461_6a9c0611","line":3124,"range":{"start_line":3124,"start_character":23,"end_line":3124,"end_character":49},"in_reply_to":"fe32d709_89ed3d40","updated":"2022-07-28 12:45:15.000000000","message":"I think Simon is concerned that he needs this list in #3262 to check if the portal ip address is in check_cidr subnet, but I agree with Gorka that pure_nvme_cidr could be evalutated/tested earlier during the inialization and set check_cidrs as a class attribute, so it could be used anyware in the code.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3127,"context_line":"        target_nqns \u003d []"},{"line_number":3128,"context_line":"        target_portals \u003d []"},{"line_number":3129,"context_line":""},{"line_number":3130,"context_line":"        # Aggregate all targets together, we may end up with different LUNs"},{"line_number":3131,"context_line":"        # for different target nqn/subsys sets (ie. it could be a unique LUN"},{"line_number":3132,"context_line":"        # for each FlashArray)"},{"line_number":3133,"context_line":"        for target in targets:"}],"source_content_type":"text/x-python","patch_set":38,"id":"dbde3c87_d155cae1","line":3130,"range":{"start_line":3130,"start_character":71,"end_line":3130,"end_character":75},"updated":"2022-07-27 15:50:35.000000000","message":"?: Aren\u0027t these called namespaces in the NVMe-oF lingo?","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3127,"context_line":"        target_nqns \u003d []"},{"line_number":3128,"context_line":"        target_portals \u003d []"},{"line_number":3129,"context_line":""},{"line_number":3130,"context_line":"        # Aggregate all targets together, we may end up with different LUNs"},{"line_number":3131,"context_line":"        # for different target nqn/subsys sets (ie. it could be a unique LUN"},{"line_number":3132,"context_line":"        # for each FlashArray)"},{"line_number":3133,"context_line":"        for target in targets:"}],"source_content_type":"text/x-python","patch_set":38,"id":"963a1ae2_4dcc925e","line":3130,"range":{"start_line":3130,"start_character":71,"end_line":3130,"end_character":75},"in_reply_to":"dbde3c87_d155cae1","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3131,"context_line":"        # for different target nqn/subsys sets (ie. it could be a unique LUN"},{"line_number":3132,"context_line":"        # for each FlashArray)"},{"line_number":3133,"context_line":"        for target in targets:"},{"line_number":3134,"context_line":"            port_iter \u003d iter(target[\"ports\"])"},{"line_number":3135,"context_line":"            for port in port_iter:"},{"line_number":3136,"context_line":"                # Check to ensure that the portal IP is in the NVMe target"},{"line_number":3137,"context_line":"                # CIDR before adding it"}],"source_content_type":"text/x-python","patch_set":38,"id":"88909871_f701e8d6","line":3134,"range":{"start_line":3134,"start_character":24,"end_line":3134,"end_character":28},"updated":"2022-07-27 15:50:35.000000000","message":"-1: Why do you need to create an iterator from a list?  Unless I\u0027m missing something, it should not be necessary.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3131,"context_line":"        # for different target nqn/subsys sets (ie. it could be a unique LUN"},{"line_number":3132,"context_line":"        # for each FlashArray)"},{"line_number":3133,"context_line":"        for target in targets:"},{"line_number":3134,"context_line":"            port_iter \u003d iter(target[\"ports\"])"},{"line_number":3135,"context_line":"            for port in port_iter:"},{"line_number":3136,"context_line":"                # Check to ensure that the portal IP is in the NVMe target"},{"line_number":3137,"context_line":"                # CIDR before adding it"}],"source_content_type":"text/x-python","patch_set":38,"id":"d0d04294_3b29e36a","line":3134,"range":{"start_line":3134,"start_character":24,"end_line":3134,"end_character":28},"in_reply_to":"88909871_f701e8d6","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3137,"context_line":"                # CIDR before adding it"},{"line_number":3138,"context_line":"                target_portal \u003d port[\"portal\"]"},{"line_number":3139,"context_line":"                if target_portal and port[\"nqn\"]:"},{"line_number":3140,"context_line":"                    portal, p_sep, p_port \u003d target_portal.rpartition(\u0027:\u0027)"},{"line_number":3141,"context_line":"                    portal \u003d portal.strip(\"[]\")"},{"line_number":3142,"context_line":"                    check_ip \u003d ipaddress.ip_address(portal)"},{"line_number":3143,"context_line":"                    for check_cidr in check_cidrs:"}],"source_content_type":"text/x-python","patch_set":38,"id":"a74338bd_c74a61ec","line":3140,"range":{"start_line":3140,"start_character":58,"end_line":3140,"end_character":68},"updated":"2022-07-27 15:50:35.000000000","message":"nit: There\u0027s no need to use rpartition when we don\u0027t care about the separator. We can use rsplit and limit to a single split.\n\n  portal, p_port \u003d target_portal.rsplit(\u0027:\u0027, 1)","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3137,"context_line":"                # CIDR before adding it"},{"line_number":3138,"context_line":"                target_portal \u003d port[\"portal\"]"},{"line_number":3139,"context_line":"                if target_portal and port[\"nqn\"]:"},{"line_number":3140,"context_line":"                    portal, p_sep, p_port \u003d target_portal.rpartition(\u0027:\u0027)"},{"line_number":3141,"context_line":"                    portal \u003d portal.strip(\"[]\")"},{"line_number":3142,"context_line":"                    check_ip \u003d ipaddress.ip_address(portal)"},{"line_number":3143,"context_line":"                    for check_cidr in check_cidrs:"}],"source_content_type":"text/x-python","patch_set":38,"id":"ef517934_90e7e6cb","line":3140,"range":{"start_line":3140,"start_character":58,"end_line":3140,"end_character":68},"in_reply_to":"a74338bd_c74a61ec","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3153,"context_line":"        )"},{"line_number":3154,"context_line":""},{"line_number":3155,"context_line":"        # If we have multiple ports always report them."},{"line_number":3156,"context_line":"        if target_luns and target_nqns:"},{"line_number":3157,"context_line":"            props[\"data\"][\"portals\"] \u003d target_portals"},{"line_number":3158,"context_line":"            props[\"data\"][\"target_nqn\"] \u003d target_nqns[0]"},{"line_number":3159,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"f97e4bfe_3b4a2b80","line":3156,"range":{"start_line":3156,"start_character":8,"end_line":3156,"end_character":39},"updated":"2022-07-27 15:50:35.000000000","message":"-1: We should fail if this doesn\u0027t happen, because the connection information won\u0027t have enough information to do the connection.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3153,"context_line":"        )"},{"line_number":3154,"context_line":""},{"line_number":3155,"context_line":"        # If we have multiple ports always report them."},{"line_number":3156,"context_line":"        if target_luns and target_nqns:"},{"line_number":3157,"context_line":"            props[\"data\"][\"portals\"] \u003d target_portals"},{"line_number":3158,"context_line":"            props[\"data\"][\"target_nqn\"] \u003d target_nqns[0]"},{"line_number":3159,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"139981da_c61c81d2","line":3156,"range":{"start_line":3156,"start_character":8,"end_line":3156,"end_character":39},"in_reply_to":"f97e4bfe_3b4a2b80","updated":"2022-07-27 16:43:19.000000000","message":"Done","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"c425ae91213dc098892185bff5ab622397dda915","unresolved":true,"context_lines":[{"line_number":3203,"context_line":"            if personality:"},{"line_number":3204,"context_line":"                self.set_personality(array, host_name, personality)"},{"line_number":3205,"context_line":""},{"line_number":3206,"context_line":"        # TODO(patrickeast): Ensure that the host has the correct preferred"},{"line_number":3207,"context_line":"        # arrays configured for it."},{"line_number":3208,"context_line":""},{"line_number":3209,"context_line":"        return self._connect_host_to_vol(array, host_name, vol_name)"}],"source_content_type":"text/x-python","patch_set":38,"id":"5191ea88_a52dd160","line":3206,"range":{"start_line":3206,"start_character":15,"end_line":3206,"end_character":26},"updated":"2022-07-27 15:50:35.000000000","message":"nit: We no longer add names to TODO comments.","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"ba8a06e89775a440ebf41806b66be0778feb15f4","unresolved":false,"context_lines":[{"line_number":3203,"context_line":"            if personality:"},{"line_number":3204,"context_line":"                self.set_personality(array, host_name, personality)"},{"line_number":3205,"context_line":""},{"line_number":3206,"context_line":"        # TODO(patrickeast): Ensure that the host has the correct preferred"},{"line_number":3207,"context_line":"        # arrays configured for it."},{"line_number":3208,"context_line":""},{"line_number":3209,"context_line":"        return self._connect_host_to_vol(array, host_name, vol_name)"}],"source_content_type":"text/x-python","patch_set":38,"id":"4b0a7dd1_5ae1c64a","line":3206,"range":{"start_line":3206,"start_character":15,"end_line":3206,"end_character":26},"in_reply_to":"5191ea88_a52dd160","updated":"2022-07-27 16:43:19.000000000","message":"LOL - the ghost of patrickeast. I\u0027ll remove all those TODO references...","commit_id":"7b8a7c57d630c7ef57de68b024875318c59a263a"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"c6fceb7820475c71c6006bf5437d97dc9b2044ab","unresolved":true,"context_lines":[{"line_number":3007,"context_line":"            target_arrays +\u003d self._uniform_active_cluster_target_arrays"},{"line_number":3008,"context_line":""},{"line_number":3009,"context_line":"        targets \u003d []"},{"line_number":3010,"context_line":"        target_ports \u003d []"},{"line_number":3011,"context_line":"        for array in target_arrays:"},{"line_number":3012,"context_line":"            connection \u003d self._connect(array, pure_vol_name, connector)"},{"line_number":3013,"context_line":"            target_ports \u003d self._get_target_nvme_ports(array)"}],"source_content_type":"text/x-python","patch_set":46,"id":"e5d1ffb4_369885f3","line":3010,"updated":"2022-07-28 03:31:06.000000000","message":"target_ports does not need to be declared outside of the loop.","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bfa7bb0801cea4961daedfd3dda2d6bba4b13ba","unresolved":false,"context_lines":[{"line_number":3007,"context_line":"            target_arrays +\u003d self._uniform_active_cluster_target_arrays"},{"line_number":3008,"context_line":""},{"line_number":3009,"context_line":"        targets \u003d []"},{"line_number":3010,"context_line":"        target_ports \u003d []"},{"line_number":3011,"context_line":"        for array in target_arrays:"},{"line_number":3012,"context_line":"            connection \u003d self._connect(array, pure_vol_name, connector)"},{"line_number":3013,"context_line":"            target_ports \u003d self._get_target_nvme_ports(array)"}],"source_content_type":"text/x-python","patch_set":46,"id":"18c2d4ed_54269c92","line":3010,"in_reply_to":"e5d1ffb4_369885f3","updated":"2022-07-29 13:53:30.000000000","message":"Done","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2097044102678eb9435da96ff7e6f32511d8a431","unresolved":false,"context_lines":[{"line_number":3007,"context_line":"            target_arrays +\u003d self._uniform_active_cluster_target_arrays"},{"line_number":3008,"context_line":""},{"line_number":3009,"context_line":"        targets \u003d []"},{"line_number":3010,"context_line":"        target_ports \u003d []"},{"line_number":3011,"context_line":"        for array in target_arrays:"},{"line_number":3012,"context_line":"            connection \u003d self._connect(array, pure_vol_name, connector)"},{"line_number":3013,"context_line":"            target_ports \u003d self._get_target_nvme_ports(array)"}],"source_content_type":"text/x-python","patch_set":46,"id":"63550232_0d6c8c40","line":3010,"in_reply_to":"e5d1ffb4_369885f3","updated":"2022-07-28 09:57:10.000000000","message":"Done","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"c6fceb7820475c71c6006bf5437d97dc9b2044ab","unresolved":true,"context_lines":[{"line_number":3017,"context_line":"                    \"ports\": target_ports,"},{"line_number":3018,"context_line":"                }"},{"line_number":3019,"context_line":"            )"},{"line_number":3020,"context_line":"            properties \u003d self._build_connection_properties(targets)"},{"line_number":3021,"context_line":""},{"line_number":3022,"context_line":"        properties[\"data\"][\"volume_nguid\"] \u003d self._get_nguid(pure_vol_name)"},{"line_number":3023,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"df6f6a9b_8a326ec3","line":3020,"updated":"2022-07-28 03:31:06.000000000","message":"-1: Shouldn\u0027t this line be out of the \"for array in target_arrays\" loop? It looks like in the latest iteration all targets will be in the targets list and _build_connection_properties() will return the correct info anyway, but I believe this can be done just once after the loop.","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2097044102678eb9435da96ff7e6f32511d8a431","unresolved":false,"context_lines":[{"line_number":3017,"context_line":"                    \"ports\": target_ports,"},{"line_number":3018,"context_line":"                }"},{"line_number":3019,"context_line":"            )"},{"line_number":3020,"context_line":"            properties \u003d self._build_connection_properties(targets)"},{"line_number":3021,"context_line":""},{"line_number":3022,"context_line":"        properties[\"data\"][\"volume_nguid\"] \u003d self._get_nguid(pure_vol_name)"},{"line_number":3023,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"c87cdf81_4c82a2b7","line":3020,"in_reply_to":"df6f6a9b_8a326ec3","updated":"2022-07-28 09:57:10.000000000","message":"Done","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"c6fceb7820475c71c6006bf5437d97dc9b2044ab","unresolved":true,"context_lines":[{"line_number":3019,"context_line":"            )"},{"line_number":3020,"context_line":"            properties \u003d self._build_connection_properties(targets)"},{"line_number":3021,"context_line":""},{"line_number":3022,"context_line":"        properties[\"data\"][\"volume_nguid\"] \u003d self._get_nguid(pure_vol_name)"},{"line_number":3023,"context_line":""},{"line_number":3024,"context_line":"        return properties"},{"line_number":3025,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"89184a8d_c9cbdddc","line":3022,"updated":"2022-07-28 03:31:06.000000000","message":"suggestion: why not move this to _build_connection_properties()? You would be manipulating connection data in a single place simplifying UTs.","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bfa7bb0801cea4961daedfd3dda2d6bba4b13ba","unresolved":true,"context_lines":[{"line_number":3019,"context_line":"            )"},{"line_number":3020,"context_line":"            properties \u003d self._build_connection_properties(targets)"},{"line_number":3021,"context_line":""},{"line_number":3022,"context_line":"        properties[\"data\"][\"volume_nguid\"] \u003d self._get_nguid(pure_vol_name)"},{"line_number":3023,"context_line":""},{"line_number":3024,"context_line":"        return properties"},{"line_number":3025,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"777a99d1_7f39a666","line":3022,"in_reply_to":"89184a8d_c9cbdddc","updated":"2022-07-29 13:53:30.000000000","message":"I agree, but doing it this way conforms to the exisitng way it is done for iSCSI. We\u0027d like to keep consistency in the code.","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2097044102678eb9435da96ff7e6f32511d8a431","unresolved":true,"context_lines":[{"line_number":3019,"context_line":"            )"},{"line_number":3020,"context_line":"            properties \u003d self._build_connection_properties(targets)"},{"line_number":3021,"context_line":""},{"line_number":3022,"context_line":"        properties[\"data\"][\"volume_nguid\"] \u003d self._get_nguid(pure_vol_name)"},{"line_number":3023,"context_line":""},{"line_number":3024,"context_line":"        return properties"},{"line_number":3025,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"c210890e_5703ab6c","line":3022,"in_reply_to":"89184a8d_c9cbdddc","updated":"2022-07-28 09:57:10.000000000","message":"You can see in patchset #38 how different NVMe-oF protocols will generate the properties in a different way (not with the _build_connection_properties method), but this part is common to all of them.","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"c98f61aa9147a71dff4042f11d63b7acaa5f78c4","unresolved":true,"context_lines":[{"line_number":3019,"context_line":"            )"},{"line_number":3020,"context_line":"            properties \u003d self._build_connection_properties(targets)"},{"line_number":3021,"context_line":""},{"line_number":3022,"context_line":"        properties[\"data\"][\"volume_nguid\"] \u003d self._get_nguid(pure_vol_name)"},{"line_number":3023,"context_line":""},{"line_number":3024,"context_line":"        return properties"},{"line_number":3025,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"784cd481_e6be7c10","line":3022,"in_reply_to":"c210890e_5703ab6c","updated":"2022-07-29 04:19:21.000000000","message":"Gorka you mean the line should stay where it is?","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"c6fceb7820475c71c6006bf5437d97dc9b2044ab","unresolved":true,"context_lines":[{"line_number":3068,"context_line":"                                (portal, NVME_PORT, self.transport_type)"},{"line_number":3069,"context_line":"                            )"},{"line_number":3070,"context_line":""},{"line_number":3071,"context_line":"        LOG.info("},{"line_number":3072,"context_line":"            \"NVMe target portals that match CIDR range: \u0027%s\u0027\", target_portals"},{"line_number":3073,"context_line":"        )"},{"line_number":3074,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"d068854c_283eb42c","line":3071,"updated":"2022-07-28 03:31:06.000000000","message":"I would recommend to set log entry to \"debug\" to avoid exposing storage ip addresses unnecessarily in log files.","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bfa7bb0801cea4961daedfd3dda2d6bba4b13ba","unresolved":false,"context_lines":[{"line_number":3068,"context_line":"                                (portal, NVME_PORT, self.transport_type)"},{"line_number":3069,"context_line":"                            )"},{"line_number":3070,"context_line":""},{"line_number":3071,"context_line":"        LOG.info("},{"line_number":3072,"context_line":"            \"NVMe target portals that match CIDR range: \u0027%s\u0027\", target_portals"},{"line_number":3073,"context_line":"        )"},{"line_number":3074,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"1a2b6d70_ce3dcdfd","line":3071,"in_reply_to":"d068854c_283eb42c","updated":"2022-07-29 13:53:30.000000000","message":"Done","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2097044102678eb9435da96ff7e6f32511d8a431","unresolved":false,"context_lines":[{"line_number":3068,"context_line":"                                (portal, NVME_PORT, self.transport_type)"},{"line_number":3069,"context_line":"                            )"},{"line_number":3070,"context_line":""},{"line_number":3071,"context_line":"        LOG.info("},{"line_number":3072,"context_line":"            \"NVMe target portals that match CIDR range: \u0027%s\u0027\", target_portals"},{"line_number":3073,"context_line":"        )"},{"line_number":3074,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"8ef27fcf_1624428a","line":3071,"in_reply_to":"d068854c_283eb42c","updated":"2022-07-28 09:57:10.000000000","message":"Done","commit_id":"1a9f564ca22e289eff94500bc09f05318149fc2c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2097044102678eb9435da96ff7e6f32511d8a431","unresolved":true,"context_lines":[{"line_number":2988,"context_line":"                 \"24a937\" + volume_info[\u0027serial\u0027][-10:])"},{"line_number":2989,"context_line":"        return nguid.lower()"},{"line_number":2990,"context_line":""},{"line_number":2991,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":2992,"context_line":"        \"\"\"Return a list of dicts describing existing host objects or None.\"\"\""},{"line_number":2993,"context_line":"        hosts \u003d array.list_hosts(remote\u003dremote)"},{"line_number":2994,"context_line":"        matching_hosts \u003d [host for host in hosts"}],"source_content_type":"text/x-python","patch_set":48,"id":"5372b457_8dcf085d","line":2991,"range":{"start_line":2991,"start_character":8,"end_line":2991,"end_character":17},"updated":"2022-07-28 09:57:10.000000000","message":"nit: On patchset #38 I suggested changing this to _get_hosts to reflect that the method returns a list of strings and not a single string and you said done, but the change doesn\u0027t seem to be here.","commit_id":"208dd8f7c11781224b820fbf376b0d70c57701a0"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bfa7bb0801cea4961daedfd3dda2d6bba4b13ba","unresolved":false,"context_lines":[{"line_number":2988,"context_line":"                 \"24a937\" + volume_info[\u0027serial\u0027][-10:])"},{"line_number":2989,"context_line":"        return nguid.lower()"},{"line_number":2990,"context_line":""},{"line_number":2991,"context_line":"    def _get_host(self, array, connector, remote\u003dFalse):"},{"line_number":2992,"context_line":"        \"\"\"Return a list of dicts describing existing host objects or None.\"\"\""},{"line_number":2993,"context_line":"        hosts \u003d array.list_hosts(remote\u003dremote)"},{"line_number":2994,"context_line":"        matching_hosts \u003d [host for host in hosts"}],"source_content_type":"text/x-python","patch_set":48,"id":"9f889dc0_6fa1b11b","line":2991,"range":{"start_line":2991,"start_character":8,"end_line":2991,"end_character":17},"in_reply_to":"5372b457_8dcf085d","updated":"2022-07-29 13:53:30.000000000","message":"Must use as `_get_host()` as this is the way it is done in many other locations. The docstring does state that a list is returned.","commit_id":"208dd8f7c11781224b820fbf376b0d70c57701a0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"2097044102678eb9435da96ff7e6f32511d8a431","unresolved":true,"context_lines":[{"line_number":3027,"context_line":"            \"driver_volume_type\": \"nvmeof\","},{"line_number":3028,"context_line":"            \"data\": {"},{"line_number":3029,"context_line":"                \"discard\": True,"},{"line_number":3030,"context_line":"                \"sparse_copy_volume\": True,"},{"line_number":3031,"context_line":"            },"},{"line_number":3032,"context_line":"        }"},{"line_number":3033,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"fa5e9128_5bc62b09","line":3030,"updated":"2022-07-28 09:57:10.000000000","message":"-1: This needs to be reported as a capability to the scheduler, not as part of the connection properties.\n\nIn your driver this goes in the _update_volume_stats method.\n\n        # Add flags for supported features\n        data[\u0027consistencygroup_support\u0027] \u003d True\n        data[\u0027thin_provisioning_support\u0027] \u003d True\n        data[\u0027multiattach\u0027] \u003d True\n        data[\u0027QoS_support\u0027] \u003d True\n        data[\u0027sparse_copy_volume\u0027] \u003d True","commit_id":"208dd8f7c11781224b820fbf376b0d70c57701a0"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"0bfa7bb0801cea4961daedfd3dda2d6bba4b13ba","unresolved":false,"context_lines":[{"line_number":3027,"context_line":"            \"driver_volume_type\": \"nvmeof\","},{"line_number":3028,"context_line":"            \"data\": {"},{"line_number":3029,"context_line":"                \"discard\": True,"},{"line_number":3030,"context_line":"                \"sparse_copy_volume\": True,"},{"line_number":3031,"context_line":"            },"},{"line_number":3032,"context_line":"        }"},{"line_number":3033,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"15d0a8d5_c86ebdbd","line":3030,"in_reply_to":"fa5e9128_5bc62b09","updated":"2022-07-29 13:53:30.000000000","message":"Done","commit_id":"208dd8f7c11781224b820fbf376b0d70c57701a0"}],"doc/source/configuration/block-storage/drivers/pure-storage-driver.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Support for iSCSI storage protocol is available with the PureISCSIDriver"},{"line_number":10,"context_line":"Volume Driver class, Fibre Channel with the PureFCDriver and NVMe-ROCE"},{"line_number":11,"context_line":"with the PureNVMEROCEDriver."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"iSCSI and Fibre Channel  drivers are compatible with Purity FlashArrays"},{"line_number":14,"context_line":"that support the REST API version 1.6 and higher (Purity 4.7.0 and newer)."}],"source_content_type":"text/x-rst","patch_set":13,"id":"1b2372f2_44443d18","line":11,"range":{"start_line":11,"start_character":9,"end_line":11,"end_character":27},"updated":"2022-01-18 23:28:51.000000000","message":"I think the driver class name is actually PureNVMEDriver.","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5bd828bd79482f3f9c4c2a7e1c1fd34ef022cfa1","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Support for iSCSI storage protocol is available with the PureISCSIDriver"},{"line_number":10,"context_line":"Volume Driver class, Fibre Channel with the PureFCDriver and NVMe-ROCE"},{"line_number":11,"context_line":"with the PureNVMEROCEDriver."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"iSCSI and Fibre Channel  drivers are compatible with Purity FlashArrays"},{"line_number":14,"context_line":"that support the REST API version 1.6 and higher (Purity 4.7.0 and newer)."}],"source_content_type":"text/x-rst","patch_set":13,"id":"d4a66887_803b661a","line":11,"range":{"start_line":11,"start_character":9,"end_line":11,"end_character":27},"in_reply_to":"1b2372f2_44443d18","updated":"2022-01-19 00:18:54.000000000","message":"Ack","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":true,"context_lines":[{"line_number":160,"context_line":"   PURE_VOLUME_DRIVER"},{"line_number":161,"context_line":"       Use ``cinder.volume.drivers.pure.PureISCSIDriver`` for iSCSI,"},{"line_number":162,"context_line":"       ``cinder.volume.drivers.pure.PureFCDriver`` for Fibre Channel"},{"line_number":163,"context_line":"       or ``cinder.volume.drivers.pure.PureNVMEROCEDriver`` for"},{"line_number":164,"context_line":"       NVME-ROCE connectivity."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"   IP_PURE_MGMT"}],"source_content_type":"text/x-rst","patch_set":13,"id":"68598391_e223e593","line":163,"range":{"start_line":163,"start_character":39,"end_line":163,"end_character":57},"updated":"2022-01-18 23:28:51.000000000","message":"PureNVMEDriver","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5bd828bd79482f3f9c4c2a7e1c1fd34ef022cfa1","unresolved":false,"context_lines":[{"line_number":160,"context_line":"   PURE_VOLUME_DRIVER"},{"line_number":161,"context_line":"       Use ``cinder.volume.drivers.pure.PureISCSIDriver`` for iSCSI,"},{"line_number":162,"context_line":"       ``cinder.volume.drivers.pure.PureFCDriver`` for Fibre Channel"},{"line_number":163,"context_line":"       or ``cinder.volume.drivers.pure.PureNVMEROCEDriver`` for"},{"line_number":164,"context_line":"       NVME-ROCE connectivity."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"   IP_PURE_MGMT"}],"source_content_type":"text/x-rst","patch_set":13,"id":"2b96eca3_26255857","line":163,"range":{"start_line":163,"start_character":39,"end_line":163,"end_character":57},"in_reply_to":"68598391_e223e593","updated":"2022-01-19 00:18:54.000000000","message":"Ack","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"a6cbc472b715f36c2322fa3b69cf19fee96a5957","unresolved":true,"context_lines":[{"line_number":161,"context_line":"       Use ``cinder.volume.drivers.pure.PureISCSIDriver`` for iSCSI,"},{"line_number":162,"context_line":"       ``cinder.volume.drivers.pure.PureFCDriver`` for Fibre Channel"},{"line_number":163,"context_line":"       or ``cinder.volume.drivers.pure.PureNVMEDriver`` for"},{"line_number":164,"context_line":"       NVME connectivity."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"       If using the NVME driver, specify the ``pure_nvme_transport`` value."},{"line_number":167,"context_line":"       Currently only ``roce`` is supported."}],"source_content_type":"text/x-rst","patch_set":49,"id":"474251da_8e6cd121","line":164,"range":{"start_line":164,"start_character":7,"end_line":164,"end_character":11},"updated":"2022-07-29 17:57:50.000000000","message":"nit: NVMe","commit_id":"dfbcca0d8b03050d2ca56984605c1dc27353ecc3"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"a6cbc472b715f36c2322fa3b69cf19fee96a5957","unresolved":true,"context_lines":[{"line_number":163,"context_line":"       or ``cinder.volume.drivers.pure.PureNVMEDriver`` for"},{"line_number":164,"context_line":"       NVME connectivity."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"       If using the NVME driver, specify the ``pure_nvme_transport`` value."},{"line_number":167,"context_line":"       Currently only ``roce`` is supported."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"   IP_PURE_MGMT"}],"source_content_type":"text/x-rst","patch_set":49,"id":"34a554d0_b9f0207b","line":166,"range":{"start_line":166,"start_character":20,"end_line":166,"end_character":24},"updated":"2022-07-29 17:57:50.000000000","message":"nit: NVMe","commit_id":"dfbcca0d8b03050d2ca56984605c1dc27353ecc3"}],"doc/source/reference/support-matrix.ini":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":true,"context_lines":[{"line_number":157,"context_line":"title\u003dProphetStor Flexvisor Driver (iSCSI, NFS)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"[driver.pure]"},{"line_number":160,"context_line":"title\u003dPure Storage Driver (iSCSI, FC, NVMe-RDMA)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"[driver.qnap]"},{"line_number":163,"context_line":"title\u003dQNAP Storage Driver (iSCSI)"}],"source_content_type":"text/x-properties","patch_set":13,"id":"7fe592b3_20cdafb0","line":160,"range":{"start_line":160,"start_character":38,"end_line":160,"end_character":47},"updated":"2022-01-18 23:28:51.000000000","message":"do you want NVMe-RoCE here, or simply \u0027NVMe\u0027?","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5bd828bd79482f3f9c4c2a7e1c1fd34ef022cfa1","unresolved":true,"context_lines":[{"line_number":157,"context_line":"title\u003dProphetStor Flexvisor Driver (iSCSI, NFS)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"[driver.pure]"},{"line_number":160,"context_line":"title\u003dPure Storage Driver (iSCSI, FC, NVMe-RDMA)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"[driver.qnap]"},{"line_number":163,"context_line":"title\u003dQNAP Storage Driver (iSCSI)"}],"source_content_type":"text/x-properties","patch_set":13,"id":"9dd771f0_c0fbdc0d","line":160,"range":{"start_line":160,"start_character":38,"end_line":160,"end_character":47},"in_reply_to":"7fe592b3_20cdafb0","updated":"2022-01-19 00:18:54.000000000","message":"Gpoing to make this NVMe-RoCe as this is the only support transport type for NVME, today.\nWill add FC and TCP as they become available","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1c03a492f1650e02dbd5423e60335b0101cfe66e","unresolved":false,"context_lines":[{"line_number":157,"context_line":"title\u003dProphetStor Flexvisor Driver (iSCSI, NFS)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"[driver.pure]"},{"line_number":160,"context_line":"title\u003dPure Storage Driver (iSCSI, FC, NVMe-RDMA)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"[driver.qnap]"},{"line_number":163,"context_line":"title\u003dQNAP Storage Driver (iSCSI)"}],"source_content_type":"text/x-properties","patch_set":13,"id":"c917f450_8a7d101f","line":160,"range":{"start_line":160,"start_character":38,"end_line":160,"end_character":47},"in_reply_to":"9dd771f0_c0fbdc0d","updated":"2022-03-04 19:39:59.000000000","message":"Done","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"}],"releasenotes/notes/pure-storage-nvme-driver-f4217c00379c4827.yaml":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"d5eecbf403d14c7be29d8fb3701c98cd887559f8","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Pure Storage adds new driver to support NVMe-RoCE for the FlashArray."},{"line_number":5,"context_line":"    All features of the iSCSI and FC drivers are fully supported by this new"},{"line_number":6,"context_line":"    driver with the exception of synchronous replication."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"4ad662ad_d13162eb","line":4,"range":{"start_line":4,"start_character":22,"end_line":4,"end_character":32},"updated":"2022-01-18 23:28:51.000000000","message":"\u0027a new driver\u0027","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"5bd828bd79482f3f9c4c2a7e1c1fd34ef022cfa1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Pure Storage adds new driver to support NVMe-RoCE for the FlashArray."},{"line_number":5,"context_line":"    All features of the iSCSI and FC drivers are fully supported by this new"},{"line_number":6,"context_line":"    driver with the exception of synchronous replication."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"818c9b82_7b2f32cd","line":4,"range":{"start_line":4,"start_character":22,"end_line":4,"end_character":32},"in_reply_to":"4ad662ad_d13162eb","updated":"2022-01-19 00:18:54.000000000","message":"Ack","commit_id":"5d2c57a008485d37ec28847cdd3bdf038e30ab15"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"a6cbc472b715f36c2322fa3b69cf19fee96a5957","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Pure Storage adds a new driver to support NVMe-RoCE for the"},{"line_number":5,"context_line":"    FlashArray."},{"line_number":6,"context_line":"    All features of the iSCSI and FC drivers are fully supported by this new"},{"line_number":7,"context_line":"    driver with the exception of synchronous replication."}],"source_content_type":"text/x-yaml","patch_set":49,"id":"d5f7e621_2f1b852d","line":4,"range":{"start_line":4,"start_character":17,"end_line":4,"end_character":21},"updated":"2022-07-29 17:57:50.000000000","message":"nit: added\nthese release notes are visible after the feature is merged and released so it\u0027s a good practice to write them in past tense","commit_id":"dfbcca0d8b03050d2ca56984605c1dc27353ecc3"}]}
