)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"a33019a64378e9ff06e4fb33e5f5ba919fe93b6f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"2dfb5054_31d4a971","updated":"2025-09-08 11:24:04.000000000","message":"We should have e release note.  See https://files.openstack.org/docs/dragonflow/latest/releasenotes_create.html","commit_id":"10fd66196d8f9e33ca18fc805dd8a595b1efa99f"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"b951a91835c381db1705a36bc458d9b48f402299","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3b11d344_6e73f333","in_reply_to":"2dfb5054_31d4a971","updated":"2025-09-08 19:44:13.000000000","message":"Understood, thank you. I\u0027ve added","commit_id":"10fd66196d8f9e33ca18fc805dd8a595b1efa99f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4d190c9559cf13c8faeae496f0e4a554f76bf113","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"93091663_3d6fd8dc","updated":"2025-09-10 18:59:14.000000000","message":"Apart from the comments inline, I see that we are really not adding any new test but modifying existing tests to pass the gate which is not great.\nThese 3 new internal methods are introduced,\n* _can_config_vclone\n* _create_vclone_pair\n* _create_clone_pair\n\nThe `_create_clone_pair` is called by `create_pair_on_storage` for which i don\u0027t see any tests for in existing code base so I feel we don\u0027t really have any code coverage for the new (or even existing) added functionality which is the main reason for my downvote here.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"285b166c32dc54b7784a1d820bfb0be24ddc5118","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ad54d27b_26aa1e4f","updated":"2025-09-09 20:15:07.000000000","message":"Hi Anthony, a few comments inline","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cf489483afc367ee33560d0c54cbc23a71746add","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6a9232f3_b1e4ced1","in_reply_to":"324d3115_115e8fd7","updated":"2025-11-07 03:06:51.000000000","message":"Hi @rajatdhasmana@gmail.com, I have now added a multitude of unit tests :-)","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"2db8c7e8aa96550931b401f3c0923aa2cc52a2c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"324d3115_115e8fd7","in_reply_to":"93091663_3d6fd8dc","updated":"2025-11-05 06:05:16.000000000","message":"Hi Rajat, \n\nI *just now* saw this message as Gerrit automatically marks the overall comment as resolved by default (ARGH!!).\n\ncreate_pair_on_storage() is tested by test_create_cloned_volume() and others.\n\nI have created a test that covers the vClone situation as well (and will be creating some for the additional changes made as well), and will upload it with any other required changes from your review.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"410e5293dbb460859f91bea42f5bf482eeeb2752","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"51479d99_3ccdde02","in_reply_to":"ad54d27b_26aa1e4f","updated":"2025-09-10 21:51:59.000000000","message":"Great, thank you so much, Fernando! I believe we\u0027ve addressed all of them except the pvol and svol string issue. I think I need a little clarification","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"6e68461d9f16aec64e71e5a2a2c64d7711059d86","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c901ff99_b547d5fb","updated":"2025-09-12 01:13:07.000000000","message":"Reply to open questions in review.","commit_id":"03fec1161f0c09e85ab59b6c216108f279362d7e"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"dc964c06561d40200bd7308f484e1d793c09e1a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"39392153_efda6228","updated":"2025-09-11 13:27:39.000000000","message":"my comments are not addressed on the latest PS.","commit_id":"03fec1161f0c09e85ab59b6c216108f279362d7e"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"df001d5f6a399df3470ed757594004097b447885","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"92522d45_2fb88620","updated":"2025-09-11 18:27:58.000000000","message":"recheck cinder-plugin-ceph-tempest tested locally and it passed, re-running","commit_id":"03fec1161f0c09e85ab59b6c216108f279362d7e"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"8442f757fd8cae420b27393ac7ea4f2718f0786e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d6d53f16_82fbb952","updated":"2025-09-23 02:28:23.000000000","message":"Resolved: making string formatting consistent with existing formatting.","commit_id":"f013d439c8bec65e9c3dd03494ffa8d6c0c27263"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"a3c3ffa246f70d94f8fc9482caac3c75d47c1019","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"d450b5b9_8ca1f7aa","updated":"2025-10-08 15:00:37.000000000","message":"Updating comments to point to new patch that addresses Rajat\u0027s concerns.","commit_id":"7901b9258ec152843b80b68954f000737a7ba260"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"9e14548a84ccfdf6640bf1dff14e3db5a8f5b5cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"5d6fd06f_d464085d","updated":"2025-10-22 12:25:42.000000000","message":"Resolve Rajat\u0027s concern so he can review the changes we made.","commit_id":"99be81a47c95e8286382e6439fb5b7698e74ef80"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"84670aa0ee210845c4d9f8f957f00f2dc885eab4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"3e16630b_f0bce54e","updated":"2025-11-06 15:05:26.000000000","message":"One small request, CI looks good, test coverage looks good, still need to complete code review but in progress.","commit_id":"421b7c5c56c6123be44d017f0232feecd195987e"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"81a98df0140e41d289e7cca9c3a10f4625a34ca3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"3146a99a_ca7d95b9","updated":"2025-11-07 02:53:31.000000000","message":"Updating patch with:\n- Correct CI name\n- Proper copyright for updated Hitachi files\n- Updated release notes\n- A multitude of Unit Tests","commit_id":"e2c444646047431638445af40e8ec883ff05c8ef"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"e7502d6e_59a61d21","updated":"2025-11-07 19:09:33.000000000","message":"Hi Anthony, sorry for coming back to this so late but I\u0027ve added a few comments inline.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"d6eb17ee05c34c753259895e2e2f5a4e90501d7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"9b64b6ab_79c7a474","updated":"2025-11-07 17:41:26.000000000","message":"recheck timeouts","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"6853c1a1_9a050cef","updated":"2025-11-08 02:48:21.000000000","message":"Hi @rajatdhasmana@gmail.com,\n\nThank you for the thorough review!  I have left one comment open as I was hoping I might get some pointers from you.\n\nI have replied to and/or taken action on all of your other comments.","commit_id":"9cd0036e22ba3e7087e89bc77a4d71d52c84c766"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"a8a8836c376a761b115e8f66312287f07ae48898","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"42544015_f72469a3","updated":"2025-11-09 06:02:18.000000000","message":"Acknowledged Rajat\u0027s comments \u0026 put new patch on my radar.  Asked if it\u0027s ok to use this patch set as requested revert was already present.","commit_id":"bc5591a1f9ceba64eaf5e5200b0bed60f79914ab"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"1f4107b072165cbf097337b31c304173cfd19fc7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"2df9c5ae_36f84c8a","updated":"2025-11-11 14:59:07.000000000","message":"All review comments have been addressed, CI, tests, coverage, all look good.","commit_id":"bc5591a1f9ceba64eaf5e5200b0bed60f79914ab"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3aa9809e8ae6339e38839b0088ca09a43ddaf742","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"e540cf50_5ea7341f","updated":"2025-11-09 00:27:44.000000000","message":"Thanks Anthony for addressing my comments, please see my comment inline for the tests part, otherwise looks good.\n-1 for attention as it might not be highlighted otherwise.","commit_id":"bc5591a1f9ceba64eaf5e5200b0bed60f79914ab"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"cb5d184f9188dfb9993ab2c3ca98c6e5f09410c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":22,"id":"929ac55d_9346c131","updated":"2025-11-10 06:05:36.000000000","message":"Thanks Anthony for bearing with me through the reviews and also picking up the effort to further enhance the tests. Hitachi CI is passing, code and tests LGTM.","commit_id":"bc5591a1f9ceba64eaf5e5200b0bed60f79914ab"}],"cinder/tests/unit/volume/drivers/hitachi/test_hitachi_hbsd_rest_fc.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":true,"context_lines":[{"line_number":979,"context_line":"    def test_create_volume_drs("},{"line_number":980,"context_line":"            self, get_volume_type_qos_specs, get_volume_type_extra_specs,"},{"line_number":981,"context_line":"            request):"},{"line_number":982,"context_line":"        self.driver.common.conf.hitachi_manage_drs_volumes \u003d False"},{"line_number":983,"context_line":"        extra_specs \u003d {"},{"line_number":984,"context_line":"            \u0027hbsd:capacity_saving\u0027: \u0027deduplication_compression\u0027,"},{"line_number":985,"context_line":"            \u0027hbsd:drs\u0027: \u0027\u003cis\u003e True\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"694a91be_aa918c7f","line":982,"range":{"start_line":982,"start_character":8,"end_line":982,"end_character":66},"updated":"2025-11-07 19:09:33.000000000","message":"This type of assignment causes issues when unit tests are run in parallel with a higher concurrency\nThe right way to set config options is to use the override_config method\n\nhttps://opendev.org/openstack/cinder/src/branch/master/cinder/tests/unit/test.py#L351-L354","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"3691dad2ccfeb1f54c1ce23d243e73dfffaf1a12","unresolved":true,"context_lines":[{"line_number":979,"context_line":"    def test_create_volume_drs("},{"line_number":980,"context_line":"            self, get_volume_type_qos_specs, get_volume_type_extra_specs,"},{"line_number":981,"context_line":"            request):"},{"line_number":982,"context_line":"        self.driver.common.conf.hitachi_manage_drs_volumes \u003d False"},{"line_number":983,"context_line":"        extra_specs \u003d {"},{"line_number":984,"context_line":"            \u0027hbsd:capacity_saving\u0027: \u0027deduplication_compression\u0027,"},{"line_number":985,"context_line":"            \u0027hbsd:drs\u0027: \u0027\u003cis\u003e True\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"805cdd72_08c8a2b8","line":982,"range":{"start_line":982,"start_character":8,"end_line":982,"end_character":66},"in_reply_to":"043e609d_80ee63c0","updated":"2025-11-09 06:40:31.000000000","message":"Also, just checked out the new patch.   I understand the changes you made \u0026 know what I need to do to get it going.  As mentioned, I hope to tackle the whole thing this coming week.\n\nYou\u0027re the man!  Definitely not obvious as you state, haha.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"a8a8836c376a761b115e8f66312287f07ae48898","unresolved":true,"context_lines":[{"line_number":979,"context_line":"    def test_create_volume_drs("},{"line_number":980,"context_line":"            self, get_volume_type_qos_specs, get_volume_type_extra_specs,"},{"line_number":981,"context_line":"            request):"},{"line_number":982,"context_line":"        self.driver.common.conf.hitachi_manage_drs_volumes \u003d False"},{"line_number":983,"context_line":"        extra_specs \u003d {"},{"line_number":984,"context_line":"            \u0027hbsd:capacity_saving\u0027: \u0027deduplication_compression\u0027,"},{"line_number":985,"context_line":"            \u0027hbsd:drs\u0027: \u0027\u003cis\u003e True\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"043e609d_80ee63c0","line":982,"range":{"start_line":982,"start_character":8,"end_line":982,"end_character":66},"in_reply_to":"0adb37bd_f720f269","updated":"2025-11-09 06:02:18.000000000","message":"Excellent, thank you @rajatdhasmana@gmail.com.  This new patch you created is on my radar, and it will be submitted for Gazpacho once completed (I should have some cycles next week to work on it too).\n\nWhen I submitted the last patch set, I left the override_config commented out and kept self.driver.common.conf.hitachi_manage_drs_volumes \u003d True in the code to make sure that Zuul wouldn\u0027t freak out:\n\n```\n        self.driver.common.conf.hitachi_manage_drs_volumes \u003d True\n        # Inexplicably, the below does not work.\n        # self.override_config(\u0027hitachi_manage_drs_volumes\u0027, True,\n        #                     group\u003dconf.SHARED_CONF_GROUP)\n```\n\nSo the unit tests do pass and this is already in the code.\n\nWould you like me to remove the commented out override_config, or can we stick with this patch set?","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3aa9809e8ae6339e38839b0088ca09a43ddaf742","unresolved":true,"context_lines":[{"line_number":979,"context_line":"    def test_create_volume_drs("},{"line_number":980,"context_line":"            self, get_volume_type_qos_specs, get_volume_type_extra_specs,"},{"line_number":981,"context_line":"            request):"},{"line_number":982,"context_line":"        self.driver.common.conf.hitachi_manage_drs_volumes \u003d False"},{"line_number":983,"context_line":"        extra_specs \u003d {"},{"line_number":984,"context_line":"            \u0027hbsd:capacity_saving\u0027: \u0027deduplication_compression\u0027,"},{"line_number":985,"context_line":"            \u0027hbsd:drs\u0027: \u0027\u003cis\u003e True\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"0adb37bd_f720f269","line":982,"range":{"start_line":982,"start_character":8,"end_line":982,"end_character":66},"in_reply_to":"290ff139_bd48eac8","updated":"2025-11-09 00:27:44.000000000","message":"So i was able to fix it here[1] but believe me it wasn\u0027t obvious at all.\nThe reason i proposed a separate patch is that the changes required are beyond the scope of this patch and even though they don\u0027t break any existing tests, I feel we should do it for all config options and not just this specific one ``hitachi_manage_drs_volumes``.\nSo what i propose is:\n1. revert to using ``self.driver.common.conf.hitachi_manage_drs_volumes \u003d True`` in this patch since that is consistent with other tests\n2. At some point in future, pick up the patch in [1] and replace the existing way of setting config options with override_config (see change in ``_setup_config`` method)\n\nThis way we will be able to get this patch merged and also keep a refactoring effort ongoing to do it the recommended way.\n\n[1] https://review.opendev.org/c/openstack/cinder/+/966503","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":true,"context_lines":[{"line_number":979,"context_line":"    def test_create_volume_drs("},{"line_number":980,"context_line":"            self, get_volume_type_qos_specs, get_volume_type_extra_specs,"},{"line_number":981,"context_line":"            request):"},{"line_number":982,"context_line":"        self.driver.common.conf.hitachi_manage_drs_volumes \u003d False"},{"line_number":983,"context_line":"        extra_specs \u003d {"},{"line_number":984,"context_line":"            \u0027hbsd:capacity_saving\u0027: \u0027deduplication_compression\u0027,"},{"line_number":985,"context_line":"            \u0027hbsd:drs\u0027: \u0027\u003cis\u003e True\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"290ff139_bd48eac8","line":982,"range":{"start_line":982,"start_character":8,"end_line":982,"end_character":66},"in_reply_to":"694a91be_aa918c7f","updated":"2025-11-08 02:48:21.000000000","message":"Nice catch - thank you @rajatdhasmana@gmail.com\n\nCan you possibly give me some pointers here?\n\nLocally, I have replaced this with:\n        self.override_config(\u0027hitachi_manage_drs_volumes\u0027, True,\n                             group\u003dconf.SHARED_CONF_GROUP)\n\nIt\u0027s currently commented out in this patch set as it does not work.  I tried various things for an hour or so.\n                             \nI tried to look at other vendor drivers, register opts in the same file instead of the common area (despite it being imported), etc, all to no avail.\n\nI am new-ish to python, so sorry if this is an obvious thing I\u0027m missing.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"cb5d184f9188dfb9993ab2c3ca98c6e5f09410c4","unresolved":false,"context_lines":[{"line_number":979,"context_line":"    def test_create_volume_drs("},{"line_number":980,"context_line":"            self, get_volume_type_qos_specs, get_volume_type_extra_specs,"},{"line_number":981,"context_line":"            request):"},{"line_number":982,"context_line":"        self.driver.common.conf.hitachi_manage_drs_volumes \u003d False"},{"line_number":983,"context_line":"        extra_specs \u003d {"},{"line_number":984,"context_line":"            \u0027hbsd:capacity_saving\u0027: \u0027deduplication_compression\u0027,"},{"line_number":985,"context_line":"            \u0027hbsd:drs\u0027: \u0027\u003cis\u003e True\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"427de8a0_90b89b57","line":982,"range":{"start_line":982,"start_character":8,"end_line":982,"end_character":66},"in_reply_to":"805cdd72_08c8a2b8","updated":"2025-11-10 06:05:36.000000000","message":"Actually you are right, the current PS looks good as it is. and no point in modifying here if it\u0027s going to be reworked anyways.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":true,"context_lines":[{"line_number":982,"context_line":"        self.driver.common.conf.hitachi_manage_drs_volumes \u003d False"},{"line_number":983,"context_line":"        extra_specs \u003d {"},{"line_number":984,"context_line":"            \u0027hbsd:capacity_saving\u0027: \u0027deduplication_compression\u0027,"},{"line_number":985,"context_line":"            \u0027hbsd:drs\u0027: \u0027\u003cis\u003e True\u0027,"},{"line_number":986,"context_line":"        }"},{"line_number":987,"context_line":"        get_volume_type_extra_specs.return_value \u003d extra_specs"},{"line_number":988,"context_line":"        get_volume_type_qos_specs.return_value \u003d {\u0027qos_specs\u0027: None}"}],"source_content_type":"text/x-python","patch_set":20,"id":"6984d5a6_7a590bdd","line":985,"range":{"start_line":985,"start_character":12,"end_line":985,"end_character":35},"updated":"2025-11-07 19:09:33.000000000","message":"We should also test for ``\u003cis\u003e False`` and invalid values like ``False`` which could be done with ddt","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":false,"context_lines":[{"line_number":982,"context_line":"        self.driver.common.conf.hitachi_manage_drs_volumes \u003d False"},{"line_number":983,"context_line":"        extra_specs \u003d {"},{"line_number":984,"context_line":"            \u0027hbsd:capacity_saving\u0027: \u0027deduplication_compression\u0027,"},{"line_number":985,"context_line":"            \u0027hbsd:drs\u0027: \u0027\u003cis\u003e True\u0027,"},{"line_number":986,"context_line":"        }"},{"line_number":987,"context_line":"        get_volume_type_extra_specs.return_value \u003d extra_specs"},{"line_number":988,"context_line":"        get_volume_type_qos_specs.return_value \u003d {\u0027qos_specs\u0027: None}"}],"source_content_type":"text/x-python","patch_set":20,"id":"ada55a5d_9873d9bd","line":985,"range":{"start_line":985,"start_character":12,"end_line":985,"end_character":35},"in_reply_to":"6984d5a6_7a590bdd","updated":"2025-11-08 02:48:21.000000000","message":"I used DDT to create a new test that does a whole host of random checks like that.\n\nI found a very minor bug due to this as well (thanks) - would not have cause a problem as such, but a bug squashed is a bug squashed!","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":true,"context_lines":[{"line_number":1008,"context_line":"    def test_create_volume_drs_managed("},{"line_number":1009,"context_line":"            self, get_volume_type_qos_specs, get_volume_type_extra_specs,"},{"line_number":1010,"context_line":"            request):"},{"line_number":1011,"context_line":"        self.driver.common.conf.hitachi_manage_drs_volumes \u003d True"},{"line_number":1012,"context_line":"        extra_specs \u003d {"},{"line_number":1013,"context_line":"            \u0027hbsd:capacity_saving\u0027: \u0027deduplication_compression\u0027,"},{"line_number":1014,"context_line":"            \u0027hbsd:drs\u0027: \u0027\u003cis\u003e True\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"c50ad3a3_d1671be0","line":1011,"range":{"start_line":1011,"start_character":8,"end_line":1011,"end_character":65},"updated":"2025-11-07 19:09:33.000000000","message":"A nicer way club these two tests together would be using DDT","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"    def test_create_volume_drs_managed("},{"line_number":1009,"context_line":"            self, get_volume_type_qos_specs, get_volume_type_extra_specs,"},{"line_number":1010,"context_line":"            request):"},{"line_number":1011,"context_line":"        self.driver.common.conf.hitachi_manage_drs_volumes \u003d True"},{"line_number":1012,"context_line":"        extra_specs \u003d {"},{"line_number":1013,"context_line":"            \u0027hbsd:capacity_saving\u0027: \u0027deduplication_compression\u0027,"},{"line_number":1014,"context_line":"            \u0027hbsd:drs\u0027: \u0027\u003cis\u003e True\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"753fb72c_86b3086d","line":1011,"range":{"start_line":1011,"start_character":8,"end_line":1011,"end_character":65},"in_reply_to":"c50ad3a3_d1671be0","updated":"2025-11-08 02:48:21.000000000","message":"This is new to me, and I love this!\n\nHowever, these two tests, while similar looking, are (IMO) vastly different.\n\nI compromised and created a DDT test for the invalid use cases of the DRS.  Check it out :-)","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":true,"context_lines":[{"line_number":1050,"context_line":"        self.assertEqual(body.get(\u0027label\u0027), \u002700000000000000000000000000000003\u0027)"},{"line_number":1051,"context_line":"        self.assertEqual(\u00271\u0027, ret[\u0027provider_location\u0027])"},{"line_number":1052,"context_line":"        self.assertEqual(2, get_volume_type_extra_specs.call_count)"},{"line_number":1053,"context_line":"        self.assertEqual(1, get_volume_type_qos_specs.call_count)"},{"line_number":1054,"context_line":"        self.assertEqual(11, request.call_count)"},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"    @reduce_retrying_time"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a2416a6_5723a7f4","line":1053,"range":{"start_line":1053,"start_character":8,"end_line":1053,"end_character":65},"updated":"2025-11-07 19:09:33.000000000","message":"A better assert is assert_called_once_with(\u003cparams\u003e)\n\nThis verifies that the method is called and also verifies that it is called with the right parameters","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":false,"context_lines":[{"line_number":1050,"context_line":"        self.assertEqual(body.get(\u0027label\u0027), \u002700000000000000000000000000000003\u0027)"},{"line_number":1051,"context_line":"        self.assertEqual(\u00271\u0027, ret[\u0027provider_location\u0027])"},{"line_number":1052,"context_line":"        self.assertEqual(2, get_volume_type_extra_specs.call_count)"},{"line_number":1053,"context_line":"        self.assertEqual(1, get_volume_type_qos_specs.call_count)"},{"line_number":1054,"context_line":"        self.assertEqual(11, request.call_count)"},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"    @reduce_retrying_time"}],"source_content_type":"text/x-python","patch_set":20,"id":"1b66265c_f60a197c","line":1053,"range":{"start_line":1053,"start_character":8,"end_line":1053,"end_character":65},"in_reply_to":"3a2416a6_5723a7f4","updated":"2025-11-08 02:48:21.000000000","message":"Done.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":true,"context_lines":[{"line_number":1302,"context_line":"        self.driver.extend_volume(TEST_VOLUME[0], 256)"},{"line_number":1303,"context_line":"        self.assertEqual(5, request.call_count)"},{"line_number":1304,"context_line":"        body \u003d request.call_args_list[4][1][\u0027json\u0027]"},{"line_number":1305,"context_line":"        self.assertIn(\u0027enhancedExpansion\u0027, body[\u0027parameters\u0027])"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"    @mock.patch.object(requests.Session, \"request\")"},{"line_number":1308,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type_extra_specs\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"f8bfcdf7_44c1c745","line":1305,"range":{"start_line":1305,"start_character":23,"end_line":1305,"end_character":40},"updated":"2025-11-07 19:09:33.000000000","message":"we should also check that the parameter value is True","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":false,"context_lines":[{"line_number":1302,"context_line":"        self.driver.extend_volume(TEST_VOLUME[0], 256)"},{"line_number":1303,"context_line":"        self.assertEqual(5, request.call_count)"},{"line_number":1304,"context_line":"        body \u003d request.call_args_list[4][1][\u0027json\u0027]"},{"line_number":1305,"context_line":"        self.assertIn(\u0027enhancedExpansion\u0027, body[\u0027parameters\u0027])"},{"line_number":1306,"context_line":""},{"line_number":1307,"context_line":"    @mock.patch.object(requests.Session, \"request\")"},{"line_number":1308,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type_extra_specs\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"aefab583_82d1423e","line":1305,"range":{"start_line":1305,"start_character":23,"end_line":1305,"end_character":40},"in_reply_to":"f8bfcdf7_44c1c745","updated":"2025-11-08 02:48:21.000000000","message":"Done","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"}],"cinder/volume/drivers/hitachi/hbsd_common.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":true,"context_lines":[{"line_number":309,"context_line":"                               \u0027:drs\u0027)"},{"line_number":310,"context_line":"            drs \u003d extra_specs.get(extra_specs_drs)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"            is_managed_drs \u003d DRS_MODE.get(drs)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        return is_managed_drs"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"305540fb_6df2472e","line":312,"range":{"start_line":312,"start_character":29,"end_line":312,"end_character":46},"updated":"2025-11-07 19:09:33.000000000","message":"If an operator configures an incorrect value like \u0027False\u0027 or \u0027\u003cis False\u003e\u0027 then we get None here. Since i believe we want the ``is_managed_drs`` value to be only True or False, we should return a default ``False`` here\nThis way i don\u0027t think we even need to handle the None case in L#59\n\n    DRS_MODE.get(drs, False)","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":false,"context_lines":[{"line_number":309,"context_line":"                               \u0027:drs\u0027)"},{"line_number":310,"context_line":"            drs \u003d extra_specs.get(extra_specs_drs)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"            is_managed_drs \u003d DRS_MODE.get(drs)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        return is_managed_drs"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7eec036d_42190ac5","line":312,"range":{"start_line":312,"start_character":29,"end_line":312,"end_character":46},"in_reply_to":"305540fb_6df2472e","updated":"2025-11-08 02:48:21.000000000","message":"Fixed with default, including in a couple additional places (4 total).\n\nThis was a consequence of me being new to python.  I had thought \"None\" was a catch-all, but now typing that out it sounds dumb of me.\n\nThanks for catching this.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                                      pool_id, ldev_range)"},{"line_number":354,"context_line":"        except Exception:"},{"line_number":355,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":356,"context_line":"                self.output_log(MSG.CREATE_LDEV_FAILED)"},{"line_number":357,"context_line":"        self.modify_ldev_name(parent, STR_MANAGED_VCP_LDEV_NAME)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        # Create a clone using our parent volume and the"}],"source_content_type":"text/x-python","patch_set":20,"id":"93bee5c4_e61c1662","line":356,"range":{"start_line":356,"start_character":21,"end_line":356,"end_character":31},"updated":"2025-11-07 19:09:33.000000000","message":"this is really interesting to see that all of the errors are mapped with their log level and message\nhttps://opendev.org/openstack/cinder/src/branch/master/cinder/volume/drivers/hitachi/hbsd_utils.py#L347-L352","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3aa9809e8ae6339e38839b0088ca09a43ddaf742","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                                      pool_id, ldev_range)"},{"line_number":354,"context_line":"        except Exception:"},{"line_number":355,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":356,"context_line":"                self.output_log(MSG.CREATE_LDEV_FAILED)"},{"line_number":357,"context_line":"        self.modify_ldev_name(parent, STR_MANAGED_VCP_LDEV_NAME)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        # Create a clone using our parent volume and the"}],"source_content_type":"text/x-python","patch_set":20,"id":"6421b0cb_3646f476","line":356,"range":{"start_line":356,"start_character":21,"end_line":356,"end_character":31},"in_reply_to":"34cbed67_8f964f74","updated":"2025-11-09 00:27:44.000000000","message":"Ack","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                                      pool_id, ldev_range)"},{"line_number":354,"context_line":"        except Exception:"},{"line_number":355,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":356,"context_line":"                self.output_log(MSG.CREATE_LDEV_FAILED)"},{"line_number":357,"context_line":"        self.modify_ldev_name(parent, STR_MANAGED_VCP_LDEV_NAME)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        # Create a clone using our parent volume and the"}],"source_content_type":"text/x-python","patch_set":20,"id":"34cbed67_8f964f74","line":356,"range":{"start_line":356,"start_character":21,"end_line":356,"end_character":31},"in_reply_to":"93bee5c4_e61c1662","updated":"2025-11-08 02:48:21.000000000","message":"\u003e this is really interesting to see that all of the errors are mapped with their log level and message\n\u003e https://opendev.org/openstack/cinder/src/branch/master/cinder/volume/drivers/hitachi/hbsd_utils.py#L347-L352\n\nYeah, it\u0027s been a requirement from Japan in general to make debugging easier for non-English speakers.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":true,"context_lines":[{"line_number":366,"context_line":"        except Exception:"},{"line_number":367,"context_line":"            self.delete_ldev(parent)"},{"line_number":368,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":369,"context_line":"                self.output_log(MSG.CREATE_LDEV_FAILED)"},{"line_number":370,"context_line":"        self.modify_ldev_name(ldev, volume[\u0027id\u0027].replace(\"-\", \"\"))"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":20,"id":"7e918bc0_78bb4dbf","line":369,"range":{"start_line":369,"start_character":36,"end_line":369,"end_character":54},"updated":"2025-11-07 19:09:33.000000000","message":"isn\u0027t this a more appropriate error message here? or it could be misleading since this is a create operation?\n\nhttps://opendev.org/openstack/cinder/src/branch/master/cinder/volume/drivers/hitachi/hbsd_utils.py#L464-L469","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        except Exception:"},{"line_number":367,"context_line":"            self.delete_ldev(parent)"},{"line_number":368,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":369,"context_line":"                self.output_log(MSG.CREATE_LDEV_FAILED)"},{"line_number":370,"context_line":"        self.modify_ldev_name(ldev, volume[\u0027id\u0027].replace(\"-\", \"\"))"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":20,"id":"4a08abb1_00c3eb9d","line":369,"range":{"start_line":369,"start_character":36,"end_line":369,"end_character":54},"in_reply_to":"7e918bc0_78bb4dbf","updated":"2025-11-08 02:48:21.000000000","message":"Good catch, but I do think it would be misleading, particularly since the idea behind the managed volume is to make it appear seamless to the user (i.e. the user should not know that there\u0027s a managed parent other than knowing they configured it to use them).\n\nThe copy operation does also involve creating a second LDEV as well.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"}],"cinder/volume/drivers/hitachi/hbsd_rest.py":[{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"285b166c32dc54b7784a1d820bfb0be24ddc5118","unresolved":true,"context_lines":[{"line_number":364,"context_line":"            \u0027isParallelExecutionEnabled\u0027: True,"},{"line_number":365,"context_line":"        }"},{"line_number":366,"context_line":"        capacity_saving \u003d None"},{"line_number":367,"context_line":"        drs \u003d False"},{"line_number":368,"context_line":"        if self.driver_info.get(\u0027driver_dir_name\u0027):"},{"line_number":369,"context_line":"            capacity_saving \u003d extra_specs.get("},{"line_number":370,"context_line":"                self.driver_info[\u0027driver_dir_name\u0027] + \u0027:capacity_saving\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"019ed422_290518b8","line":367,"updated":"2025-09-09 20:15:07.000000000","message":"Considering this var will hold a string, I would probably set ``drs`` to ``None`` instead of ``False``  for clarity. Also, the ``_DRS_MODE`` [1] expects ``None`` as key instead of ``False``, so I don\u0027t think passing False would work.\n\n[1] https://review.opendev.org/c/openstack/cinder/+/959901/5/cinder/volume/drivers/hitachi/hbsd_rest.py#350","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"410e5293dbb460859f91bea42f5bf482eeeb2752","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            \u0027isParallelExecutionEnabled\u0027: True,"},{"line_number":365,"context_line":"        }"},{"line_number":366,"context_line":"        capacity_saving \u003d None"},{"line_number":367,"context_line":"        drs \u003d False"},{"line_number":368,"context_line":"        if self.driver_info.get(\u0027driver_dir_name\u0027):"},{"line_number":369,"context_line":"            capacity_saving \u003d extra_specs.get("},{"line_number":370,"context_line":"                self.driver_info[\u0027driver_dir_name\u0027] + \u0027:capacity_saving\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"b9086010_4c2856af","line":367,"in_reply_to":"019ed422_290518b8","updated":"2025-09-10 21:51:59.000000000","message":"Corrected to \"None\" in patchset 6","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"285b166c32dc54b7784a1d820bfb0be24ddc5118","unresolved":true,"context_lines":[{"line_number":368,"context_line":"        if self.driver_info.get(\u0027driver_dir_name\u0027):"},{"line_number":369,"context_line":"            capacity_saving \u003d extra_specs.get("},{"line_number":370,"context_line":"                self.driver_info[\u0027driver_dir_name\u0027] + \u0027:capacity_saving\u0027)"},{"line_number":371,"context_line":"        if self.driver_info.get(\u0027driver_dir_name\u0027):"},{"line_number":372,"context_line":"            drs \u003d extra_specs.get("},{"line_number":373,"context_line":"                self.driver_info[\u0027driver_dir_name\u0027] + \u0027:drs\u0027)"},{"line_number":374,"context_line":"        if capacity_saving:"}],"source_content_type":"text/x-python","patch_set":5,"id":"2ed4310b_b7fd048e","line":371,"updated":"2025-09-09 20:15:07.000000000","message":"aren\u0027t this getting the same data as in ln. 367? I guess this could be done instead:\n\n```\nif self.driver_info.get(\u0027driver_dir_name\u0027):\n            capacity_saving \u003d extra_specs.get(\n                self.driver_info[\u0027driver_dir_name\u0027] + \u0027:capacity_saving\u0027)\n            drs \u003d extra_specs.get(\n                self.driver_info[\u0027driver_dir_name\u0027] + \u0027:drs\u0027)\n```","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"410e5293dbb460859f91bea42f5bf482eeeb2752","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        if self.driver_info.get(\u0027driver_dir_name\u0027):"},{"line_number":369,"context_line":"            capacity_saving \u003d extra_specs.get("},{"line_number":370,"context_line":"                self.driver_info[\u0027driver_dir_name\u0027] + \u0027:capacity_saving\u0027)"},{"line_number":371,"context_line":"        if self.driver_info.get(\u0027driver_dir_name\u0027):"},{"line_number":372,"context_line":"            drs \u003d extra_specs.get("},{"line_number":373,"context_line":"                self.driver_info[\u0027driver_dir_name\u0027] + \u0027:drs\u0027)"},{"line_number":374,"context_line":"        if capacity_saving:"}],"source_content_type":"text/x-python","patch_set":5,"id":"a0a8b1a0_ba69792c","line":371,"in_reply_to":"2ed4310b_b7fd048e","updated":"2025-09-10 21:51:59.000000000","message":"Removed redundant \"if\" condition in patchset 6","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"285b166c32dc54b7784a1d820bfb0be24ddc5118","unresolved":true,"context_lines":[{"line_number":558,"context_line":"           not sinfo[\u0027attributes\u0027] or \\"},{"line_number":559,"context_line":"           utils.DRS_VOL_ATTR not in sinfo[\u0027attributes\u0027]:"},{"line_number":560,"context_line":"            return False"},{"line_number":561,"context_line":"        if pinfo[\u0027poolId\u0027] !\u003d snap_pool_id or \\"},{"line_number":562,"context_line":"                sinfo[\u0027poolId\u0027] !\u003d snap_pool_id:"},{"line_number":563,"context_line":"            return False"},{"line_number":564,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"c0cbda01_313be367","line":561,"updated":"2025-09-09 20:15:07.000000000","message":"It is preferred to wrap long lines in parentheses and not a backslash for line continuation. That is because any trailing space added after the backslash may result in a syntax error.\n\nSee OpenStack code style for reference\nhttps://docs.openstack.org/hacking/latest/user/hacking.html","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"410e5293dbb460859f91bea42f5bf482eeeb2752","unresolved":false,"context_lines":[{"line_number":558,"context_line":"           not sinfo[\u0027attributes\u0027] or \\"},{"line_number":559,"context_line":"           utils.DRS_VOL_ATTR not in sinfo[\u0027attributes\u0027]:"},{"line_number":560,"context_line":"            return False"},{"line_number":561,"context_line":"        if pinfo[\u0027poolId\u0027] !\u003d snap_pool_id or \\"},{"line_number":562,"context_line":"                sinfo[\u0027poolId\u0027] !\u003d snap_pool_id:"},{"line_number":563,"context_line":"            return False"},{"line_number":564,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"5c96d4d4_abd9a87d","line":561,"in_reply_to":"c0cbda01_313be367","updated":"2025-09-10 21:51:59.000000000","message":"Updated all the multilines to use parentheses instead of backslash in patchset 6","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"285b166c32dc54b7784a1d820bfb0be24ddc5118","unresolved":true,"context_lines":[{"line_number":968,"context_line":"        \"\"\"Determine if the given LDEV is a DRS volume.\"\"\""},{"line_number":969,"context_line":"        ldev_info \u003d self.get_ldev_info([\u0027attributes\u0027], ldev)"},{"line_number":970,"context_line":""},{"line_number":971,"context_line":"        if ldev_info[\u0027attributes\u0027] and \\"},{"line_number":972,"context_line":"           utils.DRS_VOL_ATTR in ldev_info[\u0027attributes\u0027]:"},{"line_number":973,"context_line":"            return True"},{"line_number":974,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"f41ec35f_b5b409b8","line":971,"updated":"2025-09-09 20:15:07.000000000","message":"It is preferred to wrap long lines in parentheses and not a backslash for line continuation. That is because any trailing space added after the backslash may result in a syntax error.\n\nSee OpenStack code style for reference\nhttps://docs.openstack.org/hacking/latest/user/hacking.html","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"410e5293dbb460859f91bea42f5bf482eeeb2752","unresolved":false,"context_lines":[{"line_number":968,"context_line":"        \"\"\"Determine if the given LDEV is a DRS volume.\"\"\""},{"line_number":969,"context_line":"        ldev_info \u003d self.get_ldev_info([\u0027attributes\u0027], ldev)"},{"line_number":970,"context_line":""},{"line_number":971,"context_line":"        if ldev_info[\u0027attributes\u0027] and \\"},{"line_number":972,"context_line":"           utils.DRS_VOL_ATTR in ldev_info[\u0027attributes\u0027]:"},{"line_number":973,"context_line":"            return True"},{"line_number":974,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"08c2f2be_bcec65cb","line":971,"in_reply_to":"f41ec35f_b5b409b8","updated":"2025-09-10 21:51:59.000000000","message":"Updated all the multilines to use parentheses instead of backslash in patchset 6","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"285b166c32dc54b7784a1d820bfb0be24ddc5118","unresolved":true,"context_lines":[{"line_number":1726,"context_line":"             \u0027poolId\u0027, \u0027attributes\u0027], ldev)"},{"line_number":1727,"context_line":""},{"line_number":1728,"context_line":"        # The DRS mode is not allowed to change."},{"line_number":1729,"context_line":"        is_current_drs \u003d ldev_info[\u0027attributes\u0027] and \\"},{"line_number":1730,"context_line":"            utils.DRS_VOL_ATTR in ldev_info[\u0027attributes\u0027]"},{"line_number":1731,"context_line":"        if _DRS_MODE.get(new_drs) is not is_current_drs:"},{"line_number":1732,"context_line":"            msg \u003d self.output_log("}],"source_content_type":"text/x-python","patch_set":5,"id":"6cbc753e_769a5fbc","line":1729,"updated":"2025-09-09 20:15:07.000000000","message":"It is preferred to wrap long lines in parentheses and not a backslash for line continuation. That is because any trailing space added after the backslash may result in a syntax error.\n\nSee OpenStack code style for reference\nhttps://docs.openstack.org/hacking/latest/user/hacking.html","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"410e5293dbb460859f91bea42f5bf482eeeb2752","unresolved":false,"context_lines":[{"line_number":1726,"context_line":"             \u0027poolId\u0027, \u0027attributes\u0027], ldev)"},{"line_number":1727,"context_line":""},{"line_number":1728,"context_line":"        # The DRS mode is not allowed to change."},{"line_number":1729,"context_line":"        is_current_drs \u003d ldev_info[\u0027attributes\u0027] and \\"},{"line_number":1730,"context_line":"            utils.DRS_VOL_ATTR in ldev_info[\u0027attributes\u0027]"},{"line_number":1731,"context_line":"        if _DRS_MODE.get(new_drs) is not is_current_drs:"},{"line_number":1732,"context_line":"            msg \u003d self.output_log("}],"source_content_type":"text/x-python","patch_set":5,"id":"7b4acdeb_cc21d4c5","line":1729,"in_reply_to":"6cbc753e_769a5fbc","updated":"2025-09-10 21:51:59.000000000","message":"Updated all the multilines to use parentheses instead of backslash in patchset 6","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":true,"context_lines":[{"line_number":345,"context_line":"        body[\u0027dataReductionMode\u0027] \u003d dr_mode"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def _set_drs_mode(self, body, drs):"},{"line_number":348,"context_line":"        drs_mode \u003d _DRS_MODE.get(drs)"},{"line_number":349,"context_line":"        if not drs_mode:"},{"line_number":350,"context_line":"            msg \u003d self.output_log("},{"line_number":351,"context_line":"                MSG.INVALID_EXTRA_SPEC_KEY,"}],"source_content_type":"text/x-python","patch_set":20,"id":"b325a59f_d69d4a3d","line":348,"range":{"start_line":348,"start_character":19,"end_line":348,"end_character":37},"updated":"2025-11-07 19:09:33.000000000","message":"same as in previous file\n\n    _DRS_MODE.get(drs, False)\n\nHere maybe the risk is bigger? If the operator misconfigures the value like \u0027False\u0027 then we set ``body[\u0027isDataReductionSharedVolumeEnabled\u0027]\u003dNone`` which I\u0027m unsure is valid or not","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        body[\u0027dataReductionMode\u0027] \u003d dr_mode"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"    def _set_drs_mode(self, body, drs):"},{"line_number":348,"context_line":"        drs_mode \u003d _DRS_MODE.get(drs)"},{"line_number":349,"context_line":"        if not drs_mode:"},{"line_number":350,"context_line":"            msg \u003d self.output_log("},{"line_number":351,"context_line":"                MSG.INVALID_EXTRA_SPEC_KEY,"}],"source_content_type":"text/x-python","patch_set":20,"id":"5999a936_57e78df1","line":348,"range":{"start_line":348,"start_character":19,"end_line":348,"end_character":37},"in_reply_to":"b325a59f_d69d4a3d","updated":"2025-11-08 02:48:21.000000000","message":"Fixed with default.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"}],"cinder/volume/drivers/hitachi/hbsd_utils.py":[{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"285b166c32dc54b7784a1d820bfb0be24ddc5118","unresolved":true,"context_lines":[{"line_number":666,"context_line":"    GET_SNAPSHOT_FROM_SVOL_FAILURE \u003d {"},{"line_number":667,"context_line":"        \u0027msg_id\u0027: 772,"},{"line_number":668,"context_line":"        \u0027loglevel\u0027: base_logging.ERROR,"},{"line_number":669,"context_line":"        \u0027msg\u0027: \u0027Failed to get snapshot from s-vol %(svol)d. \u0027,"},{"line_number":670,"context_line":"        \u0027suffix\u0027: ERROR_SUFFIX,"},{"line_number":671,"context_line":"    }"},{"line_number":672,"context_line":"    VCLONE_PAIR_FAILED \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"b13b1a80_b1d3856d","line":669,"updated":"2025-09-09 20:15:07.000000000","message":"It doesn\u0027t seem to be an issue, but I noticed ``svol`` and ``pvol`` values are consistently formatted as strings in log messages and other dictionaries such as ``PAIR_CHANGE_TIMEOUT`` and ``EXTEND_REPLICATION_VOLUME_ERROR``.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"a3c3ffa246f70d94f8fc9482caac3c75d47c1019","unresolved":false,"context_lines":[{"line_number":666,"context_line":"    GET_SNAPSHOT_FROM_SVOL_FAILURE \u003d {"},{"line_number":667,"context_line":"        \u0027msg_id\u0027: 772,"},{"line_number":668,"context_line":"        \u0027loglevel\u0027: base_logging.ERROR,"},{"line_number":669,"context_line":"        \u0027msg\u0027: \u0027Failed to get snapshot from s-vol %(svol)d. \u0027,"},{"line_number":670,"context_line":"        \u0027suffix\u0027: ERROR_SUFFIX,"},{"line_number":671,"context_line":"    }"},{"line_number":672,"context_line":"    VCLONE_PAIR_FAILED \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"0aa9dc6c_2eacaf4a","line":669,"in_reply_to":"06e2eaa8_b0baf361","updated":"2025-10-08 15:00:37.000000000","message":"Hi @fesilva@redhat.com -- we have uploaded a new patch here to address comments by Rajat.  Some significant changes were required, so we uploaded a new patch.\n\nCan we ask you to review the new patch?\n\nhttps://review.opendev.org/c/openstack/cinder/+/963344\n\nThank you!","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"8442f757fd8cae420b27393ac7ea4f2718f0786e","unresolved":false,"context_lines":[{"line_number":666,"context_line":"    GET_SNAPSHOT_FROM_SVOL_FAILURE \u003d {"},{"line_number":667,"context_line":"        \u0027msg_id\u0027: 772,"},{"line_number":668,"context_line":"        \u0027loglevel\u0027: base_logging.ERROR,"},{"line_number":669,"context_line":"        \u0027msg\u0027: \u0027Failed to get snapshot from s-vol %(svol)d. \u0027,"},{"line_number":670,"context_line":"        \u0027suffix\u0027: ERROR_SUFFIX,"},{"line_number":671,"context_line":"    }"},{"line_number":672,"context_line":"    VCLONE_PAIR_FAILED \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"06e2eaa8_b0baf361","line":669,"in_reply_to":"4e1f2702_6b00cc97","updated":"2025-09-23 02:28:23.000000000","message":"Done","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"410e5293dbb460859f91bea42f5bf482eeeb2752","unresolved":true,"context_lines":[{"line_number":666,"context_line":"    GET_SNAPSHOT_FROM_SVOL_FAILURE \u003d {"},{"line_number":667,"context_line":"        \u0027msg_id\u0027: 772,"},{"line_number":668,"context_line":"        \u0027loglevel\u0027: base_logging.ERROR,"},{"line_number":669,"context_line":"        \u0027msg\u0027: \u0027Failed to get snapshot from s-vol %(svol)d. \u0027,"},{"line_number":670,"context_line":"        \u0027suffix\u0027: ERROR_SUFFIX,"},{"line_number":671,"context_line":"    }"},{"line_number":672,"context_line":"    VCLONE_PAIR_FAILED \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"e8c4e8b2_0e8768d7","line":669,"in_reply_to":"b13b1a80_b1d3856d","updated":"2025-09-10 21:51:59.000000000","message":"What is the expected fix for these issues? Should they be a different type?","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"65fbd1bd073fda861fc8433aaf900b4cd04b7347","unresolved":true,"context_lines":[{"line_number":666,"context_line":"    GET_SNAPSHOT_FROM_SVOL_FAILURE \u003d {"},{"line_number":667,"context_line":"        \u0027msg_id\u0027: 772,"},{"line_number":668,"context_line":"        \u0027loglevel\u0027: base_logging.ERROR,"},{"line_number":669,"context_line":"        \u0027msg\u0027: \u0027Failed to get snapshot from s-vol %(svol)d. \u0027,"},{"line_number":670,"context_line":"        \u0027suffix\u0027: ERROR_SUFFIX,"},{"line_number":671,"context_line":"    }"},{"line_number":672,"context_line":"    VCLONE_PAIR_FAILED \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"4e1f2702_6b00cc97","line":669,"in_reply_to":"b385885d_8953507b","updated":"2025-09-18 18:20:17.000000000","message":"I believe keeping the pvol and svol as string formats for the sake of formatting is a safer approach, considering that trying to assign a variable ``svol \u003d \"10\"`` to a string format ``\"%(svol)d\"`` would result in a TypeError. Changing it to ``\"%(svol)s\"`` allows the format function to accept None, string or decimal integers without any issues.\n\nAs this patch just introduced the change in formatting, I would suggest just changing the formats to string instead of working on a tech debt patch.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"ce748c400e3ae2238478df4b43ff9da5d6b0babe","unresolved":true,"context_lines":[{"line_number":666,"context_line":"    GET_SNAPSHOT_FROM_SVOL_FAILURE \u003d {"},{"line_number":667,"context_line":"        \u0027msg_id\u0027: 772,"},{"line_number":668,"context_line":"        \u0027loglevel\u0027: base_logging.ERROR,"},{"line_number":669,"context_line":"        \u0027msg\u0027: \u0027Failed to get snapshot from s-vol %(svol)d. \u0027,"},{"line_number":670,"context_line":"        \u0027suffix\u0027: ERROR_SUFFIX,"},{"line_number":671,"context_line":"    }"},{"line_number":672,"context_line":"    VCLONE_PAIR_FAILED \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"b385885d_8953507b","line":669,"in_reply_to":"e8c4e8b2_0e8768d7","updated":"2025-09-11 18:25:42.000000000","message":"I think I follow that %()d format should change. Can you confirm the expected format? Is this also something that could be considered technical debt and be made consistent all at once next release?","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"285b166c32dc54b7784a1d820bfb0be24ddc5118","unresolved":true,"context_lines":[{"line_number":672,"context_line":"    VCLONE_PAIR_FAILED \u003d {"},{"line_number":673,"context_line":"        \u0027msg_id\u0027: 773,"},{"line_number":674,"context_line":"        \u0027loglevel\u0027: base_logging.ERROR,"},{"line_number":675,"context_line":"        \u0027msg\u0027: \u0027Failed to ss2vclone. p-vol\u003d%(pvol)d,s-vol\u003d%(svol)d\u0027,"},{"line_number":676,"context_line":"        \u0027suffix\u0027: ERROR_SUFFIX,"},{"line_number":677,"context_line":"    }"},{"line_number":678,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7daa7570_622f7b78","line":675,"updated":"2025-09-09 20:15:07.000000000","message":"same as above","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"65fbd1bd073fda861fc8433aaf900b4cd04b7347","unresolved":true,"context_lines":[{"line_number":672,"context_line":"    VCLONE_PAIR_FAILED \u003d {"},{"line_number":673,"context_line":"        \u0027msg_id\u0027: 773,"},{"line_number":674,"context_line":"        \u0027loglevel\u0027: base_logging.ERROR,"},{"line_number":675,"context_line":"        \u0027msg\u0027: \u0027Failed to ss2vclone. p-vol\u003d%(pvol)d,s-vol\u003d%(svol)d\u0027,"},{"line_number":676,"context_line":"        \u0027suffix\u0027: ERROR_SUFFIX,"},{"line_number":677,"context_line":"    }"},{"line_number":678,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"c898dcf4_ef78dbe9","line":675,"in_reply_to":"5fdb077d_4538964b","updated":"2025-09-18 18:20:17.000000000","message":"I believe keeping the pvol and svol as string formats for the sake of formatting is a safer approach, considering that trying to assign a variable ``svol \u003d \"10\"`` to a string format ``\"%(svol)d\"`` would result in a TypeError. Changing it to ``\"%(svol)s\"`` allows the format function to accept None, string or decimal integers without any issues.\n\nAs this patch just introduced the change in formatting, I would suggest just changing the formats to string instead of working on a tech debt patch.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"6e68461d9f16aec64e71e5a2a2c64d7711059d86","unresolved":true,"context_lines":[{"line_number":672,"context_line":"    VCLONE_PAIR_FAILED \u003d {"},{"line_number":673,"context_line":"        \u0027msg_id\u0027: 773,"},{"line_number":674,"context_line":"        \u0027loglevel\u0027: base_logging.ERROR,"},{"line_number":675,"context_line":"        \u0027msg\u0027: \u0027Failed to ss2vclone. p-vol\u003d%(pvol)d,s-vol\u003d%(svol)d\u0027,"},{"line_number":676,"context_line":"        \u0027suffix\u0027: ERROR_SUFFIX,"},{"line_number":677,"context_line":"    }"},{"line_number":678,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5fdb077d_4538964b","line":675,"in_reply_to":"7daa7570_622f7b78","updated":"2025-09-12 01:13:07.000000000","message":"As mentioned above, we intend to fix some of this minor tech debt in a coming patch.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"8442f757fd8cae420b27393ac7ea4f2718f0786e","unresolved":false,"context_lines":[{"line_number":672,"context_line":"    VCLONE_PAIR_FAILED \u003d {"},{"line_number":673,"context_line":"        \u0027msg_id\u0027: 773,"},{"line_number":674,"context_line":"        \u0027loglevel\u0027: base_logging.ERROR,"},{"line_number":675,"context_line":"        \u0027msg\u0027: \u0027Failed to ss2vclone. p-vol\u003d%(pvol)d,s-vol\u003d%(svol)d\u0027,"},{"line_number":676,"context_line":"        \u0027suffix\u0027: ERROR_SUFFIX,"},{"line_number":677,"context_line":"    }"},{"line_number":678,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ccd479b1_f42c9846","line":675,"in_reply_to":"c898dcf4_ef78dbe9","updated":"2025-09-23 02:28:23.000000000","message":"Done","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"}],"doc/source/configuration/block-storage/drivers/hitachi-vsp-driver.rst":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4d190c9559cf13c8faeae496f0e4a554f76bf113","unresolved":true,"context_lines":[{"line_number":675,"context_line":"``deduplication_compression`` for ``hbsd:capacity_saving`` in the extra specs"},{"line_number":676,"context_line":"for the volume type."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"2. To enable the DRS setting, speciy the value ``\u003cis\u003e True`` for ``hbsd:drs``"},{"line_number":679,"context_line":"in the extra specs for the volume type."},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"3. When creating a volume of the volume type created in the previous steps,"},{"line_number":682,"context_line":"you can create a volume with the deduplication and compression function and"}],"source_content_type":"text/x-rst","patch_set":5,"id":"495946bb_8fe5bf06","line":679,"range":{"start_line":678,"start_character":0,"end_line":679,"end_character":39},"updated":"2025-09-10 18:59:14.000000000","message":"IIUC, the DRS functionality enables ADR which combines the dedup and compression capabilities to save space so why are we enabling the `deduplication_compression` and `hbsd:drs` functionalities separately?\nIs it possible to just enable `deduplication_compression` without enabling `hbsd:drs` and still have space saved on storage?","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"ce748c400e3ae2238478df4b43ff9da5d6b0babe","unresolved":false,"context_lines":[{"line_number":675,"context_line":"``deduplication_compression`` for ``hbsd:capacity_saving`` in the extra specs"},{"line_number":676,"context_line":"for the volume type."},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"2. To enable the DRS setting, speciy the value ``\u003cis\u003e True`` for ``hbsd:drs``"},{"line_number":679,"context_line":"in the extra specs for the volume type."},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"3. When creating a volume of the volume type created in the previous steps,"},{"line_number":682,"context_line":"you can create a volume with the deduplication and compression function and"}],"source_content_type":"text/x-rst","patch_set":5,"id":"339622a9_6f8f7713","line":679,"range":{"start_line":678,"start_character":0,"end_line":679,"end_character":39},"in_reply_to":"495946bb_8fe5bf06","updated":"2025-09-11 18:25:42.000000000","message":"At the moment those two values are essentially the same but in future releases there will be different values that hbsd can accept. We want to add this variable now to help future proof for later additions","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4d190c9559cf13c8faeae496f0e4a554f76bf113","unresolved":true,"context_lines":[{"line_number":692,"context_line":".. note::"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"   * When deleting a volume that has been cloned using Thin Image Advanced and"},{"line_number":695,"context_line":"     vClone (DRS volumes + same pool), the vClone parent volume cannot be deleted"},{"line_number":696,"context_line":"     until all children have been deleted."},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"Port scheduler"},{"line_number":699,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"de219102_e1cc4154","line":696,"range":{"start_line":695,"start_character":39,"end_line":696,"end_character":42},"updated":"2025-09-10 18:59:14.000000000","message":"does this mean that deleting the parent volume will fail?\nIf yes then this is not really a good UX for end users, we should have mechanisms to handle the dependency chain and flatten whenever possible to avoid resource dependencies to limit the users from deleting parent resources.\nAlso since we mention \"same pool\", i assume this won\u0027t be an issue for replicated volumes?","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"a3c3ffa246f70d94f8fc9482caac3c75d47c1019","unresolved":true,"context_lines":[{"line_number":692,"context_line":".. note::"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"   * When deleting a volume that has been cloned using Thin Image Advanced and"},{"line_number":695,"context_line":"     vClone (DRS volumes + same pool), the vClone parent volume cannot be deleted"},{"line_number":696,"context_line":"     until all children have been deleted."},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"Port scheduler"},{"line_number":699,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"f0a7b813_de8e1c26","line":696,"range":{"start_line":695,"start_character":39,"end_line":696,"end_character":42},"in_reply_to":"522e73e9_27e35894","updated":"2025-10-08 15:00:37.000000000","message":"Hi @rajatdhasmana@gmail.com,\n\nWe have created a new patch here: https://review.opendev.org/c/openstack/cinder/+/963344\n\nIn this patch we now manage the parent volume in the background to address your concerns.  We created a new patch as it has changed quite a bit.  \n\nCan you please review the new patch?\n\nThank you!","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"6e68461d9f16aec64e71e5a2a2c64d7711059d86","unresolved":true,"context_lines":[{"line_number":692,"context_line":".. note::"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"   * When deleting a volume that has been cloned using Thin Image Advanced and"},{"line_number":695,"context_line":"     vClone (DRS volumes + same pool), the vClone parent volume cannot be deleted"},{"line_number":696,"context_line":"     until all children have been deleted."},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"Port scheduler"},{"line_number":699,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"522e73e9_27e35894","line":696,"range":{"start_line":695,"start_character":39,"end_line":696,"end_character":42},"in_reply_to":"de219102_e1cc4154","updated":"2025-09-12 01:13:07.000000000","message":"This is a current storage limitation, and only applies to the top volume in a “family”.  There isn’t a workaround that can be applied at this time, but in the future as the technology evolves there may be one.\n\nFor example if you have a cloning structure where you have the following:\n1.\tVolume 0 clones volume 1, 2, and 3\n2.\tVolume 1 clones volume 4, and 5\n3.\tVolume 2 and 3 create clones (or not)\n\nIn the above scenario, volume 0 is the only parent as it’s at the very top level.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"9e14548a84ccfdf6640bf1dff14e3db5a8f5b5cf","unresolved":false,"context_lines":[{"line_number":692,"context_line":".. note::"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"   * When deleting a volume that has been cloned using Thin Image Advanced and"},{"line_number":695,"context_line":"     vClone (DRS volumes + same pool), the vClone parent volume cannot be deleted"},{"line_number":696,"context_line":"     until all children have been deleted."},{"line_number":697,"context_line":""},{"line_number":698,"context_line":"Port scheduler"},{"line_number":699,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3f2759d6_ed6b188f","line":696,"range":{"start_line":695,"start_character":39,"end_line":696,"end_character":42},"in_reply_to":"f0a7b813_de8e1c26","updated":"2025-10-22 12:25:42.000000000","message":"We believe we have addressed your concerns with the most recent patch set.  We ported it back here to the original patch.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"}],"releasenotes/notes/B20-support-8c2baf5f781efffd.yaml":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4d190c9559cf13c8faeae496f0e4a554f76bf113","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: support for Hitachi VSP One B20 storage system"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"a758861c_5532ed01","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":5},"updated":"2025-09-10 18:59:14.000000000","message":"this should be `features` and not `fixes` as we are not fixing anything but adding support for a new type of storage system.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"a3c3ffa246f70d94f8fc9482caac3c75d47c1019","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: support for Hitachi VSP One B20 storage system"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"11e79596_23ae9cff","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":5},"in_reply_to":"721ec648_c982e88e","updated":"2025-10-08 15:00:37.000000000","message":"With our new patch, we have moved this to \"features\".\n\nNote that Anthony Gamboa misspoke about Jon -- it was a suggestion from a PM to try out.  I am making this as resolved as the new patch is marked as a feature.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"ce748c400e3ae2238478df4b43ff9da5d6b0babe","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: support for Hitachi VSP One B20 storage system"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"721ec648_c982e88e","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":5},"in_reply_to":"a758861c_5532ed01","updated":"2025-09-11 18:25:42.000000000","message":"The feature already exists and we are merely extending it. \nAlthough it is not quite a fix it isn\u0027t entirely a feature either. We have discussed with Jon Bernard and believe this is acceptable. I can try to confirm with core if needed.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"4d190c9559cf13c8faeae496f0e4a554f76bf113","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: support for Hitachi VSP One B20 storage system"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1794cdd9_5a4122e8","line":4,"updated":"2025-09-10 18:59:14.000000000","message":"Maybe it\u0027s expected for the customers to be aware about the features they get with the Hitachi VSP One B20 but it\u0027s always better to be explicit about it like the ADR functionality offering 4:1 data saving (as claimed in the blog[1]), the TIA functionality offering the ROW functionality which is superior to the traditional COW etc.\nMy point is it\u0027s good to highlight the cutting edge features that the new array solution offers because this is the section which is going to be read by operators and make decisions on choosing the right solution for their deployment.\n\n[1] https://www.hitachivantara.com/en-in/blog/now-three-things-in-life-are-guaranteed","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"285b166c32dc54b7784a1d820bfb0be24ddc5118","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: support for Hitachi VSP One B20 storage system"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"4ef86eda_bf5f87c4","line":4,"updated":"2025-09-09 20:15:07.000000000","message":"nit: the lack of a new line at the end of the file may become an issue when we start validating YAML files with yamllint, as the newline rule is enforced by default to match the Unix convention.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"6e68461d9f16aec64e71e5a2a2c64d7711059d86","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: support for Hitachi VSP One B20 storage system"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7eb91cad_43dd29a1","line":4,"in_reply_to":"1794cdd9_5a4122e8","updated":"2025-09-12 01:13:07.000000000","message":"Agreed, and thank you for the note!  We will be updating the release notes shortly.","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"410e5293dbb460859f91bea42f5bf482eeeb2752","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: support for Hitachi VSP One B20 storage system"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"30dddcfa_2090bb4a","line":4,"in_reply_to":"4ef86eda_bf5f87c4","updated":"2025-09-10 21:51:59.000000000","message":"Added a newline to the end of release note file in patchset 6","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":37923,"name":"anthony gamboa","display_name":"Anthony Gamboa","email":"anthony.gamboa@hitachivantara.com","username":"anthonygamboa","status":"Hitachi Vantara Software Developer"},"change_message_id":"b6c9927c13e268f91991922f7bd2b36f1eb7789c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: support for Hitachi VSP One B20 storage system"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"6813869c_ee20da7a","line":4,"in_reply_to":"7eb91cad_43dd29a1","updated":"2025-09-12 02:14:52.000000000","message":"Updated notes to include your B20 features","commit_id":"6592d7725a1bc1e4286effd716879fd83954efd2"},{"author":{"_account_id":9236,"name":"Jon Bernard","email":"jobernar@redhat.com","username":"jbernard"},"change_message_id":"84670aa0ee210845c4d9f8f957f00f2dc885eab4","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: This patch enables support for VSP One B20. VSP One B20 supports ADR "},{"line_number":5,"context_line":"    functionality that offers up to 4:1 data saving, and Thin Image Advanced that supports "},{"line_number":6,"context_line":"    superior ROW functionality.  In addition, the B20 supports vClone technology that allows "},{"line_number":7,"context_line":"    for instantaneous cloning and shared data between clones."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"49442a92_7d764f8a","line":4,"updated":"2025-11-06 15:05:26.000000000","message":"The release note doesn\u0027t need to meantion \"this patch\", it\u0027s operator-facing and that audience is interested just in what changed and impact.  See https://e287b5846f894c7179f4-83ee41d1d15b6e7c94a25488c54501c9.ssl.cf1.rackcdn.com/openstack/afed3db834234ba3bbf4131e9c0f1622/docs/unreleased.html for the rendered result.  Super minor, but wanted to point it out.","commit_id":"421b7c5c56c6123be44d017f0232feecd195987e"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"81a98df0140e41d289e7cca9c3a10f4625a34ca3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: This patch enables support for VSP One B20. VSP One B20 supports ADR "},{"line_number":5,"context_line":"    functionality that offers up to 4:1 data saving, and Thin Image Advanced that supports "},{"line_number":6,"context_line":"    superior ROW functionality.  In addition, the B20 supports vClone technology that allows "},{"line_number":7,"context_line":"    for instantaneous cloning and shared data between clones."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"4211d3aa_81b6ec36","line":4,"in_reply_to":"49442a92_7d764f8a","updated":"2025-11-07 02:53:31.000000000","message":"I have removed \"this patch\". and just said \"Enable support for...\"","commit_id":"421b7c5c56c6123be44d017f0232feecd195987e"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"528caac5449d00abdb63c6772eb89c4a2bdd7e0e","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: Enable support for VSP One B20. VSP One B20 supports ADR"},{"line_number":5,"context_line":"    functionality that offers up to 4:1 data saving, and Thin Image Advanced that supports"},{"line_number":6,"context_line":"    superior ROW functionality.  In addition, the B20 supports vClone technology that allows"},{"line_number":7,"context_line":"    for instantaneous cloning and shared data between clones."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"91309b4a_3e8f7a3d","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":11},"updated":"2025-11-07 19:09:33.000000000","message":"I can see that we are also enabling the support for NEC and HPEXP drivers. Are they based on the B20 hardware?\nIf we are certain that those drivers also work with the DRS functionality enabled, maybe we can add a line towards the end saying the NEC and HPEXP driver also have the support enabled now.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"cc7b48065a2ededfac19c17a25e77895fbe855f8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: Enable support for VSP One B20. VSP One B20 supports ADR"},{"line_number":5,"context_line":"    functionality that offers up to 4:1 data saving, and Thin Image Advanced that supports"},{"line_number":6,"context_line":"    superior ROW functionality.  In addition, the B20 supports vClone technology that allows"},{"line_number":7,"context_line":"    for instantaneous cloning and shared data between clones."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"e253e13d_ba58ed33","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":11},"in_reply_to":"91309b4a_3e8f7a3d","updated":"2025-11-08 02:48:21.000000000","message":"Technically they are the same array and use the same driver (you can see the HPE and NEC drivers just inherit from ours and do some configuration renaming).\n\nWe aren\u0027t actually in control of those drivers, but we need these values to not break the build, as it were.\n\nSo, I don\u0027t want to announce that, particularly since they don\u0027t have the B20 equivalent yet (and I don\u0027t even know what it will be called).","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3aa9809e8ae6339e38839b0088ca09a43ddaf742","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Hitachi driver: Enable support for VSP One B20. VSP One B20 supports ADR"},{"line_number":5,"context_line":"    functionality that offers up to 4:1 data saving, and Thin Image Advanced that supports"},{"line_number":6,"context_line":"    superior ROW functionality.  In addition, the B20 supports vClone technology that allows"},{"line_number":7,"context_line":"    for instantaneous cloning and shared data between clones."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"8aa96a7c_70532060","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":11},"in_reply_to":"e253e13d_ba58ed33","updated":"2025-11-09 00:27:44.000000000","message":"Makes sense.","commit_id":"d3cf273b7b3c00b34f399cddbee6ca8b235b884a"}]}
