)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"95085c95c39faa17119e99744379f9aae432631c","unresolved":true,"context_lines":[{"line_number":7,"context_line":"VAST Data Volume Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit introduces the VAST Data driver for Cinder."},{"line_number":10,"context_line":"The VAST Data Platform unifies storage, database, and containerized compute into a single, scalable software platform to power AI and deep learning in modern data centers and clouds."},{"line_number":11,"context_line":"VAST Data\u0027s architecture is designed to deliver performance, scalability, and simplicity, leveraging a disaggregated shared-everything (DASE) design to enable the consolidation of workloads on a single, highly efficient storage system."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The Cinder driver for VAST Data currently supports the following functionality:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":60,"id":"d9f58636_ab668adc","line":10,"updated":"2025-12-12 22:02:46.000000000","message":"nit: If you need to update for other reasons, please make sure line length is no longer than 72 characters in the commit description. There are some tools that use the commit data in git itself to report various things, and while this doesn\u0027t break anything, it does mess up some formatting.\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7c9688370fc098fa300251c49c8cfb6dd2a15425","unresolved":false,"context_lines":[{"line_number":7,"context_line":"VAST Data Volume Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit introduces the VAST Data driver for Cinder."},{"line_number":10,"context_line":"The VAST Data Platform unifies storage, database, and containerized compute into a single, scalable software platform to power AI and deep learning in modern data centers and clouds."},{"line_number":11,"context_line":"VAST Data\u0027s architecture is designed to deliver performance, scalability, and simplicity, leveraging a disaggregated shared-everything (DASE) design to enable the consolidation of workloads on a single, highly efficient storage system."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The Cinder driver for VAST Data currently supports the following functionality:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":60,"id":"5867b897_4531720e","line":10,"in_reply_to":"d9f58636_ab668adc","updated":"2026-01-08 12:07:04.000000000","message":"Done","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":36951},"change_message_id":"11c447dcc0f3b96e2ef0e2e9349344a39b0b45d7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ecc3efc6_9417b214","updated":"2025-01-13 10:56:36.000000000","message":"Nice work!","commit_id":"05815de8fdd3993bb06d658ea836c5e0f49fea22"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"f08ec18045448589791b44b687c5e9910b82be1c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"81f5bc4b_da7693dc","in_reply_to":"ecc3efc6_9417b214","updated":"2025-01-18 14:10:04.000000000","message":"Done","commit_id":"05815de8fdd3993bb06d658ea836c5e0f49fea22"},{"author":{"_account_id":29122,"name":"Raghavendra Tilay","email":"raghavendra-uddhav.tilay@hpe.com","username":"raghavendrat"},"change_message_id":"ece2c5556688e9aec14573245196d33bb87d2240","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"76ed1fe7_75c82ae5","updated":"2025-01-16 07:34:46.000000000","message":"Welcome Volodymyr and VAST Data Volume Driver to OpenStack community.\nRequest to please refer to checklists [1] and [2] as starting point.\n\n[1] https://wiki.openstack.org/wiki/Cinder/how-to-contribute-a-driver\n[2] https://docs.openstack.org/cinder/latest/contributor/new_driver_checklist.html\n\nBelow patch [3] is: Add Cinder driver for TOYOU\nIt can be used as reference.\n\n[3] https://review.opendev.org/c/openstack/cinder/+/767290\n\nOnce ready, you may add this patch in \"Review requests\" section of next weekly meet [4].\n\n[4] https://etherpad.opendev.org/p/cinder-epoxy-meetings\n\nLeaving -1 for now, since many things need to be addressed.","commit_id":"9ffee6c10a09091b5146ab47629c66f92d8e3d79"},{"author":{"_account_id":33612,"name":"yuval","email":"yuval@lightbitslabs.com","username":"yuval"},"change_message_id":"52e3e39d601ddc8c9b60f4bc45c211a017e09f8b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"1387b7f7_30e37705","updated":"2025-01-20 13:35:56.000000000","message":"unittests should be added","commit_id":"ab4981d58143a5d352bad949f9555e44e6f38f1d"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"9307e0249464fc9a2d1e9e7c7094afb6ee08fcc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"e6a5e4f2_f309dcb5","updated":"2025-03-14 14:12:23.000000000","message":"You will need a 3rd Party CI system to report against both cinder and os-brick before we can consider this new driver.","commit_id":"4d0dc56a8564e055ca75a56d71cfd4d687fefd49"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"be8a3ad0e71e0b0fa6d65c4fd03849a7d21068ab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"93f85bda_5eb82da2","in_reply_to":"e6a5e4f2_f309dcb5","updated":"2025-04-01 10:34:38.000000000","message":"Done","commit_id":"4d0dc56a8564e055ca75a56d71cfd4d687fefd49"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"978a7ea6_141c9cc8","updated":"2025-08-18 19:49:47.000000000","message":"-1, but mainly for minor issues and questions that should be relatively easy to resolve. I\u0027m not sure how to handle the reference to easypy from a licensing perspective.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"65ba7963_504f0b80","updated":"2025-09-01 14:57:13.000000000","message":"LO","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8700ab4dd20c09cc959045d48962958d8e6220b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"d1bfbaaa_a96f037c","updated":"2025-04-14 14:14:38.000000000","message":"recheck\n\nunrelated failure in cinder-grenade-mn-sub-volbak","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"0eaeb1c7_f899cb8f","in_reply_to":"978a7ea6_141c9cc8","updated":"2025-09-01 14:57:13.000000000","message":"Hi Alan. Thank you for review.\neasypy lib was created and maintained by our software engeener Ofer Coren.\nBTW we already use it in manila driver which is certified one:\nhttps://github.com/openstack/manila/blob/master/manila/share/drivers/vastdata/driver_util.py#L27\n\nHere ^^ the same Bunch object only. No reason to include all easypy. And, btw it is not one-to-one implementation of easypy Bunch.\n\nReferrence can be deleted if you prefer.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"96b31f145539e0af129e86fbdbdfff50d19e2a70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":56,"id":"961af88e_ca08da59","updated":"2025-11-03 19:09:33.000000000","message":"I\u0027m curious if the last several patch sets were added to address test failures (possibly these might be internal tests beyond what\u0027s covered by CI) or missing features.\n\nThe reason I ask is it\u0027s hard to judge when you feel the patch is \"done\" and is ready for further review. If you anticipate the need for more patch sets then you could set the Workflow to -1 to indicate you\u0027re still working on the patch.","commit_id":"beca4eb729eab32f8161b89eb61527246fbc7638"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"40aaa077ab78b9cc303e181d2fc8e029fd37fcfd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":57,"id":"d4bfc361_468159a5","updated":"2025-11-07 18:14:57.000000000","message":"This looks like a well-written patch, with most or all problems already corrected.\n\nI have a few questions myself (mostly just double-checks), and will issue +1 once they have responses.","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"0da6a3294df870041bcb5a3ce3ce2dae367cf804","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":57,"id":"d1482d6c_e3d8550e","in_reply_to":"d4bfc361_468159a5","updated":"2025-11-11 18:19:59.000000000","message":"Hi. Thank you for your comments.","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"498f2cbaaf59b938a50b8f60891757c3050e9f87","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":59,"id":"e045b489_ab1a0de3","updated":"2025-11-12 03:31:06.000000000","message":"As mentioned before, this is a very nice looking patch.\n\nI still have one clarification (sorry for being too vague in the first review), and then this patch will get a +1 from me.","commit_id":"789edca49d390094e521032dfd304eb20c941c8e"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"d5c8173c46aac8b64a4114207d1a0b8709761d7c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":59,"id":"56bf3b91_3d9a3521","updated":"2025-11-11 21:31:28.000000000","message":"recheck cinder-plugin-ceph-tempest unrelated","commit_id":"789edca49d390094e521032dfd304eb20c941c8e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"84611f5efd97ddebe53ceb17790891e474fa6953","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":60,"id":"5d86a0a2_0275a9fe","updated":"2025-12-12 04:25:50.000000000","message":"Everything looks good (really nice work) and the third-party CI is running and passing on this patch.  The only issue I noticed is noted inline; should be a quick change, and one that will be super easy to re-review (so you will get your +2s quickly).\n\nThird party CI is also responding on some non-VAST patches:\nhttps://review.opendev.org/q/commentby:manila-ci@vastdata.com+project:openstack/cinder+status:open\n\nthough that\u0027s really not a large number of patches, you might want to take a look (or maybe you were down for maintenance recently or something).","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"0a09bc177a23d45ec7aa68ca5687e777129e7c34","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":60,"id":"a05806c4_b9acf7e8","updated":"2025-12-01 21:45:23.000000000","message":"I haven\u0027t gotten through the entire checklist yet, but first pass everything looks quite good.","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"092796086f5c4a30c189acefa50e6b1396c9179a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":60,"id":"8c9b3c54_436c645a","updated":"2025-12-11 19:14:36.000000000","message":"I\u0027m just a bystander, but how can one look at the actual results of the VASTData CI? The log just shows a gitlab pipeline being triggered and references an URL there that is not accessible?","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"4915efb9e8cd0c61df15242d0c984f2f606a0040","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":60,"id":"7ca7cf9c_95271c2e","updated":"2025-12-10 15:12:38.000000000","message":"Looks good to me.","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"b451cf3e78a73b7291b36554689acd775f4a8b99","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":60,"id":"a2c41138_8cffe94b","updated":"2025-12-10 12:46:56.000000000","message":"The driver is clean and well written, has all bits of code (release notes, matrix, etc) needed, supports all mandatory functions and is passing CI, so I think this driver is ready to be merged.","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"d1305f2197f97187ca879f9ace46f8f83b4e609f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":60,"id":"c34c24ad_04cc11ab","in_reply_to":"2c7f98b5_5f82e460","updated":"2025-12-12 21:58:13.000000000","message":"The artifacts have a `driver.log`, but I don\u0027t see the actual cinder service logs.","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"df5797ac4bb691f8b9a31cff1e66679624f3fa79","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":60,"id":"2c7f98b5_5f82e460","in_reply_to":"8c9b3c54_436c645a","updated":"2025-12-12 13:41:51.000000000","message":"@frickler: thanks for looking!  Maybe you hit the link when the server was down or something, but when I looked at the link in comment [0], I can see the tempest.conf, results.html, job-output.txt, etc.  Or are you looking for something else?\n\n[0] https://review.opendev.org/c/openstack/cinder/+/939005/60#message-610c58dd683bcbcf14b39dd7f35ec4a9588444c1","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7c9688370fc098fa300251c49c8cfb6dd2a15425","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":60,"id":"a5f0ffb1_50be4613","in_reply_to":"c34c24ad_04cc11ab","updated":"2026-01-08 12:07:04.000000000","message":"You can find cinder logs here: http://vast-zuul-ci-logs.s3-website-eu-west-1.amazonaws.com/t/opendev/build/1ef25dfc54fc4fe8a722e2c3388961bc/etc/cinder/index.html \n(the latest run)","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"0988b7a41d44ab361b97446b8d59eb43ad1457c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":62,"id":"66f02d89_7e89fbe9","updated":"2025-12-15 12:55:06.000000000","message":"recheck tempest-integrated-storage - unrelated issue, something bad happened to the instance in test_resize_volume_backed_server_confirm","commit_id":"4d218364981f6046f71e922c2b414941bbf5bfd2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6ad477576438eead71b9927bd41bd1d18beaac2e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":62,"id":"904d822d_99f52fad","updated":"2025-12-16 15:13:23.000000000","message":"run-VASTData CI","commit_id":"4d218364981f6046f71e922c2b414941bbf5bfd2"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"ae8b1e91578b7484ae17f633c7ce4615510b836f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"203b65fb_485ee0f8","updated":"2026-01-13 01:48:21.000000000","message":"I think this is ready to go now.","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6fe43ed2b99555b948bc6d59a5c75b2ebcae36e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"1ec6ad1c_69693543","updated":"2026-01-08 13:20:10.000000000","message":"I\u0027m going to +2 because the code and test LGTM, but not +W because I share Sean\u0027s concern about the lack of service logs.  I think we need to have a discussion with driver maintainers at the PTG to clarify what\u0027s expected and to revise the current cinder third party CI documentation to bring it up to date.  (This isn\u0027t a VAST specific issue, it applies to some other drivers as well.)","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c9f22ae3cfb34a526e31531a9e4effc6111e5cd7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"c288ce3d_96c8a662","updated":"2026-01-08 16:37:32.000000000","message":"Last CI results are closer, but the cinder service logs are just in the root of the artifacts directory and none of the other services are included.","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ece6d1065a95c1afc147e7ee39fa9cce265df619","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"c0c17daf_9979e5f1","updated":"2026-01-08 12:33:49.000000000","message":"Looks good and CI is passing. I do not, however, see the service logs in the latest CI artifacts: http://vast-zuul-ci-logs.s3-website-eu-west-1.amazonaws.com/t/opendev/build/1ef25dfc54fc4fe8a722e2c3388961bc/etc/cinder/index.html","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"98fa48ffb2ce735ef795ef2f7b8b0730e70709e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"5131691a_de77d4d1","updated":"2026-01-08 16:40:42.000000000","message":"Though I guess we do only state that the cinder service logs must be available","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"98fa48ffb2ce735ef795ef2f7b8b0730e70709e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"88548888_f4c4b7a0","updated":"2026-01-08 16:40:42.000000000","message":"Though I guess we do only state that the cinder service logs must be available: https://docs.openstack.org/cinder/latest/contributor/new_driver_checklist.html","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"af9cfaa108e69d9cc6fffbc6b7b749ab10ab5a78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"d2ff88bb_53d98238","updated":"2025-12-17 16:35:51.000000000","message":"restoring from earlier","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"5a051b1cace38086535b13707fe078270b7bb8e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"55cf3e24_65d6004f","updated":"2026-01-08 14:51:46.000000000","message":"run-VASTDATA CI","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"15fdefdee673d6fdf672ad382f47ebcc511969c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"5781cfa9_df959b48","updated":"2025-12-29 12:28:49.000000000","message":"run-VASTDATA CI","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"e2a8dc2efeed4258b01841c8027df908edb61417","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"5cc19bc6_0471bc9a","updated":"2026-01-08 08:46:21.000000000","message":"run-VASTDATA CI","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"897a7900420e30ec2585883065ede21f50c044cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"9c01bf61_8322c9d3","updated":"2025-12-17 08:04:11.000000000","message":"run-VASTDATA CI","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"46a4d58641a08b2f11b598cf94ceeaa90bc5ac74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"b48a2b4f_546afa9c","updated":"2026-01-07 20:27:29.000000000","message":"run-VASTDATA CI","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"ada6931b554235b962eb9e8f8d383fe4aefe58b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"ef1028c4_d44fea9c","updated":"2026-01-03 19:46:58.000000000","message":"run-VASTDATA CI","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"ae8b1e91578b7484ae17f633c7ce4615510b836f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":63,"id":"1eb39086_7aa12258","in_reply_to":"1ec6ad1c_69693543","updated":"2026-01-13 01:48:21.000000000","message":"When I say \"PTG\" above, what I mean is the Gazpacho midcycle meeting, or if necessary, a special driver maintainers video meeting.  (Or the PTG, though that\u0027s kind of a long way off.)","commit_id":"cf7f7d1480a507511805836d4bfc578eb9dd2fb6"}],"cinder/volume/drivers/vastdata/driver.py":[{"author":{"_account_id":36951},"change_message_id":"11c447dcc0f3b96e2ef0e2e9349344a39b0b45d7","unresolved":true,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        self.backend_name \u003d self.configuration.safe_get(\"volume_backend_name\")"},{"line_number":89,"context_line":"        self.subsystem \u003d self.configuration.vast_subsystem"},{"line_number":90,"context_line":"        vip_pool_name \u003d self.configuration.safe_get(\"vast_vippool_name\")"},{"line_number":91,"context_line":"        if not vip_pool_name:"},{"line_number":92,"context_line":"            raise exception.VolumeDriverException("},{"line_number":93,"context_line":"                message\u003d\"vast_vippool_name must be set\""}],"source_content_type":"text/x-python","patch_set":1,"id":"c439747d_21fd72ba","line":90,"updated":"2025-01-13 10:56:36.000000000","message":"why use `safe_get` for `vast_vippool_name`? you\u0027re not using it for `vast_vippool_name`","commit_id":"05815de8fdd3993bb06d658ea836c5e0f49fea22"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"f08ec18045448589791b44b687c5e9910b82be1c","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        self.backend_name \u003d self.configuration.safe_get(\"volume_backend_name\")"},{"line_number":89,"context_line":"        self.subsystem \u003d self.configuration.vast_subsystem"},{"line_number":90,"context_line":"        vip_pool_name \u003d self.configuration.safe_get(\"vast_vippool_name\")"},{"line_number":91,"context_line":"        if not vip_pool_name:"},{"line_number":92,"context_line":"            raise exception.VolumeDriverException("},{"line_number":93,"context_line":"                message\u003d\"vast_vippool_name must be set\""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ce11682_d5eff825","line":90,"in_reply_to":"c439747d_21fd72ba","updated":"2025-01-18 14:10:04.000000000","message":"It was suggested by Goutham in order to avoid unpredictable failures. Which are hidden if debug is not enabled","commit_id":"05815de8fdd3993bb06d658ea836c5e0f49fea22"},{"author":{"_account_id":36951},"change_message_id":"11c447dcc0f3b96e2ef0e2e9349344a39b0b45d7","unresolved":true,"context_lines":[{"line_number":176,"context_line":"        ]"},{"line_number":177,"context_line":"        data \u003d dict("},{"line_number":178,"context_line":"            volume_backend_name\u003dself.backend_name,"},{"line_number":179,"context_line":"            vendor_name\u003d\"VAST STORAGE\","},{"line_number":180,"context_line":"            driver_version\u003dself.VERSION,"},{"line_number":181,"context_line":"            storage_protocol\u003d\"nvmeof\","},{"line_number":182,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"b180ca98_e37ee469","line":179,"updated":"2025-01-13 10:56:36.000000000","message":"\"VAST STORAGE\"? we are \"VAST Data\"","commit_id":"05815de8fdd3993bb06d658ea836c5e0f49fea22"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"f08ec18045448589791b44b687c5e9910b82be1c","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        ]"},{"line_number":177,"context_line":"        data \u003d dict("},{"line_number":178,"context_line":"            volume_backend_name\u003dself.backend_name,"},{"line_number":179,"context_line":"            vendor_name\u003d\"VAST STORAGE\","},{"line_number":180,"context_line":"            driver_version\u003dself.VERSION,"},{"line_number":181,"context_line":"            storage_protocol\u003d\"nvmeof\","},{"line_number":182,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"610e1076_d9c11ed2","line":179,"in_reply_to":"b180ca98_e37ee469","updated":"2025-01-18 14:10:04.000000000","message":"Done","commit_id":"05815de8fdd3993bb06d658ea836c5e0f49fea22"},{"author":{"_account_id":36951},"change_message_id":"11c447dcc0f3b96e2ef0e2e9349344a39b0b45d7","unresolved":true,"context_lines":[{"line_number":192,"context_line":"            name\u003dvolume_name, fail_if_missing\u003dTrue"},{"line_number":193,"context_line":"        )"},{"line_number":194,"context_line":"        vol_id \u003d vast_volume.id"},{"line_number":195,"context_line":"        hostnqn \u003d connector.get(\"nqn\")"},{"line_number":196,"context_line":"        found_dsc \u003d connector.get(\u0027found_dsc\u0027)"},{"line_number":197,"context_line":"        vips \u003d self.rest.vip_pools.get_vips(self.vippool_name)"},{"line_number":198,"context_line":"        LOG.info(f\"Current host hostNQN is {hostnqn} and IP(s) are {vips}\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"0f2d9003_a1a980e4","line":195,"updated":"2025-01-13 10:56:36.000000000","message":"where does the `nqn` come from? who calls this method? what is the `connector` object?","commit_id":"05815de8fdd3993bb06d658ea836c5e0f49fea22"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"f08ec18045448589791b44b687c5e9910b82be1c","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            name\u003dvolume_name, fail_if_missing\u003dTrue"},{"line_number":193,"context_line":"        )"},{"line_number":194,"context_line":"        vol_id \u003d vast_volume.id"},{"line_number":195,"context_line":"        hostnqn \u003d connector.get(\"nqn\")"},{"line_number":196,"context_line":"        found_dsc \u003d connector.get(\u0027found_dsc\u0027)"},{"line_number":197,"context_line":"        vips \u003d self.rest.vip_pools.get_vips(self.vippool_name)"},{"line_number":198,"context_line":"        LOG.info(f\"Current host hostNQN is {hostnqn} and IP(s) are {vips}\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"e53538de_b45c2287","line":195,"in_reply_to":"0f2d9003_a1a980e4","updated":"2025-01-18 14:10:04.000000000","message":"Connector is object that contains info about host. (Not nova host but physical host where compute instances are running)\n\nThis host has nvme cli installed and we can interract with it. \n\nHere is connector example:\n {\u0027platform\u0027: \u0027x86_64\u0027, \u0027os_type\u0027: \u0027linux\u0027, \u0027ip\u0027: \u0027192.168.101.242\u0027, \u0027host\u0027: \u0027l112lg1-v1\u0027, \u0027multipath\u0027: False, \u0027enforce_multipath\u0027: True, \u0027initiator\u0027: \u0027iqn.2016-04.com.open-iscsi:a5fb7c9dd5de\u0027, \u0027do_local_attach\u0027: False, \u0027nvme_hostid\u0027: \u0027c0b113e9-4255-44dc-870d-44e5b042777d\u0027, \u0027uuid\u0027: \u00275355a184-d90a-4f6c-bcfb-a0257a23f2d2\u0027, \u0027system uuid\u0027: \u00277e2ad6ec-936e-4aba-bfe5-864a6c8fd56a\u0027, \u0027nqn\u0027: \u0027nqn.2014-08.org.nvmexpress:uuid:92772a1b-d036-4022-b441-1b0f972641c9\u0027, \u0027nvme_native_multipath\u0027: True, \u0027found_dsc\u0027: \u0027\u0027, \u0027host_ips\u0027: [\u002710.27.0.112\u0027, \u00272001:67c:9b4:1::22d2\u0027, \u0027fe80::5054:ff:febd:fdaa\u0027, \u0027172.21.222.91\u0027, \u00272001:67c:9b4:10::1e5d\u0027, \u0027fe80::5054:ff:fe86:b39c\u0027, \u0027172.17.0.1\u0027, \u0027192.168.122.1\u0027, \u0027192.168.101.242\u0027, \u00272001:db8::2\u0027, \u0027fe80::98d2:89ff:fe42:4f\u0027, \u002710.2.5.194\u0027, \u0027fe80::f816:3eff:fefa:b4c2\u0027, \u0027fe80::5054:ff:fed4:b0ba\u0027, \u0027fe80::f816:3eff:fe93:e2b5\u0027, \u0027fe80::2c91:3ff:fec4:7375\u0027, \u0027fe80::fc16:3eff:fea5:ad9e\u0027, \u0027fe80::f0ff:23ff:fef8:d53a\u0027], \u0027mountpoint\u0027: \u0027/dev/vdb\u0027}, \u0027kwargs\u0027: {}}\"","commit_id":"05815de8fdd3993bb06d658ea836c5e0f49fea22"},{"author":{"_account_id":36951},"change_message_id":"11c447dcc0f3b96e2ef0e2e9349344a39b0b45d7","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        )"},{"line_number":194,"context_line":"        vol_id \u003d vast_volume.id"},{"line_number":195,"context_line":"        hostnqn \u003d connector.get(\"nqn\")"},{"line_number":196,"context_line":"        found_dsc \u003d connector.get(\u0027found_dsc\u0027)"},{"line_number":197,"context_line":"        vips \u003d self.rest.vip_pools.get_vips(self.vippool_name)"},{"line_number":198,"context_line":"        LOG.info(f\"Current host hostNQN is {hostnqn} and IP(s) are {vips}\")"},{"line_number":199,"context_line":"        if not hostnqn:"}],"source_content_type":"text/x-python","patch_set":1,"id":"37a725d8_7fd10456","line":196,"updated":"2025-01-13 10:56:36.000000000","message":"what is `found_dsc`?","commit_id":"05815de8fdd3993bb06d658ea836c5e0f49fea22"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"f08ec18045448589791b44b687c5e9910b82be1c","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        )"},{"line_number":194,"context_line":"        vol_id \u003d vast_volume.id"},{"line_number":195,"context_line":"        hostnqn \u003d connector.get(\"nqn\")"},{"line_number":196,"context_line":"        found_dsc \u003d connector.get(\u0027found_dsc\u0027)"},{"line_number":197,"context_line":"        vips \u003d self.rest.vip_pools.get_vips(self.vippool_name)"},{"line_number":198,"context_line":"        LOG.info(f\"Current host hostNQN is {hostnqn} and IP(s) are {vips}\")"},{"line_number":199,"context_line":"        if not hostnqn:"}],"source_content_type":"text/x-python","patch_set":1,"id":"67739df7_f77f23cf","line":196,"in_reply_to":"37a725d8_7fd10456","updated":"2025-01-18 14:10:04.000000000","message":"Done","commit_id":"05815de8fdd3993bb06d658ea836c5e0f49fea22"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"b218a313dad7f0ee1b2df59e6b4c4539fe458a61","unresolved":true,"context_lines":[{"line_number":252,"context_line":"                volume_backend_name\u003dself.backend_name,"},{"line_number":253,"context_line":"                vendor_name\u003d\"VAST Data\","},{"line_number":254,"context_line":"                driver_version\u003dself.VERSION,"},{"line_number":255,"context_line":"                storage_protocol\u003dvast_utils.STORAGE_PROTOCOL,"},{"line_number":256,"context_line":"            )"},{"line_number":257,"context_line":"            metrics \u003d self.rest.capacity_metrics.get()"},{"line_number":258,"context_line":"            total_capacity_gb \u003d \"unknown\""}],"source_content_type":"text/x-python","patch_set":20,"id":"3a266220_c11d047f","line":255,"updated":"2025-03-14 14:26:56.000000000","message":"It would be better to use the known common cinder values here: https://github.com/openstack/cinder/blob/c4f61c11ef9b590606a2a276bdf256622516181f/cinder/common/constants.py#L51","commit_id":"4d0dc56a8564e055ca75a56d71cfd4d687fefd49"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"49356090835116b99976fa7b9736aa9183b18d47","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                volume_backend_name\u003dself.backend_name,"},{"line_number":253,"context_line":"                vendor_name\u003d\"VAST Data\","},{"line_number":254,"context_line":"                driver_version\u003dself.VERSION,"},{"line_number":255,"context_line":"                storage_protocol\u003dvast_utils.STORAGE_PROTOCOL,"},{"line_number":256,"context_line":"            )"},{"line_number":257,"context_line":"            metrics \u003d self.rest.capacity_metrics.get()"},{"line_number":258,"context_line":"            total_capacity_gb \u003d \"unknown\""}],"source_content_type":"text/x-python","patch_set":20,"id":"609aaeeb_110bd563","line":255,"in_reply_to":"3a266220_c11d047f","updated":"2025-03-16 13:09:40.000000000","message":"Done. Thx","commit_id":"4d0dc56a8564e055ca75a56d71cfd4d687fefd49"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"b218a313dad7f0ee1b2df59e6b4c4539fe458a61","unresolved":true,"context_lines":[{"line_number":290,"context_line":"        .. code-block:: default"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"           {"},{"line_number":293,"context_line":"               \u0027driver_volume_type\u0027: \u0027nvmeof\u0027,"},{"line_number":294,"context_line":"               \u0027data\u0027: {"},{"line_number":295,"context_line":"                   \u0027target_nqn\u0027: \u0027nqn.2025-01.example.storage:subsystem\u0027,"},{"line_number":296,"context_line":"                   \u0027initiator_nqn\u0027: \u0027nqn.2025-01.example.client:string\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"d5a25f16_c7a577da","line":293,"updated":"2025-03-14 14:26:56.000000000","message":"See comment for line 255","commit_id":"4d0dc56a8564e055ca75a56d71cfd4d687fefd49"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"49356090835116b99976fa7b9736aa9183b18d47","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        .. code-block:: default"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"           {"},{"line_number":293,"context_line":"               \u0027driver_volume_type\u0027: \u0027nvmeof\u0027,"},{"line_number":294,"context_line":"               \u0027data\u0027: {"},{"line_number":295,"context_line":"                   \u0027target_nqn\u0027: \u0027nqn.2025-01.example.storage:subsystem\u0027,"},{"line_number":296,"context_line":"                   \u0027initiator_nqn\u0027: \u0027nqn.2025-01.example.client:string\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"e27129be_3e2966fd","line":293,"in_reply_to":"d5a25f16_c7a577da","updated":"2025-03-16 13:09:40.000000000","message":"Done","commit_id":"4d0dc56a8564e055ca75a56d71cfd4d687fefd49"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bbb0fb419b91377d8f4678ed1c660f9bf6cd434b","unresolved":true,"context_lines":[{"line_number":61,"context_line":"        help\u003d\"The NVMe transport layer to be used by the NVMe driver.\""},{"line_number":62,"context_line":"    ),"},{"line_number":63,"context_line":"    cfg.StrOpt("},{"line_number":64,"context_line":"        \"vast_api_token\","},{"line_number":65,"context_line":"        default\u003d\"\","},{"line_number":66,"context_line":"        help\u003d("},{"line_number":67,"context_line":"            \"API token for accessing VAST mgmt. \""}],"source_content_type":"text/x-python","patch_set":31,"id":"85089b9f_5e376142","line":64,"updated":"2025-03-28 13:33:37.000000000","message":"This option looks like it should have secret\u003dTrue set?","commit_id":"9062663b80a255eefca821dcb89600dc4b53e232"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"be8a3ad0e71e0b0fa6d65c4fd03849a7d21068ab","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        help\u003d\"The NVMe transport layer to be used by the NVMe driver.\""},{"line_number":62,"context_line":"    ),"},{"line_number":63,"context_line":"    cfg.StrOpt("},{"line_number":64,"context_line":"        \"vast_api_token\","},{"line_number":65,"context_line":"        default\u003d\"\","},{"line_number":66,"context_line":"        help\u003d("},{"line_number":67,"context_line":"            \"API token for accessing VAST mgmt. \""}],"source_content_type":"text/x-python","patch_set":31,"id":"574658db_81023756","line":64,"in_reply_to":"85089b9f_5e376142","updated":"2025-04-01 10:34:38.000000000","message":"Done","commit_id":"9062663b80a255eefca821dcb89600dc4b53e232"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":true,"context_lines":[{"line_number":159,"context_line":"            raise exception.SnapshotNotFound(snapshot_id\u003dsnapshot.id)"},{"line_number":160,"context_line":"        return vast_snap"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def _is_multiattach(self, volume, host_name):"},{"line_number":163,"context_line":"        \"\"\"Returns True if the volume is attached to multiple instances\"\"\""},{"line_number":164,"context_line":"        if volume.multiattach:"},{"line_number":165,"context_line":"            attachment_list \u003d volume.volume_attachment"}],"source_content_type":"text/x-python","patch_set":38,"id":"31b03a0e_baf2dce2","line":162,"updated":"2025-08-18 19:49:47.000000000","message":"This needs a coordination lock in order to avoid a race condition, where simultaneous requests to terminate a connection on the same host leave the volume attached to the host. This is a common problem we\u0027ve seen in other drivers.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            raise exception.SnapshotNotFound(snapshot_id\u003dsnapshot.id)"},{"line_number":160,"context_line":"        return vast_snap"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def _is_multiattach(self, volume, host_name):"},{"line_number":163,"context_line":"        \"\"\"Returns True if the volume is attached to multiple instances\"\"\""},{"line_number":164,"context_line":"        if volume.multiattach:"},{"line_number":165,"context_line":"            attachment_list \u003d volume.volume_attachment"}],"source_content_type":"text/x-python","patch_set":38,"id":"4a56b6ab_a8400ec9","line":162,"in_reply_to":"31b03a0e_baf2dce2","updated":"2025-09-01 14:57:13.000000000","message":"added\n    @coordination.synchronized...\n\nfor initialize_connection and terminate_connection methods.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":true,"context_lines":[{"line_number":218,"context_line":"                )"},{"line_number":219,"context_line":"            if delete_gss:"},{"line_number":220,"context_line":"                self.rest.globalsnapstreams.ensure_snapshot_stream_deleted("},{"line_number":221,"context_line":"                    volume_id\u003dvolume.id"},{"line_number":222,"context_line":"                )"},{"line_number":223,"context_line":"            self.rest.volumes.delete_by_id(vast_volume.id)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9e3829a1_b755f072","line":221,"updated":"2025-08-18 19:49:47.000000000","message":"I\u0027m guessing the volume.id is the same as the vast_volume.id, but it looks unusual that you reference one of them here, and the othre on L223.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"6301eeeb37c1cdf4cee59372823740847cd3f333","unresolved":true,"context_lines":[{"line_number":218,"context_line":"                )"},{"line_number":219,"context_line":"            if delete_gss:"},{"line_number":220,"context_line":"                self.rest.globalsnapstreams.ensure_snapshot_stream_deleted("},{"line_number":221,"context_line":"                    volume_id\u003dvolume.id"},{"line_number":222,"context_line":"                )"},{"line_number":223,"context_line":"            self.rest.volumes.delete_by_id(vast_volume.id)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"bbede8c5_49fea62d","line":221,"in_reply_to":"0893df83_f3f8f6d8","updated":"2025-09-05 14:39:25.000000000","message":"Ack, that makes sense. If you post another update, consider adding a comment above L220 stating the snapshot stream is identified by cinder\u0027s volume ID, not the vast ID.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                )"},{"line_number":219,"context_line":"            if delete_gss:"},{"line_number":220,"context_line":"                self.rest.globalsnapstreams.ensure_snapshot_stream_deleted("},{"line_number":221,"context_line":"                    volume_id\u003dvolume.id"},{"line_number":222,"context_line":"                )"},{"line_number":223,"context_line":"            self.rest.volumes.delete_by_id(vast_volume.id)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"0893df83_f3f8f6d8","line":221,"in_reply_to":"9e3829a1_b755f072","updated":"2025-09-01 14:57:13.000000000","message":"It is not the same. \nvolume.id is id of cinder volume and it is related to openstack infra only.\nOn other hand each cinder volume has representation on vastdata cluster where volume.id is part of \"path refference\" of vastvdata volume. Vastdata volume has its own id.\n\nTo be more precise here I take vastdata volume by cinder volume id:\n\nvast_volume \u003d self._get_vast_volume(volume, False)\"\ninternally it is \"django style\" query params call -\u003e self.rest.volumes.one(name__endswith\u003dvolume.id)\n\n---\n\nhere I need to make sure internal vastdata clone stream is stopped. Under the hood it is search by path so here I use cinder volume.id\n\n  self.rest.globalsnapstreams.ensure_snapshot_stream_deleted(\n                    volume_id\u003dvolume.id\n                )\n\n----\n\nnext I delete vastvolume itself where I use vastvolume id.\n      self.rest.volumes.delete_by_id(vast_volume.id)","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"cdb8beefc0a475fd4d118ba99936d1e48d6234f9","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                )"},{"line_number":219,"context_line":"            if delete_gss:"},{"line_number":220,"context_line":"                self.rest.globalsnapstreams.ensure_snapshot_stream_deleted("},{"line_number":221,"context_line":"                    volume_id\u003dvolume.id"},{"line_number":222,"context_line":"                )"},{"line_number":223,"context_line":"            self.rest.volumes.delete_by_id(vast_volume.id)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"6b5ddeb7_867a83c5","line":221,"in_reply_to":"bbede8c5_49fea62d","updated":"2025-09-08 21:29:57.000000000","message":"Acknowledged","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":true,"context_lines":[{"line_number":225,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":226,"context_line":"        \"\"\"Ensures that a volume is exported."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        This method verifies that the specified volume exists."},{"line_number":229,"context_line":"        \"\"\""},{"line_number":230,"context_line":"        self._get_vast_volume(volume)"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"6a652c1b_977dd97a","line":228,"updated":"2025-08-18 19:49:47.000000000","message":"This comment confused me until I read the comment for the remove_export() function. I think what you\u0027re saying is that it\u0027s sufficient to verify the vast volume exists, and the actual export happens when a connection is created. This could be clarified.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":226,"context_line":"        \"\"\"Ensures that a volume is exported."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        This method verifies that the specified volume exists."},{"line_number":229,"context_line":"        \"\"\""},{"line_number":230,"context_line":"        self._get_vast_volume(volume)"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"780df898_e146595d","line":228,"in_reply_to":"6a652c1b_977dd97a","updated":"2025-09-01 14:57:13.000000000","message":"added comment:\n\n        For the VAST Data driver, this method only verifies that the\n        specified volume exists. The actual export configuration is\n        handled dynamically during connection initialization and does\n        not require persistent export setup.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":true,"context_lines":[{"line_number":275,"context_line":"                total_capacity_gb\u003dtotal_capacity_gb,"},{"line_number":276,"context_line":"                free_capacity_gb\u003dfree_capacity_gb,"},{"line_number":277,"context_line":"                reserved_percentage\u003d0,"},{"line_number":278,"context_line":"                QoS_support\u003dFalse,"},{"line_number":279,"context_line":"                multiattach\u003dTrue,"},{"line_number":280,"context_line":"                thin_provisioning_support\u003dFalse,"},{"line_number":281,"context_line":"                consistent_group_snapshot_enabled\u003dFalse,"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"            )"},{"line_number":284,"context_line":"            data[\"pools\"] \u003d [single_pool]"},{"line_number":285,"context_line":"            self.group_stats \u003d data"}],"source_content_type":"text/x-python","patch_set":38,"id":"dca5c9f1_304ecf11","line":282,"range":{"start_line":278,"start_character":0,"end_line":282,"end_character":1},"updated":"2025-08-18 19:49:47.000000000","message":"+1: this matches what I see in the driver support matrix.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[{"line_number":275,"context_line":"                total_capacity_gb\u003dtotal_capacity_gb,"},{"line_number":276,"context_line":"                free_capacity_gb\u003dfree_capacity_gb,"},{"line_number":277,"context_line":"                reserved_percentage\u003d0,"},{"line_number":278,"context_line":"                QoS_support\u003dFalse,"},{"line_number":279,"context_line":"                multiattach\u003dTrue,"},{"line_number":280,"context_line":"                thin_provisioning_support\u003dFalse,"},{"line_number":281,"context_line":"                consistent_group_snapshot_enabled\u003dFalse,"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"            )"},{"line_number":284,"context_line":"            data[\"pools\"] \u003d [single_pool]"},{"line_number":285,"context_line":"            self.group_stats \u003d data"}],"source_content_type":"text/x-python","patch_set":38,"id":"9fbf889b_78956242","line":282,"range":{"start_line":278,"start_character":0,"end_line":282,"end_character":1},"in_reply_to":"dca5c9f1_304ecf11","updated":"2025-09-01 14:57:13.000000000","message":"Done","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":true,"context_lines":[{"line_number":334,"context_line":"            nqn\u003dhost_nqn,"},{"line_number":335,"context_line":"            tenant_id\u003dtenant_id,"},{"line_number":336,"context_line":"        )"},{"line_number":337,"context_line":"        self.rest.blockhostmappings.ensure_map("},{"line_number":338,"context_line":"            volume_id\u003dvol_id,"},{"line_number":339,"context_line":"            host_id\u003dblockhost.id,"},{"line_number":340,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":38,"id":"ce56775a_017b9264","line":337,"updated":"2025-08-18 19:49:47.000000000","message":"Is this what essentially creates the export?","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[{"line_number":334,"context_line":"            nqn\u003dhost_nqn,"},{"line_number":335,"context_line":"            tenant_id\u003dtenant_id,"},{"line_number":336,"context_line":"        )"},{"line_number":337,"context_line":"        self.rest.blockhostmappings.ensure_map("},{"line_number":338,"context_line":"            volume_id\u003dvol_id,"},{"line_number":339,"context_line":"            host_id\u003dblockhost.id,"},{"line_number":340,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":38,"id":"eea38346_9b5c2037","line":337,"in_reply_to":"ce56775a_017b9264","updated":"2025-09-01 14:57:13.000000000","message":"Yes, but \"export\" is complex entity for vastdata.\n\nLet me provide more details:\n\n def create_volume(self, volume) - this method for vastdata driver creates \"volume\" on vastdata cluster. Vast volume is represntation of nvme block device which can be connected to remote host.\n\nbut at this moment it is not yet ready to be connected. I need to create another vast entiry which is \"blockhost\" \n\n\nAnd this block you\u0027re asking about:\n\n        blockhost \u003d self.rest.blockhosts.ensure(\n            name\u003dhost_name,\n            nqn\u003dhost_nqn,\n            tenant_id\u003dtenant_id,\n        )\n        self.rest.blockhostmappings.ensure_map(\n            volume_id\u003dvol_id,\n            host_id\u003dblockhost.id,\n        )\n\n\nis about creating blockhost - which is representation of physical host. I use host_nqn which is what I got from cinder connector. I can create host with custom nqn but here it is not necessary because cinder has this inforation included.\n\nNext is: elf.rest.blockhostmappings.ensure_map( .. where I associate vast volume with create blockhost.\n\nAt this point I have all info which I can pass to \"os-brick\" - ips for discovery, host_nqn etc.\n\nos-brick, under the hood uses \"nvme connect ....\" to connect vast block host with all block devices (vast volumes) mapped to it via this:\n\n self.rest.blockhostmappings.ensure_map(","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":true,"context_lines":[{"line_number":370,"context_line":"        vast_volume \u003d self._get_vast_volume(volume, False)"},{"line_number":371,"context_line":"        host \u003d connector.get(\"host\")"},{"line_number":372,"context_line":"        if vast_volume:"},{"line_number":373,"context_line":"            if self._is_multiattach(volume\u003dvolume, host_name\u003dhost):"},{"line_number":374,"context_line":"                return"},{"line_number":375,"context_line":"            self.rest.blockhostmappings.ensure_unmap("},{"line_number":376,"context_line":"                volume__id\u003dvast_volume.id,"}],"source_content_type":"text/x-python","patch_set":38,"id":"d3bff88f_d9d8c7fe","line":373,"updated":"2025-08-18 19:49:47.000000000","message":"This is where a race condition can leave the volume connection intact.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        vast_volume \u003d self._get_vast_volume(volume, False)"},{"line_number":371,"context_line":"        host \u003d connector.get(\"host\")"},{"line_number":372,"context_line":"        if vast_volume:"},{"line_number":373,"context_line":"            if self._is_multiattach(volume\u003dvolume, host_name\u003dhost):"},{"line_number":374,"context_line":"                return"},{"line_number":375,"context_line":"            self.rest.blockhostmappings.ensure_unmap("},{"line_number":376,"context_line":"                volume__id\u003dvast_volume.id,"}],"source_content_type":"text/x-python","patch_set":38,"id":"f38a1f3b_073d0766","line":373,"in_reply_to":"d3bff88f_d9d8c7fe","updated":"2025-09-01 14:57:13.000000000","message":"As I mentioned I wrapped initialize_connection and terminate_connection with:\n\n    @coordination.synchronized(\u0027vastdata-mapping-{connector[host]}\u0027)","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"6301eeeb37c1cdf4cee59372823740847cd3f333","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        vast_volume \u003d self._get_vast_volume(volume, False)"},{"line_number":371,"context_line":"        host \u003d connector.get(\"host\")"},{"line_number":372,"context_line":"        if vast_volume:"},{"line_number":373,"context_line":"            if self._is_multiattach(volume\u003dvolume, host_name\u003dhost):"},{"line_number":374,"context_line":"                return"},{"line_number":375,"context_line":"            self.rest.blockhostmappings.ensure_unmap("},{"line_number":376,"context_line":"                volume__id\u003dvast_volume.id,"}],"source_content_type":"text/x-python","patch_set":38,"id":"ce1769e6_70f84b17","line":373,"in_reply_to":"f38a1f3b_073d0766","updated":"2025-09-05 14:39:25.000000000","message":"Ack!","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bab87f3bd846b07ff302ddde054832228bda7c5c","unresolved":true,"context_lines":[{"line_number":124,"context_line":"            plugin_version\u003dself.VERSION,"},{"line_number":125,"context_line":"        )"},{"line_number":126,"context_line":"        self.rest.do_setup()"},{"line_number":127,"context_line":"        LOG.debug(\"VAST Data driver setup is complete.\")"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @classmethod"},{"line_number":130,"context_line":"    def get_driver_options(cls):"}],"source_content_type":"text/x-python","patch_set":44,"id":"8bdfdedb_965b5a2b","line":127,"updated":"2025-10-15 15:44:28.000000000","message":"I would either remove the LOG.debug or the @volume_utils.trace here as they both accomplish the same thing basically.","commit_id":"2088534d1ac342d42574ae3556ad517214efa710"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"86b3a80cf5f7ea1d9cf38b3e9b95dbaa3ae8f180","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            plugin_version\u003dself.VERSION,"},{"line_number":125,"context_line":"        )"},{"line_number":126,"context_line":"        self.rest.do_setup()"},{"line_number":127,"context_line":"        LOG.debug(\"VAST Data driver setup is complete.\")"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @classmethod"},{"line_number":130,"context_line":"    def get_driver_options(cls):"}],"source_content_type":"text/x-python","patch_set":44,"id":"6979a542_0d185e59","line":127,"in_reply_to":"8bdfdedb_965b5a2b","updated":"2025-10-22 22:17:59.000000000","message":"Done","commit_id":"2088534d1ac342d42574ae3556ad517214efa710"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bab87f3bd846b07ff302ddde054832228bda7c5c","unresolved":true,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def check_for_setup_error(self):"},{"line_number":137,"context_line":"        \"\"\"Verify that requirements are in place to use\"\"\""},{"line_number":138,"context_line":"        pass"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _get_vast_volume(self, volume, fail_if_missing\u003dTrue):"},{"line_number":141,"context_line":"        \"\"\"Get VAST volume by Cinder volume object."}],"source_content_type":"text/x-python","patch_set":44,"id":"e212c5c3_8cfa5519","line":138,"updated":"2025-10-15 15:44:28.000000000","message":"You do some checks in do_setup that could be accomplished here as well.","commit_id":"2088534d1ac342d42574ae3556ad517214efa710"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"86b3a80cf5f7ea1d9cf38b3e9b95dbaa3ae8f180","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def check_for_setup_error(self):"},{"line_number":137,"context_line":"        \"\"\"Verify that requirements are in place to use\"\"\""},{"line_number":138,"context_line":"        pass"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _get_vast_volume(self, volume, fail_if_missing\u003dTrue):"},{"line_number":141,"context_line":"        \"\"\"Get VAST volume by Cinder volume object."}],"source_content_type":"text/x-python","patch_set":44,"id":"5a6ca97f_f1c09167","line":138,"in_reply_to":"e212c5c3_8cfa5519","updated":"2025-10-22 22:17:59.000000000","message":"What is a difference?","commit_id":"2088534d1ac342d42574ae3556ad517214efa710"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bab87f3bd846b07ff302ddde054832228bda7c5c","unresolved":true,"context_lines":[{"line_number":257,"context_line":"        self.rest.volumes.update(vast_volume.id, size\u003dnew_size)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    @volume_utils.trace"},{"line_number":260,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":261,"context_line":"        \"\"\"Retrieve stats info\"\"\""},{"line_number":262,"context_line":"        if refresh:"},{"line_number":263,"context_line":"            data \u003d dict("}],"source_content_type":"text/x-python","patch_set":44,"id":"4b9eff69_bcd3cd0f","line":260,"updated":"2025-10-15 15:44:28.000000000","message":"You can replace this with _update_volume_stats.  the base class already checks refresh:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/driver.py#L688-L696","commit_id":"2088534d1ac342d42574ae3556ad517214efa710"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"86b3a80cf5f7ea1d9cf38b3e9b95dbaa3ae8f180","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        self.rest.volumes.update(vast_volume.id, size\u003dnew_size)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    @volume_utils.trace"},{"line_number":260,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":261,"context_line":"        \"\"\"Retrieve stats info\"\"\""},{"line_number":262,"context_line":"        if refresh:"},{"line_number":263,"context_line":"            data \u003d dict("}],"source_content_type":"text/x-python","patch_set":44,"id":"c6ba0239_331254e8","line":260,"in_reply_to":"4b9eff69_bcd3cd0f","updated":"2025-10-22 22:17:59.000000000","message":"Done","commit_id":"2088534d1ac342d42574ae3556ad517214efa710"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bab87f3bd846b07ff302ddde054832228bda7c5c","unresolved":true,"context_lines":[{"line_number":280,"context_line":"                pool_name\u003dself.backend_name,"},{"line_number":281,"context_line":"                total_capacity_gb\u003dtotal_capacity_gb,"},{"line_number":282,"context_line":"                free_capacity_gb\u003dfree_capacity_gb,"},{"line_number":283,"context_line":"                reserved_percentage\u003d0,"},{"line_number":284,"context_line":"                QoS_support\u003dFalse,"},{"line_number":285,"context_line":"                multiattach\u003dTrue,"},{"line_number":286,"context_line":"                thin_provisioning_support\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":44,"id":"4b38aee6_dccb0d0c","line":283,"updated":"2025-10-15 15:44:28.000000000","message":"why are we hard coding this to 0?\n\nSee the lvm driver as a reference here:\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L287","commit_id":"2088534d1ac342d42574ae3556ad517214efa710"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"86b3a80cf5f7ea1d9cf38b3e9b95dbaa3ae8f180","unresolved":false,"context_lines":[{"line_number":280,"context_line":"                pool_name\u003dself.backend_name,"},{"line_number":281,"context_line":"                total_capacity_gb\u003dtotal_capacity_gb,"},{"line_number":282,"context_line":"                free_capacity_gb\u003dfree_capacity_gb,"},{"line_number":283,"context_line":"                reserved_percentage\u003d0,"},{"line_number":284,"context_line":"                QoS_support\u003dFalse,"},{"line_number":285,"context_line":"                multiattach\u003dTrue,"},{"line_number":286,"context_line":"                thin_provisioning_support\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":44,"id":"4b1fba94_743be379","line":283,"in_reply_to":"4b38aee6_dccb0d0c","updated":"2025-10-22 22:17:59.000000000","message":"Done","commit_id":"2088534d1ac342d42574ae3556ad517214efa710"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bab87f3bd846b07ff302ddde054832228bda7c5c","unresolved":true,"context_lines":[{"line_number":292,"context_line":"        return self.group_stats"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    @volume_utils.trace"},{"line_number":295,"context_line":"    @coordination.synchronized(\u0027{self.driver_prefix}-{volume.id}\u0027)"},{"line_number":296,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":297,"context_line":"        \"\"\"Establishes a connection to the volume."},{"line_number":298,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"bae0fb4d_ea37a8f9","line":295,"updated":"2025-10-15 15:44:28.000000000","message":"why are we adding a lock here and on terminate?  Cinder already won\u0027t allow an unattach to happen if the volume is in attaching status.","commit_id":"2088534d1ac342d42574ae3556ad517214efa710"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"86b3a80cf5f7ea1d9cf38b3e9b95dbaa3ae8f180","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        return self.group_stats"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    @volume_utils.trace"},{"line_number":295,"context_line":"    @coordination.synchronized(\u0027{self.driver_prefix}-{volume.id}\u0027)"},{"line_number":296,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":297,"context_line":"        \"\"\"Establishes a connection to the volume."},{"line_number":298,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"6c50312c_c59048a2","line":295,"in_reply_to":"bae0fb4d_ea37a8f9","updated":"2025-10-22 22:17:59.000000000","message":"Many drivers implement this pattern:\n- cinder/volume/drivers/hpe/hpe_3par_fc.py\n- cinder/volume/drivers/huawei/huawei_driver.py\n- cinder/volume/drivers/ibm/flashsystem_fc.py\nand so on...\n\none common lock is used to cover initialize/terminate_connection.\nI think (at least for our scerio) it is related to multiattach situations when driver requires dissasociation/unmapping host (NVME host) and it take some time.\n\nWhile this operation in the process mapping host shouuld be not allowed  (initialize) and vice versa.\n\nSo, in theory it is possible that it is the last volume, mapped to host and we need to unmount it on instance termination but other process stars mapping it","commit_id":"2088534d1ac342d42574ae3556ad517214efa710"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"40aaa077ab78b9cc303e181d2fc8e029fd37fcfd","unresolved":true,"context_lines":[{"line_number":381,"context_line":"        host \u003d connector.get(\"host\")"},{"line_number":382,"context_line":"        if vast_volume:"},{"line_number":383,"context_line":"            if self._is_multiattach(volume\u003dvolume, host_name\u003dhost):"},{"line_number":384,"context_line":"                return"},{"line_number":385,"context_line":"            self.rest.blockhostmappings.ensure_unmap("},{"line_number":386,"context_line":"                volume__id\u003dvast_volume.id,"},{"line_number":387,"context_line":"                block_host__name\u003dhost,"}],"source_content_type":"text/x-python","patch_set":57,"id":"f0f44def_84fa3972","line":384,"updated":"2025-11-07 18:14:57.000000000","message":"Are we certain we want to do nothing if we\u0027re multiattach?\n\nI see Alan also went over this particular line in regards to potential deadlock so most likely this is correct, but I wanted to make certain.\n\nFrom the outside, it would appear that a multi-attach would never get detached, but maybe there\u0027s some cinder magic I\u0027m not aware of.","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"498f2cbaaf59b938a50b8f60891757c3050e9f87","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        host \u003d connector.get(\"host\")"},{"line_number":382,"context_line":"        if vast_volume:"},{"line_number":383,"context_line":"            if self._is_multiattach(volume\u003dvolume, host_name\u003dhost):"},{"line_number":384,"context_line":"                return"},{"line_number":385,"context_line":"            self.rest.blockhostmappings.ensure_unmap("},{"line_number":386,"context_line":"                volume__id\u003dvast_volume.id,"},{"line_number":387,"context_line":"                block_host__name\u003dhost,"}],"source_content_type":"text/x-python","patch_set":57,"id":"a1929f29_3e5da7f2","line":384,"in_reply_to":"d9e998d8_356e0065","updated":"2025-11-12 03:31:06.000000000","message":"Understood!  \n\nI had misunderstood the purpose of ```_is_multiattach``` and was thinking it was just checking the extra specs instead of checking the actual attachment list.  \n\nNormally I would have gone to look at it to check myself, and I\u0027m not sure why I didn\u0027t here.\n\nThank you for the clarification, and I apologize for the mixup.","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"0da6a3294df870041bcb5a3ce3ce2dae367cf804","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        host \u003d connector.get(\"host\")"},{"line_number":382,"context_line":"        if vast_volume:"},{"line_number":383,"context_line":"            if self._is_multiattach(volume\u003dvolume, host_name\u003dhost):"},{"line_number":384,"context_line":"                return"},{"line_number":385,"context_line":"            self.rest.blockhostmappings.ensure_unmap("},{"line_number":386,"context_line":"                volume__id\u003dvast_volume.id,"},{"line_number":387,"context_line":"                block_host__name\u003dhost,"}],"source_content_type":"text/x-python","patch_set":57,"id":"d9e998d8_356e0065","line":384,"in_reply_to":"f0f44def_84fa3972","updated":"2025-11-11 18:19:59.000000000","message":"There can be multiple VMs running on the same Cinder host. The connection/disconnection logic works as follows:\n\nThe driver first checks whether the block device already exists on the Cinder host. If it does not, the driver establishes a connection to the VAST backend and creates the device. After that, multiple VMs can reuse the same block device. In other words, the device is created only once per Cinder host, even if many instances are attaching it.\n\nThe same logic applies in reverse. When a VM is being terminated, the driver checks whether it is the last VM that is still using the block device. If it is indeed the last one, the driver disconnects from VAST and removes the block device from the host.\n\nThe condition self._is_multiattach(volume\u003dvolume, host_name\u003dhost) simply verifies whether the VM being terminated is the final consumer of the block device on that host.\n\nAdditionally, this endpoint uses the @coordination.synchronized(\u0027{self.driver_prefix}-{volume.id}\u0027) decorator to ensure that termination operations for the same volume are serialized. This prevents race conditions where multiple VM terminations occur simultaneously and could lead to incorrect multi-attach state handling. This synchronization pattern is a common practice across many drivers and is used here to ensure consistent behavior when multiple VMs detach from the same volume.","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"40aaa077ab78b9cc303e181d2fc8e029fd37fcfd","unresolved":true,"context_lines":[{"line_number":404,"context_line":"            tenant_name\u003dself.tenant_name,"},{"line_number":405,"context_line":"        )"},{"line_number":406,"context_line":"        vast_snapshot \u003d self._get_vast_snapshot(snapshot)"},{"line_number":407,"context_line":"        # Ensuring destination volume exists"},{"line_number":408,"context_line":"        dest_vast_volume \u003d self._get_vast_volume("},{"line_number":409,"context_line":"            volume,"},{"line_number":410,"context_line":"            fail_if_missing\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":57,"id":"5477503a_df05b2ef","line":407,"updated":"2025-11-07 18:14:57.000000000","message":"Out of curiosity, under what conditions will this volume already exist?  Similar question for the clone functionality as well.","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"0da6a3294df870041bcb5a3ce3ce2dae367cf804","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            tenant_name\u003dself.tenant_name,"},{"line_number":405,"context_line":"        )"},{"line_number":406,"context_line":"        vast_snapshot \u003d self._get_vast_snapshot(snapshot)"},{"line_number":407,"context_line":"        # Ensuring destination volume exists"},{"line_number":408,"context_line":"        dest_vast_volume \u003d self._get_vast_volume("},{"line_number":409,"context_line":"            volume,"},{"line_number":410,"context_line":"            fail_if_missing\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":57,"id":"805d2cdd_1aaafd54","line":407,"in_reply_to":"5477503a_df05b2ef","updated":"2025-11-11 18:19:59.000000000","message":"When user provided short timeout for cinder RPC calls. \nWhat you see here is just HTTP calls to vast backend to create \"snapshot\", \"volume\" etc. \n\neach of them takes probably couple of seconds. Maybe longer sometimes.\nSo if timeout happens - on cinder retry we need to start from the same place we finished before","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"84611f5efd97ddebe53ceb17790891e474fa6953","unresolved":true,"context_lines":[{"line_number":110,"context_line":"        self.subsystem \u003d self.configuration.safe_get(\"vast_subsystem\")"},{"line_number":111,"context_line":"        self.tenant_name \u003d self.configuration.safe_get(\"vast_tenant_name\")"},{"line_number":112,"context_line":"        if not self.subsystem:"},{"line_number":113,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":114,"context_line":"                err\u003d_(\"VAST subsystem name must be provided\")"},{"line_number":115,"context_line":"            )"},{"line_number":116,"context_line":"        self.vippool_name \u003d self.configuration.safe_get(\"vast_vippool_name\")"}],"source_content_type":"text/x-python","patch_set":60,"id":"4d1b3294_623032cf","line":113,"range":{"start_line":113,"start_character":28,"end_line":113,"end_character":49},"updated":"2025-12-12 04:25:50.000000000","message":"This (and line 118) should be raising InvalidConfigurationValue [0] (though I realize that some drivers have slipped through that raise the Invalid ParameterValue).\n\n[0] https://opendev.org/openstack/cinder/src/commit/f38c2950b13a2cde2ae9f146cf525a9d54c8b830/cinder/interface/volume_driver.py#L42-L43","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7c9688370fc098fa300251c49c8cfb6dd2a15425","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.subsystem \u003d self.configuration.safe_get(\"vast_subsystem\")"},{"line_number":111,"context_line":"        self.tenant_name \u003d self.configuration.safe_get(\"vast_tenant_name\")"},{"line_number":112,"context_line":"        if not self.subsystem:"},{"line_number":113,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":114,"context_line":"                err\u003d_(\"VAST subsystem name must be provided\")"},{"line_number":115,"context_line":"            )"},{"line_number":116,"context_line":"        self.vippool_name \u003d self.configuration.safe_get(\"vast_vippool_name\")"}],"source_content_type":"text/x-python","patch_set":60,"id":"3e4f6f15_cb76bb8b","line":113,"range":{"start_line":113,"start_character":28,"end_line":113,"end_character":49},"in_reply_to":"4d1b3294_623032cf","updated":"2026-01-08 12:07:04.000000000","message":"Done","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"}],"cinder/volume/drivers/vastdata/rest.py":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":true,"context_lines":[{"line_number":641,"context_line":"        # Retry logic for task completion"},{"line_number":642,"context_line":"        @cinder_utils.retry("},{"line_number":643,"context_line":"            retry_param\u003dVastApiRetry,"},{"line_number":644,"context_line":"            retries\u003d30,"},{"line_number":645,"context_line":"            interval\u003d0.5,"},{"line_number":646,"context_line":"            backoff_rate\u003d1,"},{"line_number":647,"context_line":"        )"},{"line_number":648,"context_line":"        def fetch_completed_task():"},{"line_number":649,"context_line":"            \"\"\"Attempts to monitor the task and check if it\u0027s complete.\"\"\""},{"line_number":650,"context_line":"            return is_task_complete(task_id)"}],"source_content_type":"text/x-python","patch_set":38,"id":"56563bcd_85984b1a","line":647,"range":{"start_line":644,"start_character":0,"end_line":647,"end_character":0},"updated":"2025-08-18 19:49:47.000000000","message":"Should these be configurable? They look like decent default values, but could they need to be tuned upward for large or heavily loaded deployments?","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        # Retry logic for task completion"},{"line_number":642,"context_line":"        @cinder_utils.retry("},{"line_number":643,"context_line":"            retry_param\u003dVastApiRetry,"},{"line_number":644,"context_line":"            retries\u003d30,"},{"line_number":645,"context_line":"            interval\u003d0.5,"},{"line_number":646,"context_line":"            backoff_rate\u003d1,"},{"line_number":647,"context_line":"        )"},{"line_number":648,"context_line":"        def fetch_completed_task():"},{"line_number":649,"context_line":"            \"\"\"Attempts to monitor the task and check if it\u0027s complete.\"\"\""},{"line_number":650,"context_line":"            return is_task_complete(task_id)"}],"source_content_type":"text/x-python","patch_set":38,"id":"f5e6f778_02a7929b","line":647,"range":{"start_line":644,"start_character":0,"end_line":647,"end_character":0},"in_reply_to":"56563bcd_85984b1a","updated":"2025-09-01 14:57:13.000000000","message":"It is already much longer period of time than actually needed.\n\nI use it only in one place to wait block device to be mapped to vast blockhost.\n\nInternally it returns async task which usually takes couple of seconds to complete.\n\nNo point to make it longer than cinder execution timeout. \nWe tested it on many volumes connected simultaniously and it handle them quite well.\n\nBut I will perform additional load testing to make sure.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"0b0368eac960b5c186bb3f5ed43c61185f1d7e87","unresolved":true,"context_lines":[{"line_number":761,"context_line":"            username\u003dusername,"},{"line_number":762,"context_line":"            password\u003dpassword,"},{"line_number":763,"context_line":"            api_token\u003dapi_token,"},{"line_number":764,"context_line":"            ssl_verify\u003dFalse,"},{"line_number":765,"context_line":"            plugin_version\u003dplugin_version,"},{"line_number":766,"context_line":"        )"},{"line_number":767,"context_line":"        self.versions \u003d Version(self)"}],"source_content_type":"text/x-python","patch_set":51,"id":"e2feb6cb_117cbfe8","line":764,"updated":"2025-10-24 13:00:23.000000000","message":"Does this driver not support SSL verification at all?\n\nThis should be tied to the driver_ssl_cert_verify/driver_ssl_cert_path options.","commit_id":"850ece9624339185ee1bd64060f55c53490df47f"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7eaf129e165059df8f05c93af66a5b5403ab133b","unresolved":false,"context_lines":[{"line_number":761,"context_line":"            username\u003dusername,"},{"line_number":762,"context_line":"            password\u003dpassword,"},{"line_number":763,"context_line":"            api_token\u003dapi_token,"},{"line_number":764,"context_line":"            ssl_verify\u003dFalse,"},{"line_number":765,"context_line":"            plugin_version\u003dplugin_version,"},{"line_number":766,"context_line":"        )"},{"line_number":767,"context_line":"        self.versions \u003d Version(self)"}],"source_content_type":"text/x-python","patch_set":51,"id":"dff2015d_97888664","line":764,"in_reply_to":"e2feb6cb_117cbfe8","updated":"2025-10-25 03:16:27.000000000","message":"Done","commit_id":"850ece9624339185ee1bd64060f55c53490df47f"}],"cinder/volume/drivers/vastdata/utils.py":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":true,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class Bunch(dict):"},{"line_number":70,"context_line":"    # from https://github.com/real-easypy/easypy"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    __slots__ \u003d (\"__stop_recursing__\",)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"f4d707ed_d166dddd","line":70,"updated":"2025-08-18 19:49:47.000000000","message":"I think this may pose a problem. The easypy license itself seems reasonable, but I don\u0027t know if that\u0027s adequate from a legal point of view for inclusion in OpenDev code.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class Bunch(dict):"},{"line_number":70,"context_line":"    # from https://github.com/real-easypy/easypy"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    __slots__ \u003d (\"__stop_recursing__\",)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"feeaf4a2_619289e0","line":70,"in_reply_to":"f4d707ed_d166dddd","updated":"2025-09-01 14:57:13.000000000","message":"I mentioned it above.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"40aaa077ab78b9cc303e181d2fc8e029fd37fcfd","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def make_snapshot_name(snapshot, configuration):"},{"line_number":34,"context_line":"    snap_prefix \u003d configuration.vast_snapshot_prefix"},{"line_number":35,"context_line":"    return f\"{snap_prefix}{snapshot.id}\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def make_tags(volume):"}],"source_content_type":"text/x-python","patch_set":57,"id":"2c51b8c3_15e29c7b","line":35,"updated":"2025-11-07 18:14:57.000000000","message":"Should this also have an lstrip?","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"0da6a3294df870041bcb5a3ce3ce2dae367cf804","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def make_snapshot_name(snapshot, configuration):"},{"line_number":34,"context_line":"    snap_prefix \u003d configuration.vast_snapshot_prefix"},{"line_number":35,"context_line":"    return f\"{snap_prefix}{snapshot.id}\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def make_tags(volume):"}],"source_content_type":"text/x-python","patch_set":57,"id":"fe863ede_5a026994","line":35,"in_reply_to":"2c51b8c3_15e29c7b","updated":"2025-11-11 18:19:59.000000000","message":"I didn\u0027t get. Why do I need it?","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"2798d160b3f62058c4364568dbd76eeb09c4824b","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def make_snapshot_name(snapshot, configuration):"},{"line_number":34,"context_line":"    snap_prefix \u003d configuration.vast_snapshot_prefix"},{"line_number":35,"context_line":"    return f\"{snap_prefix}{snapshot.id}\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def make_tags(volume):"}],"source_content_type":"text/x-python","patch_set":57,"id":"5adcc9f3_fa83bdcd","line":35,"in_reply_to":"8262b85c_429ceb0e","updated":"2025-11-20 12:41:58.000000000","message":"ah I see now.\nNo. this is our specific. Snapshots has and can be found by full path like /a/b/c\nwhereas volumes (NVME-TCP) has subystems IOW each volume has base subsystem and if subsystem has path /a then volume has path b/c and it cannnot be absolute. This is limitation of quering volumes. No leding slashes","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"498f2cbaaf59b938a50b8f60891757c3050e9f87","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"def make_snapshot_name(snapshot, configuration):"},{"line_number":34,"context_line":"    snap_prefix \u003d configuration.vast_snapshot_prefix"},{"line_number":35,"context_line":"    return f\"{snap_prefix}{snapshot.id}\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def make_tags(volume):"}],"source_content_type":"text/x-python","patch_set":57,"id":"8262b85c_429ceb0e","line":35,"in_reply_to":"fe863ede_5a026994","updated":"2025-11-12 03:31:06.000000000","message":"Sorry I wasn\u0027t clear!\n\nFor the volume version in ```make_volume_name``` you have this:\n\n```\n volume_prefix \u003d configuration.vast_volume_prefix\n return f\"{volume_prefix}{volume.id}\".lstrip(\"/\")\n```    \nI don\u0027t know exactly what the data will look like, so I figured if you were doing it for volumes it might be necessary in ```make_snapshot_name``` as well. \n\nI just wanted to verify is all.","commit_id":"4768e24d5f03fce61e0965d67159cb576faca5a0"}],"doc/source/configuration/tables/cinder-vastdata.inc":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":true,"context_lines":[{"line_number":17,"context_line":"   * - ``san_password`` \u003d ``None``"},{"line_number":18,"context_line":"     - (String) Management password of the VAST storage system."},{"line_number":19,"context_line":"   * - ``vast_api_token`` \u003d ``None``"},{"line_number":20,"context_line":"     - (String) API token for accessing VAST mgmt. f provided, it will be used instead of san_login and san_password."},{"line_number":21,"context_line":"   * - ``vast_vippool_name`` \u003d ``None``"},{"line_number":22,"context_line":"     - (String) Name of the Virtual IP Pool for NVMe target discovery."},{"line_number":23,"context_line":"   * - ``vast_subsystem`` \u003d ``None``"}],"source_content_type":"text/x-c++src","patch_set":38,"id":"b07b21d7_5d777222","line":20,"range":{"start_line":20,"start_character":51,"end_line":20,"end_character":52},"updated":"2025-08-18 19:49:47.000000000","message":"typo? \"If\"","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[{"line_number":17,"context_line":"   * - ``san_password`` \u003d ``None``"},{"line_number":18,"context_line":"     - (String) Management password of the VAST storage system."},{"line_number":19,"context_line":"   * - ``vast_api_token`` \u003d ``None``"},{"line_number":20,"context_line":"     - (String) API token for accessing VAST mgmt. f provided, it will be used instead of san_login and san_password."},{"line_number":21,"context_line":"   * - ``vast_vippool_name`` \u003d ``None``"},{"line_number":22,"context_line":"     - (String) Name of the Virtual IP Pool for NVMe target discovery."},{"line_number":23,"context_line":"   * - ``vast_subsystem`` \u003d ``None``"}],"source_content_type":"text/x-c++src","patch_set":38,"id":"61567873_aba7c395","line":20,"range":{"start_line":20,"start_character":51,"end_line":20,"end_character":52},"in_reply_to":"b07b21d7_5d777222","updated":"2025-09-01 14:57:13.000000000","message":"Done","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"}],"releasenotes/notes/bp-vastdata-nvmetcp-driver-cc86265ae4edf5f8.yaml":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"8f0e96932f935d0685221ec30372e16c23a97c13","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    VAST Data driver: new Cinder driver for VAST Data\u0027s NVMe/TCP platform."},{"line_number":5,"context_line":"    The VAST Data Platform is a high-performance, scalable, and redundant"},{"line_number":6,"context_line":"    storage solution designed for modern data center and cloud workloads."},{"line_number":7,"context_line":"    Its architecture unifies storage, database, and containerized compute,"},{"line_number":8,"context_line":"    enabling AI, deep learning, and other demanding applications"}],"source_content_type":"text/x-yaml","patch_set":38,"id":"7e25df91_92ae5847","line":5,"updated":"2025-08-18 19:49:47.000000000","message":"This description is a little heavy on the marketing message. I don\u0027t know how the core review teams feels, but IMHO I think the description in the driver documentation is more concise and adequate. It states:\n\n  The VAST Data Volume driver integrates OpenStack with VAST Data\u0027s Storage System.\n  Volumes in the Block Storage service are backed by VAST\u0027s NVMe storage and are\n  accessed using VAST\u0027s API.","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"},{"author":{"_account_id":36962,"name":"Volodymyr Boiko","display_name":"Volodymyr","email":"volodymyr.boiko@vastdata.com","username":"fnn45"},"change_message_id":"7d6e0ce7e1a8976f603689530f5722e1ac7cceac","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    VAST Data driver: new Cinder driver for VAST Data\u0027s NVMe/TCP platform."},{"line_number":5,"context_line":"    The VAST Data Platform is a high-performance, scalable, and redundant"},{"line_number":6,"context_line":"    storage solution designed for modern data center and cloud workloads."},{"line_number":7,"context_line":"    Its architecture unifies storage, database, and containerized compute,"},{"line_number":8,"context_line":"    enabling AI, deep learning, and other demanding applications"}],"source_content_type":"text/x-yaml","patch_set":38,"id":"2d02193e_02aa1622","line":5,"in_reply_to":"7e25df91_92ae5847","updated":"2025-09-01 14:57:13.000000000","message":"Updated","commit_id":"ff0c6db21c7c3d0f2115813ebc3edb433b1e9599"}],"requirements.txt":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"84611f5efd97ddebe53ceb17790891e474fa6953","unresolved":false,"context_lines":[{"line_number":61,"context_line":"distro\u003e\u003d1.8.0 # Apache-2.0"},{"line_number":62,"context_line":"tzdata\u003e\u003d2022.4 # MIT"},{"line_number":63,"context_line":"cachetools\u003e\u003d4.2.1 # MIT"},{"line_number":64,"context_line":"packaging\u003e\u003d20.9 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":60,"id":"62e84266_4f6074fa","line":64,"updated":"2025-12-12 04:25:50.000000000","message":"verified that these are approved requirements, they are in gazpacho upper-constraints.txt","commit_id":"df1721980e6aba7d39c14bd000922a4c0151408e"}]}
