)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Ratnakaram Rajesh \u003crajesh.r@zadara.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-02-08 15:57:40 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support for manage,unmanage,multiattach and ipv6 for Zadara cinder driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I787e9e40c882e6ab252e10c239778019acb2e6c6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"732a4913_cbe7ef2c","line":7,"updated":"2021-02-08 17:52:10.000000000","message":"nit: Please follow commit message guidelines [1]. First line 50 characters max, then empty line, then wrapped at 72 characters.\n\nFirst line should be a generic explanation and then the details should come in the body.  For example:\n\n  Update Zadara features\n\n  This patch adds some missing features to the Zadara driver:\n\n  - Volume manage and unmanage\n  - List manageable volumes and snapshots\n  - Multiattach\n  - IPv6\n\nI haven\u0027t reviewed the code yet, but given the different features that are being implemented, best practices dictated these should have been at least 3 different patches.\n\n[1]: https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"de3405a9feee9f3f95b690b8696f3ec292e50aee","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ratnakaram Rajesh \u003crajesh.r@zadara.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-02-08 15:57:40 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support for manage,unmanage,multiattach and ipv6 for Zadara cinder driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I787e9e40c882e6ab252e10c239778019acb2e6c6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"00a82f64_fb38a35e","line":7,"in_reply_to":"732a4913_cbe7ef2c","updated":"2021-02-12 17:33:59.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"}],"cinder/exception.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"6e35f2449f716166c2caceceb6cd593bce4b1252","unresolved":true,"context_lines":[{"line_number":1089,"context_line":"    message \u003d _(\"Exceeded the configured limit of \""},{"line_number":1090,"context_line":"                \"%(set_limit)s snapshots per volume.\")"},{"line_number":1091,"context_line":""},{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"# Zadara storage driver"},{"line_number":1094,"context_line":"class SessionRequestException(VolumeDriverException):"},{"line_number":1095,"context_line":"    message \u003d _(\"%(msg)s\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"7d44f6ee_07c0f638","line":1092,"updated":"2021-03-15 15:51:45.000000000","message":"Don\u0027t move these back here! They were removed by https://review.opendev.org/c/openstack/cinder/+/657874\n\nYou can import the cinder exeptions and define your own in the driver, either in your common module or in your own exception module.  Here\u0027s an example of each approach:\n\ninto common: https://review.opendev.org/c/openstack/cinder/+/657678\n\nin own exception module: https://review.opendev.org/c/openstack/cinder/+/657866","commit_id":"111153fd03fa8896bf9e9070411e6d7da6ea8b6f"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"    message \u003d _(\"Exceeded the configured limit of \""},{"line_number":1090,"context_line":"                \"%(set_limit)s snapshots per volume.\")"},{"line_number":1091,"context_line":""},{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"# Zadara storage driver"},{"line_number":1094,"context_line":"class SessionRequestException(VolumeDriverException):"},{"line_number":1095,"context_line":"    message \u003d _(\"%(msg)s\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"a1b2fdf1_f7fd7b1b","line":1092,"in_reply_to":"7d44f6ee_07c0f638","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"111153fd03fa8896bf9e9070411e6d7da6ea8b6f"}],"cinder/volume/drivers/zadara/common.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Common class for both the Volume and FileSystem share drivers to connect"},{"line_number":18,"context_line":"and execute the comands on Zadara Virtual Private Storage Array (VPSA)."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bc43effa_a81a9d9d","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":47},"updated":"2021-02-08 17:52:10.000000000","message":"?: Is this Cinder and Manila?  If so, you should mention the project names and how it is common, as in, it will be the same in both projects and kept in sync.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"03c0a3eb97d561170a0aa165ead5f842dc0e4e57","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Common class for both the Volume and FileSystem share drivers to connect"},{"line_number":18,"context_line":"and execute the comands on Zadara Virtual Private Storage Array (VPSA)."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"67f8880d_678e1a97","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":47},"in_reply_to":"bc43effa_a81a9d9d","updated":"2021-02-09 04:56:13.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":77,"context_line":"zadara_opts \u003d ["},{"line_number":78,"context_line":"    cfg.BoolOpt(\u0027zadara_use_iser\u0027,"},{"line_number":79,"context_line":"                default\u003dTrue,"},{"line_number":80,"context_line":"                help\u003d\u0027VPSA - Use ISER instead of iSCSI\u0027),"},{"line_number":81,"context_line":"    cfg.StrOpt(\u0027zadara_vpsa_host\u0027,"},{"line_number":82,"context_line":"               default\u003dNone,"},{"line_number":83,"context_line":"               help\u003d\u0027VPSA - Management Host name or IP address\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5c7d3f_e6ef6286","line":80,"updated":"2021-02-08 17:52:10.000000000","message":"nit: I understand this is only relevant for Cinder, right?  But if this file is common for Cinder and Manila it will show in their project auto generated sample config.  It may be worth mention here that it\u0027s only relevant for Cinder.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"03c0a3eb97d561170a0aa165ead5f842dc0e4e57","unresolved":true,"context_lines":[{"line_number":77,"context_line":"zadara_opts \u003d ["},{"line_number":78,"context_line":"    cfg.BoolOpt(\u0027zadara_use_iser\u0027,"},{"line_number":79,"context_line":"                default\u003dTrue,"},{"line_number":80,"context_line":"                help\u003d\u0027VPSA - Use ISER instead of iSCSI\u0027),"},{"line_number":81,"context_line":"    cfg.StrOpt(\u0027zadara_vpsa_host\u0027,"},{"line_number":82,"context_line":"               default\u003dNone,"},{"line_number":83,"context_line":"               help\u003d\u0027VPSA - Management Host name or IP address\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"969a7df8_17e26287","line":80,"in_reply_to":"5a5c7d3f_e6ef6286","updated":"2021-02-09 04:56:13.000000000","message":"It is moved from common file to the cinder specific code.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1b8ccdd4195d772f4de7c2f6c8ad2555959d0150","unresolved":false,"context_lines":[{"line_number":77,"context_line":"zadara_opts \u003d ["},{"line_number":78,"context_line":"    cfg.BoolOpt(\u0027zadara_use_iser\u0027,"},{"line_number":79,"context_line":"                default\u003dTrue,"},{"line_number":80,"context_line":"                help\u003d\u0027VPSA - Use ISER instead of iSCSI\u0027),"},{"line_number":81,"context_line":"    cfg.StrOpt(\u0027zadara_vpsa_host\u0027,"},{"line_number":82,"context_line":"               default\u003dNone,"},{"line_number":83,"context_line":"               help\u003d\u0027VPSA - Management Host name or IP address\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ccecaa2e_67ac7ab3","line":80,"in_reply_to":"969a7df8_17e26287","updated":"2021-02-09 05:09:52.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":116,"context_line":"    cfg.BoolOpt(\u0027zadara_gen3_vol_compress\u0027,"},{"line_number":117,"context_line":"                default\u003dFalse,"},{"line_number":118,"context_line":"                help\u003d\u0027VPSA - Enable compression for volumes\u0027),"},{"line_number":119,"context_line":"    cfg.StrOpt(\u0027zadara_vol_name_template\u0027,"},{"line_number":120,"context_line":"               default\u003d\u0027OS_%s\u0027,"},{"line_number":121,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA volume names\u0027),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027zadara_share_name_template\u0027,"},{"line_number":123,"context_line":"               default\u003d\u0027OS_share-%s\u0027,"},{"line_number":124,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"0cd45ea2_1697cf4a","line":121,"range":{"start_line":119,"start_character":0,"end_line":121,"end_character":69},"updated":"2021-02-08 17:52:10.000000000","message":"nit: Same as above","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"03c0a3eb97d561170a0aa165ead5f842dc0e4e57","unresolved":true,"context_lines":[{"line_number":116,"context_line":"    cfg.BoolOpt(\u0027zadara_gen3_vol_compress\u0027,"},{"line_number":117,"context_line":"                default\u003dFalse,"},{"line_number":118,"context_line":"                help\u003d\u0027VPSA - Enable compression for volumes\u0027),"},{"line_number":119,"context_line":"    cfg.StrOpt(\u0027zadara_vol_name_template\u0027,"},{"line_number":120,"context_line":"               default\u003d\u0027OS_%s\u0027,"},{"line_number":121,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA volume names\u0027),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027zadara_share_name_template\u0027,"},{"line_number":123,"context_line":"               default\u003d\u0027OS_share-%s\u0027,"},{"line_number":124,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"21458177_421c195e","line":121,"range":{"start_line":119,"start_character":0,"end_line":121,"end_character":69},"in_reply_to":"0cd45ea2_1697cf4a","updated":"2021-02-09 04:56:13.000000000","message":"Same as above. Moved to cinder specific code.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1b8ccdd4195d772f4de7c2f6c8ad2555959d0150","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    cfg.BoolOpt(\u0027zadara_gen3_vol_compress\u0027,"},{"line_number":117,"context_line":"                default\u003dFalse,"},{"line_number":118,"context_line":"                help\u003d\u0027VPSA - Enable compression for volumes\u0027),"},{"line_number":119,"context_line":"    cfg.StrOpt(\u0027zadara_vol_name_template\u0027,"},{"line_number":120,"context_line":"               default\u003d\u0027OS_%s\u0027,"},{"line_number":121,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA volume names\u0027),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027zadara_share_name_template\u0027,"},{"line_number":123,"context_line":"               default\u003d\u0027OS_share-%s\u0027,"},{"line_number":124,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"8186251c_921dd6aa","line":121,"range":{"start_line":119,"start_character":0,"end_line":121,"end_character":69},"in_reply_to":"21458177_421c195e","updated":"2021-02-09 05:09:52.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":119,"context_line":"    cfg.StrOpt(\u0027zadara_vol_name_template\u0027,"},{"line_number":120,"context_line":"               default\u003d\u0027OS_%s\u0027,"},{"line_number":121,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA volume names\u0027),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027zadara_share_name_template\u0027,"},{"line_number":123,"context_line":"               default\u003d\u0027OS_share-%s\u0027,"},{"line_number":124,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"},{"line_number":125,"context_line":"    cfg.StrOpt(\u0027zadara_share_snap_name_template\u0027,"},{"line_number":126,"context_line":"               default\u003d\u0027OS_share-snapshot-%s\u0027,"},{"line_number":127,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"a1d11cd6_c0b4c251","line":124,"range":{"start_line":122,"start_character":0,"end_line":124,"end_character":68},"updated":"2021-02-08 17:52:10.000000000","message":"-1: This is irrelevant for Cinder, yet it is returned in `get_driver_options` method.  Which is used by UIs to generate setup forms.\n\nYou can add this conditionally on L137:\n\n  if __name__.starswith(\u0027manila\u0027):\n      zadara_opts.append(cfg.StrOpt(\u0027zadara_share_name_template\u0027, ...))","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1b8ccdd4195d772f4de7c2f6c8ad2555959d0150","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    cfg.StrOpt(\u0027zadara_vol_name_template\u0027,"},{"line_number":120,"context_line":"               default\u003d\u0027OS_%s\u0027,"},{"line_number":121,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA volume names\u0027),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027zadara_share_name_template\u0027,"},{"line_number":123,"context_line":"               default\u003d\u0027OS_share-%s\u0027,"},{"line_number":124,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"},{"line_number":125,"context_line":"    cfg.StrOpt(\u0027zadara_share_snap_name_template\u0027,"},{"line_number":126,"context_line":"               default\u003d\u0027OS_share-snapshot-%s\u0027,"},{"line_number":127,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7906a091_42785c8a","line":124,"range":{"start_line":122,"start_character":0,"end_line":124,"end_character":68},"in_reply_to":"8ae8d81c_09798ef7","updated":"2021-02-09 05:09:52.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"03c0a3eb97d561170a0aa165ead5f842dc0e4e57","unresolved":true,"context_lines":[{"line_number":119,"context_line":"    cfg.StrOpt(\u0027zadara_vol_name_template\u0027,"},{"line_number":120,"context_line":"               default\u003d\u0027OS_%s\u0027,"},{"line_number":121,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA volume names\u0027),"},{"line_number":122,"context_line":"    cfg.StrOpt(\u0027zadara_share_name_template\u0027,"},{"line_number":123,"context_line":"               default\u003d\u0027OS_share-%s\u0027,"},{"line_number":124,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"},{"line_number":125,"context_line":"    cfg.StrOpt(\u0027zadara_share_snap_name_template\u0027,"},{"line_number":126,"context_line":"               default\u003d\u0027OS_share-snapshot-%s\u0027,"},{"line_number":127,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"8ae8d81c_09798ef7","line":124,"range":{"start_line":122,"start_character":0,"end_line":124,"end_character":68},"in_reply_to":"a1d11cd6_c0b4c251","updated":"2021-02-09 04:56:13.000000000","message":"Same as above.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":122,"context_line":"    cfg.StrOpt(\u0027zadara_share_name_template\u0027,"},{"line_number":123,"context_line":"               default\u003d\u0027OS_share-%s\u0027,"},{"line_number":124,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"},{"line_number":125,"context_line":"    cfg.StrOpt(\u0027zadara_share_snap_name_template\u0027,"},{"line_number":126,"context_line":"               default\u003d\u0027OS_share-snapshot-%s\u0027,"},{"line_number":127,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"},{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027zadara_default_snap_policy\u0027,"},{"line_number":129,"context_line":"                default\u003dFalse,"},{"line_number":130,"context_line":"                help\u003d\"VPSA - Attach snapshot policy for volumes\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"8b6a0dee_e00a7040","line":127,"range":{"start_line":125,"start_character":0,"end_line":127,"end_character":68},"updated":"2021-02-08 17:52:10.000000000","message":"nit: irrelevant for Manila","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"03c0a3eb97d561170a0aa165ead5f842dc0e4e57","unresolved":true,"context_lines":[{"line_number":122,"context_line":"    cfg.StrOpt(\u0027zadara_share_name_template\u0027,"},{"line_number":123,"context_line":"               default\u003d\u0027OS_share-%s\u0027,"},{"line_number":124,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"},{"line_number":125,"context_line":"    cfg.StrOpt(\u0027zadara_share_snap_name_template\u0027,"},{"line_number":126,"context_line":"               default\u003d\u0027OS_share-snapshot-%s\u0027,"},{"line_number":127,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"},{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027zadara_default_snap_policy\u0027,"},{"line_number":129,"context_line":"                default\u003dFalse,"},{"line_number":130,"context_line":"                help\u003d\"VPSA - Attach snapshot policy for volumes\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"c02957f6_127f6ff4","line":127,"range":{"start_line":125,"start_character":0,"end_line":127,"end_character":68},"in_reply_to":"8b6a0dee_e00a7040","updated":"2021-02-09 04:56:13.000000000","message":"Same as above.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1b8ccdd4195d772f4de7c2f6c8ad2555959d0150","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    cfg.StrOpt(\u0027zadara_share_name_template\u0027,"},{"line_number":123,"context_line":"               default\u003d\u0027OS_share-%s\u0027,"},{"line_number":124,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"},{"line_number":125,"context_line":"    cfg.StrOpt(\u0027zadara_share_snap_name_template\u0027,"},{"line_number":126,"context_line":"               default\u003d\u0027OS_share-snapshot-%s\u0027,"},{"line_number":127,"context_line":"               help\u003d\u0027VPSA - Default template for VPSA share names\u0027),"},{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027zadara_default_snap_policy\u0027,"},{"line_number":129,"context_line":"                default\u003dFalse,"},{"line_number":130,"context_line":"                help\u003d\"VPSA - Attach snapshot policy for volumes\"),"}],"source_content_type":"text/x-python","patch_set":1,"id":"51c9b930_56156679","line":127,"range":{"start_line":125,"start_character":0,"end_line":127,"end_character":68},"in_reply_to":"c02957f6_127f6ff4","updated":"2021-02-09 05:09:52.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027zadara_default_snap_policy\u0027,"},{"line_number":129,"context_line":"                default\u003dFalse,"},{"line_number":130,"context_line":"                help\u003d\"VPSA - Attach snapshot policy for volumes\"),"},{"line_number":131,"context_line":"    cfg.StrOpt(\u0027zadara_driver_ssl_cert_path\u0027,"},{"line_number":132,"context_line":"               default\u003dNone,"},{"line_number":133,"context_line":"               help\u003d\u0027This option is valid only for manila driver. Can be \u0027"},{"line_number":134,"context_line":"                    \u0027used to specify a non default path to a CA_BUNDLE file \u0027"},{"line_number":135,"context_line":"                    \u0027or directory with certificates of trusted CAs, which \u0027"},{"line_number":136,"context_line":"                    \u0027will be used to validate the backend\u0027)]"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"class ZadaraVPSAConnection(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"48f4376a_6495dba6","line":136,"range":{"start_line":131,"start_character":0,"end_line":136,"end_character":60},"updated":"2021-02-08 17:52:10.000000000","message":"-1: This is not being used in Cinder.  In Cinder the driver is using the generic configuration option `driver_ssl_cert_path` instead.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"03c0a3eb97d561170a0aa165ead5f842dc0e4e57","unresolved":true,"context_lines":[{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027zadara_default_snap_policy\u0027,"},{"line_number":129,"context_line":"                default\u003dFalse,"},{"line_number":130,"context_line":"                help\u003d\"VPSA - Attach snapshot policy for volumes\"),"},{"line_number":131,"context_line":"    cfg.StrOpt(\u0027zadara_driver_ssl_cert_path\u0027,"},{"line_number":132,"context_line":"               default\u003dNone,"},{"line_number":133,"context_line":"               help\u003d\u0027This option is valid only for manila driver. Can be \u0027"},{"line_number":134,"context_line":"                    \u0027used to specify a non default path to a CA_BUNDLE file \u0027"},{"line_number":135,"context_line":"                    \u0027or directory with certificates of trusted CAs, which \u0027"},{"line_number":136,"context_line":"                    \u0027will be used to validate the backend\u0027)]"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"class ZadaraVPSAConnection(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e45c050a_7959eb71","line":136,"range":{"start_line":131,"start_character":0,"end_line":136,"end_character":60},"in_reply_to":"48f4376a_6495dba6","updated":"2021-02-09 04:56:13.000000000","message":"Yes. Removed from common.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1b8ccdd4195d772f4de7c2f6c8ad2555959d0150","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    cfg.BoolOpt(\u0027zadara_default_snap_policy\u0027,"},{"line_number":129,"context_line":"                default\u003dFalse,"},{"line_number":130,"context_line":"                help\u003d\"VPSA - Attach snapshot policy for volumes\"),"},{"line_number":131,"context_line":"    cfg.StrOpt(\u0027zadara_driver_ssl_cert_path\u0027,"},{"line_number":132,"context_line":"               default\u003dNone,"},{"line_number":133,"context_line":"               help\u003d\u0027This option is valid only for manila driver. Can be \u0027"},{"line_number":134,"context_line":"                    \u0027used to specify a non default path to a CA_BUNDLE file \u0027"},{"line_number":135,"context_line":"                    \u0027or directory with certificates of trusted CAs, which \u0027"},{"line_number":136,"context_line":"                    \u0027will be used to validate the backend\u0027)]"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"class ZadaraVPSAConnection(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"63135eba_ff760461","line":136,"range":{"start_line":131,"start_character":0,"end_line":136,"end_character":60},"in_reply_to":"e45c050a_7959eb71","updated":"2021-02-09 05:09:52.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # Dictionary of applicable VPSA commands in the following format:"},{"line_number":155,"context_line":"        # \u0027command\u0027: (method, API_URL, {optional parameters})"},{"line_number":156,"context_line":"        vpsa_commands \u003d {"},{"line_number":157,"context_line":"            \u0027login\u0027: (\u0027POST\u0027,"},{"line_number":158,"context_line":"                      \u0027/api/users/login.json\u0027,"},{"line_number":159,"context_line":"                      {\u0027user\u0027: self.conf.zadara_user,"},{"line_number":160,"context_line":"                       \u0027password\u0027: self.conf.zadara_password}),"},{"line_number":161,"context_line":"            # Volume operations"},{"line_number":162,"context_line":"            \u0027create_volume\u0027: (\u0027POST\u0027,"},{"line_number":163,"context_line":"                              \u0027/api/volumes.json\u0027,"},{"line_number":164,"context_line":"                              {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":165,"context_line":"                               \u0027capacity\u0027: kwargs.get(\u0027size\u0027),"},{"line_number":166,"context_line":"                               \u0027pool\u0027: self.conf.zadara_vpsa_poolname,"},{"line_number":167,"context_line":"                               \u0027block\u0027: \u0027YES\u0027"},{"line_number":168,"context_line":"                               if self.vol_type_str \u003d\u003d \u0027showonlyblock\u0027"},{"line_number":169,"context_line":"                               else \u0027NO\u0027,"},{"line_number":170,"context_line":"                               \u0027thin\u0027: \u0027YES\u0027,"},{"line_number":171,"context_line":"                               \u0027crypt\u0027: \u0027YES\u0027"},{"line_number":172,"context_line":"                               if self.conf.zadara_vol_encrypt else \u0027NO\u0027,"},{"line_number":173,"context_line":"                               \u0027compress\u0027: \u0027YES\u0027"},{"line_number":174,"context_line":"                               if self.conf.zadara_gen3_vol_compress else \u0027NO\u0027,"},{"line_number":175,"context_line":"                               \u0027dedupe\u0027: \u0027YES\u0027"},{"line_number":176,"context_line":"                               if self.conf.zadara_gen3_vol_dedupe else \u0027NO\u0027,"},{"line_number":177,"context_line":"                               \u0027attachpolicies\u0027: \u0027NO\u0027"},{"line_number":178,"context_line":"                               if not self.conf.zadara_default_snap_policy"},{"line_number":179,"context_line":"                               else \u0027YES\u0027}),"},{"line_number":180,"context_line":"            \u0027delete_volume\u0027: (\u0027DELETE\u0027,"},{"line_number":181,"context_line":"                              \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":182,"context_line":"                              {\u0027force\u0027: \u0027YES\u0027}),"},{"line_number":183,"context_line":"            \u0027expand_volume\u0027: (\u0027POST\u0027,"},{"line_number":184,"context_line":"                              \u0027/api/volumes/%s/expand.json\u0027"},{"line_number":185,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":186,"context_line":"                              {\u0027capacity\u0027: kwargs.get(\u0027size\u0027)}),"},{"line_number":187,"context_line":"            \u0027rename_volume\u0027: (\u0027POST\u0027,"},{"line_number":188,"context_line":"                              \u0027/api/volumes/%s/rename.json\u0027"},{"line_number":189,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":190,"context_line":"                              {\u0027new_name\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":191,"context_line":"            # Snapshot operations"},{"line_number":192,"context_line":"            # Snapshot request is triggered for a single volume though the"},{"line_number":193,"context_line":"            # API call implies that snapshot is triggered for CG (legacy API)."},{"line_number":194,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":195,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":196,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":197,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":198,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"},{"line_number":199,"context_line":"                                \u0027/api/snapshots/%s.json\u0027"},{"line_number":200,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":201,"context_line":"                                {}),"},{"line_number":202,"context_line":"            \u0027rename_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":203,"context_line":"                                \u0027/api/snapshots/%s/rename.json\u0027"},{"line_number":204,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":205,"context_line":"                                {\u0027newname\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":206,"context_line":"            \u0027create_clone_from_snap\u0027: (\u0027POST\u0027,"},{"line_number":207,"context_line":"                                       \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":208,"context_line":"                                       % kwargs.get(\u0027cg_name\u0027),"},{"line_number":209,"context_line":"                                       {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":210,"context_line":"                                        \u0027snapshot\u0027: kwargs.get(\u0027snap_id\u0027)}),"},{"line_number":211,"context_line":"            \u0027create_clone\u0027: (\u0027POST\u0027,"},{"line_number":212,"context_line":"                             \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":213,"context_line":"                             % kwargs.get(\u0027cg_name\u0027),"},{"line_number":214,"context_line":"                             {\u0027name\u0027: kwargs.get(\u0027name\u0027)}),"},{"line_number":215,"context_line":"            # Server operations"},{"line_number":216,"context_line":"            \u0027create_server\u0027: (\u0027POST\u0027,"},{"line_number":217,"context_line":"                              \u0027/api/servers.json\u0027,"},{"line_number":218,"context_line":"                              {\u0027iqn\u0027: kwargs.get(\u0027iqn\u0027),"},{"line_number":219,"context_line":"                               \u0027iscsi\u0027: kwargs.get(\u0027iscsi_ip\u0027),"},{"line_number":220,"context_line":"                               \u0027display_name\u0027: kwargs.get(\u0027iqn\u0027)"},{"line_number":221,"context_line":"                               if kwargs.get(\u0027iqn\u0027)"},{"line_number":222,"context_line":"                               else kwargs.get(\u0027iscsi_ip\u0027)}),"},{"line_number":223,"context_line":"            # Attach/Detach operations"},{"line_number":224,"context_line":"            \u0027attach_volume\u0027: (\u0027POST\u0027,"},{"line_number":225,"context_line":"                              \u0027/api/servers/%s/volumes.json\u0027"},{"line_number":226,"context_line":"                              % kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":227,"context_line":"                              {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":228,"context_line":"                               \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),"},{"line_number":229,"context_line":"                               \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),"},{"line_number":230,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":231,"context_line":"            \u0027detach_volume\u0027: (\u0027POST\u0027,"},{"line_number":232,"context_line":"                              \u0027/api/volumes/%s/detach.json\u0027"},{"line_number":233,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":234,"context_line":"                              {\u0027server_name[]\u0027: kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":235,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":236,"context_line":"            # Update volume comment"},{"line_number":237,"context_line":"            \u0027update_volume\u0027: (\u0027POST\u0027,"},{"line_number":238,"context_line":"                              \u0027/api/volumes/%s/update_comment.json\u0027"},{"line_number":239,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":240,"context_line":"                              {\u0027new_comment\u0027: kwargs.get(\u0027new_comment\u0027)}),"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"            # Get operations"},{"line_number":243,"context_line":"            \u0027list_volumes\u0027: (\u0027GET\u0027,"},{"line_number":244,"context_line":"                             \u0027/api/volumes.json?%s\u003dYES\u0027 % self.vol_type_str,"},{"line_number":245,"context_line":"                             {}),"},{"line_number":246,"context_line":"            \u0027get_volume\u0027: (\u0027GET\u0027,"},{"line_number":247,"context_line":"                           \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":248,"context_line":"                           {}),"},{"line_number":249,"context_line":"            \u0027get_volume_by_name\u0027: (\u0027GET\u0027,"},{"line_number":250,"context_line":"                                   \u0027/api/volumes.json?display_name\u003d%s\u0027"},{"line_number":251,"context_line":"                                   % kwargs.get(\u0027display_name\u0027),"},{"line_number":252,"context_line":"                                   {}),"},{"line_number":253,"context_line":"            \u0027get_pool\u0027: (\u0027GET\u0027,"},{"line_number":254,"context_line":"                         \u0027/api/pools/%s.json\u0027 % kwargs.get(\u0027pool_name\u0027),"},{"line_number":255,"context_line":"                         {}),"},{"line_number":256,"context_line":"            \u0027list_controllers\u0027: (\u0027GET\u0027,"},{"line_number":257,"context_line":"                                 \u0027/api/vcontrollers.json\u0027,"},{"line_number":258,"context_line":"                                 {}),"},{"line_number":259,"context_line":"            \u0027list_servers\u0027: (\u0027GET\u0027,"},{"line_number":260,"context_line":"                             \u0027/api/servers.json\u0027,"},{"line_number":261,"context_line":"                             {}),"},{"line_number":262,"context_line":"            \u0027list_vol_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":263,"context_line":"                                   \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":264,"context_line":"                                   % kwargs.get(\u0027cg_name\u0027),"},{"line_number":265,"context_line":"                                   {}),"},{"line_number":266,"context_line":"            \u0027list_vol_attachments\u0027: (\u0027GET\u0027,"},{"line_number":267,"context_line":"                                     \u0027/api/volumes/%s/servers.json\u0027"},{"line_number":268,"context_line":"                                     % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":269,"context_line":"                                     {}),"},{"line_number":270,"context_line":"            # Put operations"},{"line_number":271,"context_line":"            \u0027change_export_name\u0027: (\u0027PUT\u0027,"},{"line_number":272,"context_line":"                                   \u0027/api/volumes/%s/export_name.json\u0027"},{"line_number":273,"context_line":"                                   % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":274,"context_line":"                                   {\u0027exportname\u0027: kwargs.get(\u0027exportname\u0027)})}"},{"line_number":275,"context_line":"        try:"},{"line_number":276,"context_line":"            method, url, params \u003d vpsa_commands[cmd]"},{"line_number":277,"context_line":"            # Populate the metadata for the volume creation"}],"source_content_type":"text/x-python","patch_set":1,"id":"92ebec6c_e5d57514","line":274,"range":{"start_line":156,"start_character":1,"end_line":274,"end_character":77},"updated":"2021-02-08 17:52:10.000000000","message":"-1: This is super inefficient, we are creating the whole dict for every single command we send!\n\nWe must create this only once when `__init__` is called, and store it in an instance attribute (for example `vpsa_commands`) that can be used afterwards with `self.vpsa_commands`","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"0b8686cc94f299b2aa2f634e309c0a156dad89fe","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # Dictionary of applicable VPSA commands in the following format:"},{"line_number":155,"context_line":"        # \u0027command\u0027: (method, API_URL, {optional parameters})"},{"line_number":156,"context_line":"        vpsa_commands \u003d {"},{"line_number":157,"context_line":"            \u0027login\u0027: (\u0027POST\u0027,"},{"line_number":158,"context_line":"                      \u0027/api/users/login.json\u0027,"},{"line_number":159,"context_line":"                      {\u0027user\u0027: self.conf.zadara_user,"},{"line_number":160,"context_line":"                       \u0027password\u0027: self.conf.zadara_password}),"},{"line_number":161,"context_line":"            # Volume operations"},{"line_number":162,"context_line":"            \u0027create_volume\u0027: (\u0027POST\u0027,"},{"line_number":163,"context_line":"                              \u0027/api/volumes.json\u0027,"},{"line_number":164,"context_line":"                              {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":165,"context_line":"                               \u0027capacity\u0027: kwargs.get(\u0027size\u0027),"},{"line_number":166,"context_line":"                               \u0027pool\u0027: self.conf.zadara_vpsa_poolname,"},{"line_number":167,"context_line":"                               \u0027block\u0027: \u0027YES\u0027"},{"line_number":168,"context_line":"                               if self.vol_type_str \u003d\u003d \u0027showonlyblock\u0027"},{"line_number":169,"context_line":"                               else \u0027NO\u0027,"},{"line_number":170,"context_line":"                               \u0027thin\u0027: \u0027YES\u0027,"},{"line_number":171,"context_line":"                               \u0027crypt\u0027: \u0027YES\u0027"},{"line_number":172,"context_line":"                               if self.conf.zadara_vol_encrypt else \u0027NO\u0027,"},{"line_number":173,"context_line":"                               \u0027compress\u0027: \u0027YES\u0027"},{"line_number":174,"context_line":"                               if self.conf.zadara_gen3_vol_compress else \u0027NO\u0027,"},{"line_number":175,"context_line":"                               \u0027dedupe\u0027: \u0027YES\u0027"},{"line_number":176,"context_line":"                               if self.conf.zadara_gen3_vol_dedupe else \u0027NO\u0027,"},{"line_number":177,"context_line":"                               \u0027attachpolicies\u0027: \u0027NO\u0027"},{"line_number":178,"context_line":"                               if not self.conf.zadara_default_snap_policy"},{"line_number":179,"context_line":"                               else \u0027YES\u0027}),"},{"line_number":180,"context_line":"            \u0027delete_volume\u0027: (\u0027DELETE\u0027,"},{"line_number":181,"context_line":"                              \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":182,"context_line":"                              {\u0027force\u0027: \u0027YES\u0027}),"},{"line_number":183,"context_line":"            \u0027expand_volume\u0027: (\u0027POST\u0027,"},{"line_number":184,"context_line":"                              \u0027/api/volumes/%s/expand.json\u0027"},{"line_number":185,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":186,"context_line":"                              {\u0027capacity\u0027: kwargs.get(\u0027size\u0027)}),"},{"line_number":187,"context_line":"            \u0027rename_volume\u0027: (\u0027POST\u0027,"},{"line_number":188,"context_line":"                              \u0027/api/volumes/%s/rename.json\u0027"},{"line_number":189,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":190,"context_line":"                              {\u0027new_name\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":191,"context_line":"            # Snapshot operations"},{"line_number":192,"context_line":"            # Snapshot request is triggered for a single volume though the"},{"line_number":193,"context_line":"            # API call implies that snapshot is triggered for CG (legacy API)."},{"line_number":194,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":195,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":196,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":197,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":198,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"},{"line_number":199,"context_line":"                                \u0027/api/snapshots/%s.json\u0027"},{"line_number":200,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":201,"context_line":"                                {}),"},{"line_number":202,"context_line":"            \u0027rename_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":203,"context_line":"                                \u0027/api/snapshots/%s/rename.json\u0027"},{"line_number":204,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":205,"context_line":"                                {\u0027newname\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":206,"context_line":"            \u0027create_clone_from_snap\u0027: (\u0027POST\u0027,"},{"line_number":207,"context_line":"                                       \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":208,"context_line":"                                       % kwargs.get(\u0027cg_name\u0027),"},{"line_number":209,"context_line":"                                       {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":210,"context_line":"                                        \u0027snapshot\u0027: kwargs.get(\u0027snap_id\u0027)}),"},{"line_number":211,"context_line":"            \u0027create_clone\u0027: (\u0027POST\u0027,"},{"line_number":212,"context_line":"                             \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":213,"context_line":"                             % kwargs.get(\u0027cg_name\u0027),"},{"line_number":214,"context_line":"                             {\u0027name\u0027: kwargs.get(\u0027name\u0027)}),"},{"line_number":215,"context_line":"            # Server operations"},{"line_number":216,"context_line":"            \u0027create_server\u0027: (\u0027POST\u0027,"},{"line_number":217,"context_line":"                              \u0027/api/servers.json\u0027,"},{"line_number":218,"context_line":"                              {\u0027iqn\u0027: kwargs.get(\u0027iqn\u0027),"},{"line_number":219,"context_line":"                               \u0027iscsi\u0027: kwargs.get(\u0027iscsi_ip\u0027),"},{"line_number":220,"context_line":"                               \u0027display_name\u0027: kwargs.get(\u0027iqn\u0027)"},{"line_number":221,"context_line":"                               if kwargs.get(\u0027iqn\u0027)"},{"line_number":222,"context_line":"                               else kwargs.get(\u0027iscsi_ip\u0027)}),"},{"line_number":223,"context_line":"            # Attach/Detach operations"},{"line_number":224,"context_line":"            \u0027attach_volume\u0027: (\u0027POST\u0027,"},{"line_number":225,"context_line":"                              \u0027/api/servers/%s/volumes.json\u0027"},{"line_number":226,"context_line":"                              % kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":227,"context_line":"                              {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":228,"context_line":"                               \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),"},{"line_number":229,"context_line":"                               \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),"},{"line_number":230,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":231,"context_line":"            \u0027detach_volume\u0027: (\u0027POST\u0027,"},{"line_number":232,"context_line":"                              \u0027/api/volumes/%s/detach.json\u0027"},{"line_number":233,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":234,"context_line":"                              {\u0027server_name[]\u0027: kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":235,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":236,"context_line":"            # Update volume comment"},{"line_number":237,"context_line":"            \u0027update_volume\u0027: (\u0027POST\u0027,"},{"line_number":238,"context_line":"                              \u0027/api/volumes/%s/update_comment.json\u0027"},{"line_number":239,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":240,"context_line":"                              {\u0027new_comment\u0027: kwargs.get(\u0027new_comment\u0027)}),"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"            # Get operations"},{"line_number":243,"context_line":"            \u0027list_volumes\u0027: (\u0027GET\u0027,"},{"line_number":244,"context_line":"                             \u0027/api/volumes.json?%s\u003dYES\u0027 % self.vol_type_str,"},{"line_number":245,"context_line":"                             {}),"},{"line_number":246,"context_line":"            \u0027get_volume\u0027: (\u0027GET\u0027,"},{"line_number":247,"context_line":"                           \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":248,"context_line":"                           {}),"},{"line_number":249,"context_line":"            \u0027get_volume_by_name\u0027: (\u0027GET\u0027,"},{"line_number":250,"context_line":"                                   \u0027/api/volumes.json?display_name\u003d%s\u0027"},{"line_number":251,"context_line":"                                   % kwargs.get(\u0027display_name\u0027),"},{"line_number":252,"context_line":"                                   {}),"},{"line_number":253,"context_line":"            \u0027get_pool\u0027: (\u0027GET\u0027,"},{"line_number":254,"context_line":"                         \u0027/api/pools/%s.json\u0027 % kwargs.get(\u0027pool_name\u0027),"},{"line_number":255,"context_line":"                         {}),"},{"line_number":256,"context_line":"            \u0027list_controllers\u0027: (\u0027GET\u0027,"},{"line_number":257,"context_line":"                                 \u0027/api/vcontrollers.json\u0027,"},{"line_number":258,"context_line":"                                 {}),"},{"line_number":259,"context_line":"            \u0027list_servers\u0027: (\u0027GET\u0027,"},{"line_number":260,"context_line":"                             \u0027/api/servers.json\u0027,"},{"line_number":261,"context_line":"                             {}),"},{"line_number":262,"context_line":"            \u0027list_vol_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":263,"context_line":"                                   \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":264,"context_line":"                                   % kwargs.get(\u0027cg_name\u0027),"},{"line_number":265,"context_line":"                                   {}),"},{"line_number":266,"context_line":"            \u0027list_vol_attachments\u0027: (\u0027GET\u0027,"},{"line_number":267,"context_line":"                                     \u0027/api/volumes/%s/servers.json\u0027"},{"line_number":268,"context_line":"                                     % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":269,"context_line":"                                     {}),"},{"line_number":270,"context_line":"            # Put operations"},{"line_number":271,"context_line":"            \u0027change_export_name\u0027: (\u0027PUT\u0027,"},{"line_number":272,"context_line":"                                   \u0027/api/volumes/%s/export_name.json\u0027"},{"line_number":273,"context_line":"                                   % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":274,"context_line":"                                   {\u0027exportname\u0027: kwargs.get(\u0027exportname\u0027)})}"},{"line_number":275,"context_line":"        try:"},{"line_number":276,"context_line":"            method, url, params \u003d vpsa_commands[cmd]"},{"line_number":277,"context_line":"            # Populate the metadata for the volume creation"}],"source_content_type":"text/x-python","patch_set":1,"id":"68fec74e_c986f8bf","line":274,"range":{"start_line":156,"start_character":1,"end_line":274,"end_character":77},"in_reply_to":"3da65ff8_beaafc2f","updated":"2021-03-18 17:50:30.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # Dictionary of applicable VPSA commands in the following format:"},{"line_number":155,"context_line":"        # \u0027command\u0027: (method, API_URL, {optional parameters})"},{"line_number":156,"context_line":"        vpsa_commands \u003d {"},{"line_number":157,"context_line":"            \u0027login\u0027: (\u0027POST\u0027,"},{"line_number":158,"context_line":"                      \u0027/api/users/login.json\u0027,"},{"line_number":159,"context_line":"                      {\u0027user\u0027: self.conf.zadara_user,"},{"line_number":160,"context_line":"                       \u0027password\u0027: self.conf.zadara_password}),"},{"line_number":161,"context_line":"            # Volume operations"},{"line_number":162,"context_line":"            \u0027create_volume\u0027: (\u0027POST\u0027,"},{"line_number":163,"context_line":"                              \u0027/api/volumes.json\u0027,"},{"line_number":164,"context_line":"                              {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":165,"context_line":"                               \u0027capacity\u0027: kwargs.get(\u0027size\u0027),"},{"line_number":166,"context_line":"                               \u0027pool\u0027: self.conf.zadara_vpsa_poolname,"},{"line_number":167,"context_line":"                               \u0027block\u0027: \u0027YES\u0027"},{"line_number":168,"context_line":"                               if self.vol_type_str \u003d\u003d \u0027showonlyblock\u0027"},{"line_number":169,"context_line":"                               else \u0027NO\u0027,"},{"line_number":170,"context_line":"                               \u0027thin\u0027: \u0027YES\u0027,"},{"line_number":171,"context_line":"                               \u0027crypt\u0027: \u0027YES\u0027"},{"line_number":172,"context_line":"                               if self.conf.zadara_vol_encrypt else \u0027NO\u0027,"},{"line_number":173,"context_line":"                               \u0027compress\u0027: \u0027YES\u0027"},{"line_number":174,"context_line":"                               if self.conf.zadara_gen3_vol_compress else \u0027NO\u0027,"},{"line_number":175,"context_line":"                               \u0027dedupe\u0027: \u0027YES\u0027"},{"line_number":176,"context_line":"                               if self.conf.zadara_gen3_vol_dedupe else \u0027NO\u0027,"},{"line_number":177,"context_line":"                               \u0027attachpolicies\u0027: \u0027NO\u0027"},{"line_number":178,"context_line":"                               if not self.conf.zadara_default_snap_policy"},{"line_number":179,"context_line":"                               else \u0027YES\u0027}),"},{"line_number":180,"context_line":"            \u0027delete_volume\u0027: (\u0027DELETE\u0027,"},{"line_number":181,"context_line":"                              \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":182,"context_line":"                              {\u0027force\u0027: \u0027YES\u0027}),"},{"line_number":183,"context_line":"            \u0027expand_volume\u0027: (\u0027POST\u0027,"},{"line_number":184,"context_line":"                              \u0027/api/volumes/%s/expand.json\u0027"},{"line_number":185,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":186,"context_line":"                              {\u0027capacity\u0027: kwargs.get(\u0027size\u0027)}),"},{"line_number":187,"context_line":"            \u0027rename_volume\u0027: (\u0027POST\u0027,"},{"line_number":188,"context_line":"                              \u0027/api/volumes/%s/rename.json\u0027"},{"line_number":189,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":190,"context_line":"                              {\u0027new_name\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":191,"context_line":"            # Snapshot operations"},{"line_number":192,"context_line":"            # Snapshot request is triggered for a single volume though the"},{"line_number":193,"context_line":"            # API call implies that snapshot is triggered for CG (legacy API)."},{"line_number":194,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":195,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":196,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":197,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":198,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"},{"line_number":199,"context_line":"                                \u0027/api/snapshots/%s.json\u0027"},{"line_number":200,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":201,"context_line":"                                {}),"},{"line_number":202,"context_line":"            \u0027rename_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":203,"context_line":"                                \u0027/api/snapshots/%s/rename.json\u0027"},{"line_number":204,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":205,"context_line":"                                {\u0027newname\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":206,"context_line":"            \u0027create_clone_from_snap\u0027: (\u0027POST\u0027,"},{"line_number":207,"context_line":"                                       \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":208,"context_line":"                                       % kwargs.get(\u0027cg_name\u0027),"},{"line_number":209,"context_line":"                                       {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":210,"context_line":"                                        \u0027snapshot\u0027: kwargs.get(\u0027snap_id\u0027)}),"},{"line_number":211,"context_line":"            \u0027create_clone\u0027: (\u0027POST\u0027,"},{"line_number":212,"context_line":"                             \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":213,"context_line":"                             % kwargs.get(\u0027cg_name\u0027),"},{"line_number":214,"context_line":"                             {\u0027name\u0027: kwargs.get(\u0027name\u0027)}),"},{"line_number":215,"context_line":"            # Server operations"},{"line_number":216,"context_line":"            \u0027create_server\u0027: (\u0027POST\u0027,"},{"line_number":217,"context_line":"                              \u0027/api/servers.json\u0027,"},{"line_number":218,"context_line":"                              {\u0027iqn\u0027: kwargs.get(\u0027iqn\u0027),"},{"line_number":219,"context_line":"                               \u0027iscsi\u0027: kwargs.get(\u0027iscsi_ip\u0027),"},{"line_number":220,"context_line":"                               \u0027display_name\u0027: kwargs.get(\u0027iqn\u0027)"},{"line_number":221,"context_line":"                               if kwargs.get(\u0027iqn\u0027)"},{"line_number":222,"context_line":"                               else kwargs.get(\u0027iscsi_ip\u0027)}),"},{"line_number":223,"context_line":"            # Attach/Detach operations"},{"line_number":224,"context_line":"            \u0027attach_volume\u0027: (\u0027POST\u0027,"},{"line_number":225,"context_line":"                              \u0027/api/servers/%s/volumes.json\u0027"},{"line_number":226,"context_line":"                              % kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":227,"context_line":"                              {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":228,"context_line":"                               \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),"},{"line_number":229,"context_line":"                               \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),"},{"line_number":230,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":231,"context_line":"            \u0027detach_volume\u0027: (\u0027POST\u0027,"},{"line_number":232,"context_line":"                              \u0027/api/volumes/%s/detach.json\u0027"},{"line_number":233,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":234,"context_line":"                              {\u0027server_name[]\u0027: kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":235,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":236,"context_line":"            # Update volume comment"},{"line_number":237,"context_line":"            \u0027update_volume\u0027: (\u0027POST\u0027,"},{"line_number":238,"context_line":"                              \u0027/api/volumes/%s/update_comment.json\u0027"},{"line_number":239,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":240,"context_line":"                              {\u0027new_comment\u0027: kwargs.get(\u0027new_comment\u0027)}),"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"            # Get operations"},{"line_number":243,"context_line":"            \u0027list_volumes\u0027: (\u0027GET\u0027,"},{"line_number":244,"context_line":"                             \u0027/api/volumes.json?%s\u003dYES\u0027 % self.vol_type_str,"},{"line_number":245,"context_line":"                             {}),"},{"line_number":246,"context_line":"            \u0027get_volume\u0027: (\u0027GET\u0027,"},{"line_number":247,"context_line":"                           \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":248,"context_line":"                           {}),"},{"line_number":249,"context_line":"            \u0027get_volume_by_name\u0027: (\u0027GET\u0027,"},{"line_number":250,"context_line":"                                   \u0027/api/volumes.json?display_name\u003d%s\u0027"},{"line_number":251,"context_line":"                                   % kwargs.get(\u0027display_name\u0027),"},{"line_number":252,"context_line":"                                   {}),"},{"line_number":253,"context_line":"            \u0027get_pool\u0027: (\u0027GET\u0027,"},{"line_number":254,"context_line":"                         \u0027/api/pools/%s.json\u0027 % kwargs.get(\u0027pool_name\u0027),"},{"line_number":255,"context_line":"                         {}),"},{"line_number":256,"context_line":"            \u0027list_controllers\u0027: (\u0027GET\u0027,"},{"line_number":257,"context_line":"                                 \u0027/api/vcontrollers.json\u0027,"},{"line_number":258,"context_line":"                                 {}),"},{"line_number":259,"context_line":"            \u0027list_servers\u0027: (\u0027GET\u0027,"},{"line_number":260,"context_line":"                             \u0027/api/servers.json\u0027,"},{"line_number":261,"context_line":"                             {}),"},{"line_number":262,"context_line":"            \u0027list_vol_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":263,"context_line":"                                   \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":264,"context_line":"                                   % kwargs.get(\u0027cg_name\u0027),"},{"line_number":265,"context_line":"                                   {}),"},{"line_number":266,"context_line":"            \u0027list_vol_attachments\u0027: (\u0027GET\u0027,"},{"line_number":267,"context_line":"                                     \u0027/api/volumes/%s/servers.json\u0027"},{"line_number":268,"context_line":"                                     % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":269,"context_line":"                                     {}),"},{"line_number":270,"context_line":"            # Put operations"},{"line_number":271,"context_line":"            \u0027change_export_name\u0027: (\u0027PUT\u0027,"},{"line_number":272,"context_line":"                                   \u0027/api/volumes/%s/export_name.json\u0027"},{"line_number":273,"context_line":"                                   % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":274,"context_line":"                                   {\u0027exportname\u0027: kwargs.get(\u0027exportname\u0027)})}"},{"line_number":275,"context_line":"        try:"},{"line_number":276,"context_line":"            method, url, params \u003d vpsa_commands[cmd]"},{"line_number":277,"context_line":"            # Populate the metadata for the volume creation"}],"source_content_type":"text/x-python","patch_set":1,"id":"3da65ff8_beaafc2f","line":274,"range":{"start_line":156,"start_character":1,"end_line":274,"end_character":77},"in_reply_to":"89e982c4_511a7f42","updated":"2021-03-17 15:17:04.000000000","message":"I still believe creating this whole dict for every command when we only care about 1 element is not right.\n\nThere are multiple ways to do it:\n\nWe could add a class attribute with dict of lambdas:\n\n vpsa_commands \u003d {\n     \u0027attach_volume\u0027: lambda kwargs: (\n         \u0027POST\u0027,\n         \u0027/api/servers/%s/volumes.json\u0027 % kwargs.get(\u0027vpsa_srv\u0027),\n         {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),\n          \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),\n          \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),\n          \u0027force\u0027: \u0027YES\u0027}),\n\n     . . .\n }\n\nAnd then here on L243 we would just use it to construct the data we care about:\n\n method, url, params \u003d vpsa_commands[cmd](kwargs)\n\n\nOr we could create methods called \"_cmd_\u003ccmd-name\u003e\" for example:\n\n @staticmethod\n def _cmd_attach_volume(kwargs):\n     return (\n         \u0027POST\u0027,\n         \u0027/api/servers/%s/volumes.json\u0027 % kwargs.get(\u0027vpsa_srv\u0027),\n         {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),\n          \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),\n          \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),\n          \u0027force\u0027: \u0027YES\u0027}\n     )\n\nAnd then here on L243 we would just call the method:\n\n method, url, params \u003d getattr(self, \u0027_cmd_\u0027 + cmd)(kwargs)","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":true,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        # Dictionary of applicable VPSA commands in the following format:"},{"line_number":155,"context_line":"        # \u0027command\u0027: (method, API_URL, {optional parameters})"},{"line_number":156,"context_line":"        vpsa_commands \u003d {"},{"line_number":157,"context_line":"            \u0027login\u0027: (\u0027POST\u0027,"},{"line_number":158,"context_line":"                      \u0027/api/users/login.json\u0027,"},{"line_number":159,"context_line":"                      {\u0027user\u0027: self.conf.zadara_user,"},{"line_number":160,"context_line":"                       \u0027password\u0027: self.conf.zadara_password}),"},{"line_number":161,"context_line":"            # Volume operations"},{"line_number":162,"context_line":"            \u0027create_volume\u0027: (\u0027POST\u0027,"},{"line_number":163,"context_line":"                              \u0027/api/volumes.json\u0027,"},{"line_number":164,"context_line":"                              {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":165,"context_line":"                               \u0027capacity\u0027: kwargs.get(\u0027size\u0027),"},{"line_number":166,"context_line":"                               \u0027pool\u0027: self.conf.zadara_vpsa_poolname,"},{"line_number":167,"context_line":"                               \u0027block\u0027: \u0027YES\u0027"},{"line_number":168,"context_line":"                               if self.vol_type_str \u003d\u003d \u0027showonlyblock\u0027"},{"line_number":169,"context_line":"                               else \u0027NO\u0027,"},{"line_number":170,"context_line":"                               \u0027thin\u0027: \u0027YES\u0027,"},{"line_number":171,"context_line":"                               \u0027crypt\u0027: \u0027YES\u0027"},{"line_number":172,"context_line":"                               if self.conf.zadara_vol_encrypt else \u0027NO\u0027,"},{"line_number":173,"context_line":"                               \u0027compress\u0027: \u0027YES\u0027"},{"line_number":174,"context_line":"                               if self.conf.zadara_gen3_vol_compress else \u0027NO\u0027,"},{"line_number":175,"context_line":"                               \u0027dedupe\u0027: \u0027YES\u0027"},{"line_number":176,"context_line":"                               if self.conf.zadara_gen3_vol_dedupe else \u0027NO\u0027,"},{"line_number":177,"context_line":"                               \u0027attachpolicies\u0027: \u0027NO\u0027"},{"line_number":178,"context_line":"                               if not self.conf.zadara_default_snap_policy"},{"line_number":179,"context_line":"                               else \u0027YES\u0027}),"},{"line_number":180,"context_line":"            \u0027delete_volume\u0027: (\u0027DELETE\u0027,"},{"line_number":181,"context_line":"                              \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":182,"context_line":"                              {\u0027force\u0027: \u0027YES\u0027}),"},{"line_number":183,"context_line":"            \u0027expand_volume\u0027: (\u0027POST\u0027,"},{"line_number":184,"context_line":"                              \u0027/api/volumes/%s/expand.json\u0027"},{"line_number":185,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":186,"context_line":"                              {\u0027capacity\u0027: kwargs.get(\u0027size\u0027)}),"},{"line_number":187,"context_line":"            \u0027rename_volume\u0027: (\u0027POST\u0027,"},{"line_number":188,"context_line":"                              \u0027/api/volumes/%s/rename.json\u0027"},{"line_number":189,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":190,"context_line":"                              {\u0027new_name\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":191,"context_line":"            # Snapshot operations"},{"line_number":192,"context_line":"            # Snapshot request is triggered for a single volume though the"},{"line_number":193,"context_line":"            # API call implies that snapshot is triggered for CG (legacy API)."},{"line_number":194,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":195,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":196,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":197,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":198,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"},{"line_number":199,"context_line":"                                \u0027/api/snapshots/%s.json\u0027"},{"line_number":200,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":201,"context_line":"                                {}),"},{"line_number":202,"context_line":"            \u0027rename_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":203,"context_line":"                                \u0027/api/snapshots/%s/rename.json\u0027"},{"line_number":204,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":205,"context_line":"                                {\u0027newname\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":206,"context_line":"            \u0027create_clone_from_snap\u0027: (\u0027POST\u0027,"},{"line_number":207,"context_line":"                                       \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":208,"context_line":"                                       % kwargs.get(\u0027cg_name\u0027),"},{"line_number":209,"context_line":"                                       {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":210,"context_line":"                                        \u0027snapshot\u0027: kwargs.get(\u0027snap_id\u0027)}),"},{"line_number":211,"context_line":"            \u0027create_clone\u0027: (\u0027POST\u0027,"},{"line_number":212,"context_line":"                             \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":213,"context_line":"                             % kwargs.get(\u0027cg_name\u0027),"},{"line_number":214,"context_line":"                             {\u0027name\u0027: kwargs.get(\u0027name\u0027)}),"},{"line_number":215,"context_line":"            # Server operations"},{"line_number":216,"context_line":"            \u0027create_server\u0027: (\u0027POST\u0027,"},{"line_number":217,"context_line":"                              \u0027/api/servers.json\u0027,"},{"line_number":218,"context_line":"                              {\u0027iqn\u0027: kwargs.get(\u0027iqn\u0027),"},{"line_number":219,"context_line":"                               \u0027iscsi\u0027: kwargs.get(\u0027iscsi_ip\u0027),"},{"line_number":220,"context_line":"                               \u0027display_name\u0027: kwargs.get(\u0027iqn\u0027)"},{"line_number":221,"context_line":"                               if kwargs.get(\u0027iqn\u0027)"},{"line_number":222,"context_line":"                               else kwargs.get(\u0027iscsi_ip\u0027)}),"},{"line_number":223,"context_line":"            # Attach/Detach operations"},{"line_number":224,"context_line":"            \u0027attach_volume\u0027: (\u0027POST\u0027,"},{"line_number":225,"context_line":"                              \u0027/api/servers/%s/volumes.json\u0027"},{"line_number":226,"context_line":"                              % kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":227,"context_line":"                              {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":228,"context_line":"                               \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),"},{"line_number":229,"context_line":"                               \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),"},{"line_number":230,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":231,"context_line":"            \u0027detach_volume\u0027: (\u0027POST\u0027,"},{"line_number":232,"context_line":"                              \u0027/api/volumes/%s/detach.json\u0027"},{"line_number":233,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":234,"context_line":"                              {\u0027server_name[]\u0027: kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":235,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":236,"context_line":"            # Update volume comment"},{"line_number":237,"context_line":"            \u0027update_volume\u0027: (\u0027POST\u0027,"},{"line_number":238,"context_line":"                              \u0027/api/volumes/%s/update_comment.json\u0027"},{"line_number":239,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":240,"context_line":"                              {\u0027new_comment\u0027: kwargs.get(\u0027new_comment\u0027)}),"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"            # Get operations"},{"line_number":243,"context_line":"            \u0027list_volumes\u0027: (\u0027GET\u0027,"},{"line_number":244,"context_line":"                             \u0027/api/volumes.json?%s\u003dYES\u0027 % self.vol_type_str,"},{"line_number":245,"context_line":"                             {}),"},{"line_number":246,"context_line":"            \u0027get_volume\u0027: (\u0027GET\u0027,"},{"line_number":247,"context_line":"                           \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":248,"context_line":"                           {}),"},{"line_number":249,"context_line":"            \u0027get_volume_by_name\u0027: (\u0027GET\u0027,"},{"line_number":250,"context_line":"                                   \u0027/api/volumes.json?display_name\u003d%s\u0027"},{"line_number":251,"context_line":"                                   % kwargs.get(\u0027display_name\u0027),"},{"line_number":252,"context_line":"                                   {}),"},{"line_number":253,"context_line":"            \u0027get_pool\u0027: (\u0027GET\u0027,"},{"line_number":254,"context_line":"                         \u0027/api/pools/%s.json\u0027 % kwargs.get(\u0027pool_name\u0027),"},{"line_number":255,"context_line":"                         {}),"},{"line_number":256,"context_line":"            \u0027list_controllers\u0027: (\u0027GET\u0027,"},{"line_number":257,"context_line":"                                 \u0027/api/vcontrollers.json\u0027,"},{"line_number":258,"context_line":"                                 {}),"},{"line_number":259,"context_line":"            \u0027list_servers\u0027: (\u0027GET\u0027,"},{"line_number":260,"context_line":"                             \u0027/api/servers.json\u0027,"},{"line_number":261,"context_line":"                             {}),"},{"line_number":262,"context_line":"            \u0027list_vol_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":263,"context_line":"                                   \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":264,"context_line":"                                   % kwargs.get(\u0027cg_name\u0027),"},{"line_number":265,"context_line":"                                   {}),"},{"line_number":266,"context_line":"            \u0027list_vol_attachments\u0027: (\u0027GET\u0027,"},{"line_number":267,"context_line":"                                     \u0027/api/volumes/%s/servers.json\u0027"},{"line_number":268,"context_line":"                                     % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":269,"context_line":"                                     {}),"},{"line_number":270,"context_line":"            # Put operations"},{"line_number":271,"context_line":"            \u0027change_export_name\u0027: (\u0027PUT\u0027,"},{"line_number":272,"context_line":"                                   \u0027/api/volumes/%s/export_name.json\u0027"},{"line_number":273,"context_line":"                                   % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":274,"context_line":"                                   {\u0027exportname\u0027: kwargs.get(\u0027exportname\u0027)})}"},{"line_number":275,"context_line":"        try:"},{"line_number":276,"context_line":"            method, url, params \u003d vpsa_commands[cmd]"},{"line_number":277,"context_line":"            # Populate the metadata for the volume creation"}],"source_content_type":"text/x-python","patch_set":1,"id":"89e982c4_511a7f42","line":274,"range":{"start_line":156,"start_character":1,"end_line":274,"end_character":77},"in_reply_to":"92ebec6c_e5d57514","updated":"2021-02-12 17:29:04.000000000","message":"The commands require variable arguments, making it unable to store as an instance attribute.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"afbdeabf40c9330a987363872acf5354d9029967","unresolved":true,"context_lines":[{"line_number":327,"context_line":"        if status !\u003d 0:"},{"line_number":328,"context_line":"            raise exception.FailedCmdWithDump(status\u003dstatus, data\u003ddata)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        if method in [\u0027POST\u0027, \u0027DELETE\u0027]:"},{"line_number":331,"context_line":"            LOG.debug(\u0027Operation completed with status code %(status)s\u0027,"},{"line_number":332,"context_line":"                      {\u0027status\u0027: status})"},{"line_number":333,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":10,"id":"8a5cad6c_7298a20d","line":330,"updated":"2021-03-11 02:58:49.000000000","message":"You added PUT at line 261, maybe it should be added here also?  (You don\u0027t have to, I\u0027m just asking in case you missed it.)","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        if status !\u003d 0:"},{"line_number":328,"context_line":"            raise exception.FailedCmdWithDump(status\u003dstatus, data\u003ddata)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        if method in [\u0027POST\u0027, \u0027DELETE\u0027]:"},{"line_number":331,"context_line":"            LOG.debug(\u0027Operation completed with status code %(status)s\u0027,"},{"line_number":332,"context_line":"                      {\u0027status\u0027: status})"},{"line_number":333,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":10,"id":"3997bd1c_e4ad3580","line":330,"in_reply_to":"22c2d90d_8df8b999","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"f55a5f9c48a70065f5a9bcd0bb87404400f32bef","unresolved":true,"context_lines":[{"line_number":327,"context_line":"        if status !\u003d 0:"},{"line_number":328,"context_line":"            raise exception.FailedCmdWithDump(status\u003dstatus, data\u003ddata)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        if method in [\u0027POST\u0027, \u0027DELETE\u0027]:"},{"line_number":331,"context_line":"            LOG.debug(\u0027Operation completed with status code %(status)s\u0027,"},{"line_number":332,"context_line":"                      {\u0027status\u0027: status})"},{"line_number":333,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":10,"id":"22c2d90d_8df8b999","line":330,"in_reply_to":"8a5cad6c_7298a20d","updated":"2021-03-14 17:23:30.000000000","message":"You are right. This is missed while adding subsequent changes.\nCan be logged for each method.","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        # Dictionary of applicable VPSA commands in the following format:"},{"line_number":123,"context_line":"        # \u0027command\u0027: (method, API_URL, {optional parameters})"},{"line_number":124,"context_line":"        vpsa_commands \u003d {"},{"line_number":125,"context_line":"            # Volume operations"},{"line_number":126,"context_line":"            \u0027create_volume\u0027: (\u0027POST\u0027,"},{"line_number":127,"context_line":"                              \u0027/api/volumes.json\u0027,"},{"line_number":128,"context_line":"                              {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":129,"context_line":"                               \u0027capacity\u0027: kwargs.get(\u0027size\u0027),"},{"line_number":130,"context_line":"                               \u0027pool\u0027: self.conf.zadara_vpsa_poolname,"},{"line_number":131,"context_line":"                               \u0027block\u0027: \u0027YES\u0027"},{"line_number":132,"context_line":"                               if self.vol_type_str \u003d\u003d \u0027showonlyblock\u0027"},{"line_number":133,"context_line":"                               else \u0027NO\u0027,"},{"line_number":134,"context_line":"                               \u0027thin\u0027: \u0027YES\u0027,"},{"line_number":135,"context_line":"                               \u0027crypt\u0027: \u0027YES\u0027"},{"line_number":136,"context_line":"                               if self.conf.zadara_vol_encrypt else \u0027NO\u0027,"},{"line_number":137,"context_line":"                               \u0027compress\u0027: \u0027YES\u0027"},{"line_number":138,"context_line":"                               if self.conf.zadara_gen3_vol_compress else \u0027NO\u0027,"},{"line_number":139,"context_line":"                               \u0027dedupe\u0027: \u0027YES\u0027"},{"line_number":140,"context_line":"                               if self.conf.zadara_gen3_vol_dedupe else \u0027NO\u0027,"},{"line_number":141,"context_line":"                               \u0027attachpolicies\u0027: \u0027NO\u0027"},{"line_number":142,"context_line":"                               if not self.conf.zadara_default_snap_policy"},{"line_number":143,"context_line":"                               else \u0027YES\u0027}),"},{"line_number":144,"context_line":"            \u0027delete_volume\u0027: (\u0027DELETE\u0027,"},{"line_number":145,"context_line":"                              \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":146,"context_line":"                              {\u0027force\u0027: \u0027YES\u0027}),"},{"line_number":147,"context_line":"            \u0027expand_volume\u0027: (\u0027POST\u0027,"},{"line_number":148,"context_line":"                              \u0027/api/volumes/%s/expand.json\u0027"},{"line_number":149,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":150,"context_line":"                              {\u0027capacity\u0027: kwargs.get(\u0027size\u0027)}),"},{"line_number":151,"context_line":"            \u0027rename_volume\u0027: (\u0027POST\u0027,"},{"line_number":152,"context_line":"                              \u0027/api/volumes/%s/rename.json\u0027"},{"line_number":153,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":154,"context_line":"                              {\u0027new_name\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":155,"context_line":"            # Snapshot operations"},{"line_number":156,"context_line":"            # Snapshot request is triggered for a single volume though the"},{"line_number":157,"context_line":"            # API call implies that snapshot is triggered for CG (legacy API)."},{"line_number":158,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":159,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":160,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":161,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":162,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"},{"line_number":163,"context_line":"                                \u0027/api/snapshots/%s.json\u0027"},{"line_number":164,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":165,"context_line":"                                {}),"},{"line_number":166,"context_line":"            \u0027rename_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":167,"context_line":"                                \u0027/api/snapshots/%s/rename.json\u0027"},{"line_number":168,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":169,"context_line":"                                {\u0027newname\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":170,"context_line":"            \u0027create_clone_from_snap\u0027: (\u0027POST\u0027,"},{"line_number":171,"context_line":"                                       \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":172,"context_line":"                                       % kwargs.get(\u0027cg_name\u0027),"},{"line_number":173,"context_line":"                                       {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":174,"context_line":"                                        \u0027snapshot\u0027: kwargs.get(\u0027snap_id\u0027)}),"},{"line_number":175,"context_line":"            \u0027create_clone\u0027: (\u0027POST\u0027,"},{"line_number":176,"context_line":"                             \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":177,"context_line":"                             % kwargs.get(\u0027cg_name\u0027),"},{"line_number":178,"context_line":"                             {\u0027name\u0027: kwargs.get(\u0027name\u0027)}),"},{"line_number":179,"context_line":"            # Server operations"},{"line_number":180,"context_line":"            \u0027create_server\u0027: (\u0027POST\u0027,"},{"line_number":181,"context_line":"                              \u0027/api/servers.json\u0027,"},{"line_number":182,"context_line":"                              {\u0027iqn\u0027: kwargs.get(\u0027iqn\u0027),"},{"line_number":183,"context_line":"                               \u0027iscsi\u0027: kwargs.get(\u0027iscsi_ip\u0027),"},{"line_number":184,"context_line":"                               \u0027display_name\u0027: kwargs.get(\u0027iqn\u0027)"},{"line_number":185,"context_line":"                               if kwargs.get(\u0027iqn\u0027)"},{"line_number":186,"context_line":"                               else kwargs.get(\u0027iscsi_ip\u0027)}),"},{"line_number":187,"context_line":"            # Attach/Detach operations"},{"line_number":188,"context_line":"            \u0027attach_volume\u0027: (\u0027POST\u0027,"},{"line_number":189,"context_line":"                              \u0027/api/servers/%s/volumes.json\u0027"},{"line_number":190,"context_line":"                              % kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":191,"context_line":"                              {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":192,"context_line":"                               \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),"},{"line_number":193,"context_line":"                               \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),"},{"line_number":194,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":195,"context_line":"            \u0027detach_volume\u0027: (\u0027POST\u0027,"},{"line_number":196,"context_line":"                              \u0027/api/volumes/%s/detach.json\u0027"},{"line_number":197,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":198,"context_line":"                              {\u0027server_name[]\u0027: kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":199,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":200,"context_line":"            # Update volume comment"},{"line_number":201,"context_line":"            \u0027update_volume\u0027: (\u0027POST\u0027,"},{"line_number":202,"context_line":"                              \u0027/api/volumes/%s/update_comment.json\u0027"},{"line_number":203,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":204,"context_line":"                              {\u0027new_comment\u0027: kwargs.get(\u0027new_comment\u0027)}),"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"            # Get operations"},{"line_number":207,"context_line":"            \u0027list_volumes\u0027: (\u0027GET\u0027,"},{"line_number":208,"context_line":"                             \u0027/api/volumes.json?%s\u003dYES\u0027 % self.vol_type_str,"},{"line_number":209,"context_line":"                             {}),"},{"line_number":210,"context_line":"            \u0027get_volume\u0027: (\u0027GET\u0027,"},{"line_number":211,"context_line":"                           \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":212,"context_line":"                           {}),"},{"line_number":213,"context_line":"            \u0027get_volume_by_name\u0027: (\u0027GET\u0027,"},{"line_number":214,"context_line":"                                   \u0027/api/volumes.json?display_name\u003d%s\u0027"},{"line_number":215,"context_line":"                                   % kwargs.get(\u0027display_name\u0027),"},{"line_number":216,"context_line":"                                   {}),"},{"line_number":217,"context_line":"            \u0027get_pool\u0027: (\u0027GET\u0027,"},{"line_number":218,"context_line":"                         \u0027/api/pools/%s.json\u0027 % kwargs.get(\u0027pool_name\u0027),"},{"line_number":219,"context_line":"                         {}),"},{"line_number":220,"context_line":"            \u0027list_controllers\u0027: (\u0027GET\u0027,"},{"line_number":221,"context_line":"                                 \u0027/api/vcontrollers.json\u0027,"},{"line_number":222,"context_line":"                                 {}),"},{"line_number":223,"context_line":"            \u0027list_servers\u0027: (\u0027GET\u0027,"},{"line_number":224,"context_line":"                             \u0027/api/servers.json\u0027,"},{"line_number":225,"context_line":"                             {}),"},{"line_number":226,"context_line":"            \u0027list_vol_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":227,"context_line":"                                   \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":228,"context_line":"                                   % kwargs.get(\u0027cg_name\u0027),"},{"line_number":229,"context_line":"                                   {}),"},{"line_number":230,"context_line":"            \u0027list_vol_attachments\u0027: (\u0027GET\u0027,"},{"line_number":231,"context_line":"                                     \u0027/api/volumes/%s/servers.json\u0027"},{"line_number":232,"context_line":"                                     % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":233,"context_line":"                                     {}),"},{"line_number":234,"context_line":"            \u0027list_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":235,"context_line":"                               \u0027/api/snapshots.json\u0027,"},{"line_number":236,"context_line":"                               {}),"},{"line_number":237,"context_line":"            # Put operations"},{"line_number":238,"context_line":"            \u0027change_export_name\u0027: (\u0027PUT\u0027,"},{"line_number":239,"context_line":"                                   \u0027/api/volumes/%s/export_name.json\u0027"},{"line_number":240,"context_line":"                                   % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":241,"context_line":"                                   {\u0027exportname\u0027: kwargs.get(\u0027exportname\u0027)})}"},{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            method, url, params \u003d vpsa_commands[cmd]"},{"line_number":244,"context_line":"            # Populate the metadata for the volume creation"}],"source_content_type":"text/x-python","patch_set":14,"id":"72bc25e2_8f057c0c","line":241,"range":{"start_line":124,"start_character":0,"end_line":241,"end_character":77},"updated":"2021-03-17 15:17:04.000000000","message":"I still believe creating this whole dict for every command when we only care about 1 element is not right.\n\nThere are multiple ways to do it:\n\nWe could add a class attribute with dict of lambdas:\n\n vpsa_commands \u003d {\n     \u0027attach_volume\u0027: lambda kwargs: (\n         \u0027POST\u0027,\n         \u0027/api/servers/%s/volumes.json\u0027 % kwargs.get(\u0027vpsa_srv\u0027),\n         {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),\n          \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),\n          \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),\n          \u0027force\u0027: \u0027YES\u0027}),\n\n     . . .\n }\n\nAnd then here on L243 we would just use it to construct the data we care about:\n\n method, url, params \u003d vpsa_commands[cmd](kwargs)\n\n\nOr we could create methods called \"_cmd_\u003ccmd-name\u003e\" for example:\n\n @staticmethod\n def _cmd_attach_volume(kwargs):\n     return (\n         \u0027POST\u0027,\n         \u0027/api/servers/%s/volumes.json\u0027 % kwargs.get(\u0027vpsa_srv\u0027),\n         {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),\n          \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),\n          \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),\n          \u0027force\u0027: \u0027YES\u0027}\n     )\n\nAnd then here on L243 we would just call the method:\n\n method, url, params \u003d getattr(self, \u0027_cmd_\u0027 + cmd)(kwargs)","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e24b2f2be5eb3d233b35086f5e6127717f469271","unresolved":true,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        # Dictionary of applicable VPSA commands in the following format:"},{"line_number":123,"context_line":"        # \u0027command\u0027: (method, API_URL, {optional parameters})"},{"line_number":124,"context_line":"        vpsa_commands \u003d {"},{"line_number":125,"context_line":"            # Volume operations"},{"line_number":126,"context_line":"            \u0027create_volume\u0027: (\u0027POST\u0027,"},{"line_number":127,"context_line":"                              \u0027/api/volumes.json\u0027,"},{"line_number":128,"context_line":"                              {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":129,"context_line":"                               \u0027capacity\u0027: kwargs.get(\u0027size\u0027),"},{"line_number":130,"context_line":"                               \u0027pool\u0027: self.conf.zadara_vpsa_poolname,"},{"line_number":131,"context_line":"                               \u0027block\u0027: \u0027YES\u0027"},{"line_number":132,"context_line":"                               if self.vol_type_str \u003d\u003d \u0027showonlyblock\u0027"},{"line_number":133,"context_line":"                               else \u0027NO\u0027,"},{"line_number":134,"context_line":"                               \u0027thin\u0027: \u0027YES\u0027,"},{"line_number":135,"context_line":"                               \u0027crypt\u0027: \u0027YES\u0027"},{"line_number":136,"context_line":"                               if self.conf.zadara_vol_encrypt else \u0027NO\u0027,"},{"line_number":137,"context_line":"                               \u0027compress\u0027: \u0027YES\u0027"},{"line_number":138,"context_line":"                               if self.conf.zadara_gen3_vol_compress else \u0027NO\u0027,"},{"line_number":139,"context_line":"                               \u0027dedupe\u0027: \u0027YES\u0027"},{"line_number":140,"context_line":"                               if self.conf.zadara_gen3_vol_dedupe else \u0027NO\u0027,"},{"line_number":141,"context_line":"                               \u0027attachpolicies\u0027: \u0027NO\u0027"},{"line_number":142,"context_line":"                               if not self.conf.zadara_default_snap_policy"},{"line_number":143,"context_line":"                               else \u0027YES\u0027}),"},{"line_number":144,"context_line":"            \u0027delete_volume\u0027: (\u0027DELETE\u0027,"},{"line_number":145,"context_line":"                              \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":146,"context_line":"                              {\u0027force\u0027: \u0027YES\u0027}),"},{"line_number":147,"context_line":"            \u0027expand_volume\u0027: (\u0027POST\u0027,"},{"line_number":148,"context_line":"                              \u0027/api/volumes/%s/expand.json\u0027"},{"line_number":149,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":150,"context_line":"                              {\u0027capacity\u0027: kwargs.get(\u0027size\u0027)}),"},{"line_number":151,"context_line":"            \u0027rename_volume\u0027: (\u0027POST\u0027,"},{"line_number":152,"context_line":"                              \u0027/api/volumes/%s/rename.json\u0027"},{"line_number":153,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":154,"context_line":"                              {\u0027new_name\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":155,"context_line":"            # Snapshot operations"},{"line_number":156,"context_line":"            # Snapshot request is triggered for a single volume though the"},{"line_number":157,"context_line":"            # API call implies that snapshot is triggered for CG (legacy API)."},{"line_number":158,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":159,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":160,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":161,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":162,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"},{"line_number":163,"context_line":"                                \u0027/api/snapshots/%s.json\u0027"},{"line_number":164,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":165,"context_line":"                                {}),"},{"line_number":166,"context_line":"            \u0027rename_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":167,"context_line":"                                \u0027/api/snapshots/%s/rename.json\u0027"},{"line_number":168,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":169,"context_line":"                                {\u0027newname\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":170,"context_line":"            \u0027create_clone_from_snap\u0027: (\u0027POST\u0027,"},{"line_number":171,"context_line":"                                       \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":172,"context_line":"                                       % kwargs.get(\u0027cg_name\u0027),"},{"line_number":173,"context_line":"                                       {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":174,"context_line":"                                        \u0027snapshot\u0027: kwargs.get(\u0027snap_id\u0027)}),"},{"line_number":175,"context_line":"            \u0027create_clone\u0027: (\u0027POST\u0027,"},{"line_number":176,"context_line":"                             \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":177,"context_line":"                             % kwargs.get(\u0027cg_name\u0027),"},{"line_number":178,"context_line":"                             {\u0027name\u0027: kwargs.get(\u0027name\u0027)}),"},{"line_number":179,"context_line":"            # Server operations"},{"line_number":180,"context_line":"            \u0027create_server\u0027: (\u0027POST\u0027,"},{"line_number":181,"context_line":"                              \u0027/api/servers.json\u0027,"},{"line_number":182,"context_line":"                              {\u0027iqn\u0027: kwargs.get(\u0027iqn\u0027),"},{"line_number":183,"context_line":"                               \u0027iscsi\u0027: kwargs.get(\u0027iscsi_ip\u0027),"},{"line_number":184,"context_line":"                               \u0027display_name\u0027: kwargs.get(\u0027iqn\u0027)"},{"line_number":185,"context_line":"                               if kwargs.get(\u0027iqn\u0027)"},{"line_number":186,"context_line":"                               else kwargs.get(\u0027iscsi_ip\u0027)}),"},{"line_number":187,"context_line":"            # Attach/Detach operations"},{"line_number":188,"context_line":"            \u0027attach_volume\u0027: (\u0027POST\u0027,"},{"line_number":189,"context_line":"                              \u0027/api/servers/%s/volumes.json\u0027"},{"line_number":190,"context_line":"                              % kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":191,"context_line":"                              {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":192,"context_line":"                               \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),"},{"line_number":193,"context_line":"                               \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),"},{"line_number":194,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":195,"context_line":"            \u0027detach_volume\u0027: (\u0027POST\u0027,"},{"line_number":196,"context_line":"                              \u0027/api/volumes/%s/detach.json\u0027"},{"line_number":197,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":198,"context_line":"                              {\u0027server_name[]\u0027: kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":199,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":200,"context_line":"            # Update volume comment"},{"line_number":201,"context_line":"            \u0027update_volume\u0027: (\u0027POST\u0027,"},{"line_number":202,"context_line":"                              \u0027/api/volumes/%s/update_comment.json\u0027"},{"line_number":203,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":204,"context_line":"                              {\u0027new_comment\u0027: kwargs.get(\u0027new_comment\u0027)}),"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"            # Get operations"},{"line_number":207,"context_line":"            \u0027list_volumes\u0027: (\u0027GET\u0027,"},{"line_number":208,"context_line":"                             \u0027/api/volumes.json?%s\u003dYES\u0027 % self.vol_type_str,"},{"line_number":209,"context_line":"                             {}),"},{"line_number":210,"context_line":"            \u0027get_volume\u0027: (\u0027GET\u0027,"},{"line_number":211,"context_line":"                           \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":212,"context_line":"                           {}),"},{"line_number":213,"context_line":"            \u0027get_volume_by_name\u0027: (\u0027GET\u0027,"},{"line_number":214,"context_line":"                                   \u0027/api/volumes.json?display_name\u003d%s\u0027"},{"line_number":215,"context_line":"                                   % kwargs.get(\u0027display_name\u0027),"},{"line_number":216,"context_line":"                                   {}),"},{"line_number":217,"context_line":"            \u0027get_pool\u0027: (\u0027GET\u0027,"},{"line_number":218,"context_line":"                         \u0027/api/pools/%s.json\u0027 % kwargs.get(\u0027pool_name\u0027),"},{"line_number":219,"context_line":"                         {}),"},{"line_number":220,"context_line":"            \u0027list_controllers\u0027: (\u0027GET\u0027,"},{"line_number":221,"context_line":"                                 \u0027/api/vcontrollers.json\u0027,"},{"line_number":222,"context_line":"                                 {}),"},{"line_number":223,"context_line":"            \u0027list_servers\u0027: (\u0027GET\u0027,"},{"line_number":224,"context_line":"                             \u0027/api/servers.json\u0027,"},{"line_number":225,"context_line":"                             {}),"},{"line_number":226,"context_line":"            \u0027list_vol_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":227,"context_line":"                                   \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":228,"context_line":"                                   % kwargs.get(\u0027cg_name\u0027),"},{"line_number":229,"context_line":"                                   {}),"},{"line_number":230,"context_line":"            \u0027list_vol_attachments\u0027: (\u0027GET\u0027,"},{"line_number":231,"context_line":"                                     \u0027/api/volumes/%s/servers.json\u0027"},{"line_number":232,"context_line":"                                     % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":233,"context_line":"                                     {}),"},{"line_number":234,"context_line":"            \u0027list_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":235,"context_line":"                               \u0027/api/snapshots.json\u0027,"},{"line_number":236,"context_line":"                               {}),"},{"line_number":237,"context_line":"            # Put operations"},{"line_number":238,"context_line":"            \u0027change_export_name\u0027: (\u0027PUT\u0027,"},{"line_number":239,"context_line":"                                   \u0027/api/volumes/%s/export_name.json\u0027"},{"line_number":240,"context_line":"                                   % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":241,"context_line":"                                   {\u0027exportname\u0027: kwargs.get(\u0027exportname\u0027)})}"},{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            method, url, params \u003d vpsa_commands[cmd]"},{"line_number":244,"context_line":"            # Populate the metadata for the volume creation"}],"source_content_type":"text/x-python","patch_set":14,"id":"79fd54b6_bd896b15","line":241,"range":{"start_line":124,"start_character":0,"end_line":241,"end_character":77},"in_reply_to":"72bc25e2_8f057c0c","updated":"2021-03-17 22:17:10.000000000","message":"I agree with Gorka that the current code is a super-inefficient way to do this.  Most drivers follow his second suggestion (a bunch of specific _cmd_\u003cname\u003e() functions), but the dict of lambdas is definitely cool.  If you are pressed for time, you can do it in a follow up patch.  But you should definitely fix it -- when people add new drivers, they look at current drivers for a reference point, and you don\u0027t want to set a bad example!","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"0b8686cc94f299b2aa2f634e309c0a156dad89fe","unresolved":true,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        # Dictionary of applicable VPSA commands in the following format:"},{"line_number":123,"context_line":"        # \u0027command\u0027: (method, API_URL, {optional parameters})"},{"line_number":124,"context_line":"        vpsa_commands \u003d {"},{"line_number":125,"context_line":"            # Volume operations"},{"line_number":126,"context_line":"            \u0027create_volume\u0027: (\u0027POST\u0027,"},{"line_number":127,"context_line":"                              \u0027/api/volumes.json\u0027,"},{"line_number":128,"context_line":"                              {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":129,"context_line":"                               \u0027capacity\u0027: kwargs.get(\u0027size\u0027),"},{"line_number":130,"context_line":"                               \u0027pool\u0027: self.conf.zadara_vpsa_poolname,"},{"line_number":131,"context_line":"                               \u0027block\u0027: \u0027YES\u0027"},{"line_number":132,"context_line":"                               if self.vol_type_str \u003d\u003d \u0027showonlyblock\u0027"},{"line_number":133,"context_line":"                               else \u0027NO\u0027,"},{"line_number":134,"context_line":"                               \u0027thin\u0027: \u0027YES\u0027,"},{"line_number":135,"context_line":"                               \u0027crypt\u0027: \u0027YES\u0027"},{"line_number":136,"context_line":"                               if self.conf.zadara_vol_encrypt else \u0027NO\u0027,"},{"line_number":137,"context_line":"                               \u0027compress\u0027: \u0027YES\u0027"},{"line_number":138,"context_line":"                               if self.conf.zadara_gen3_vol_compress else \u0027NO\u0027,"},{"line_number":139,"context_line":"                               \u0027dedupe\u0027: \u0027YES\u0027"},{"line_number":140,"context_line":"                               if self.conf.zadara_gen3_vol_dedupe else \u0027NO\u0027,"},{"line_number":141,"context_line":"                               \u0027attachpolicies\u0027: \u0027NO\u0027"},{"line_number":142,"context_line":"                               if not self.conf.zadara_default_snap_policy"},{"line_number":143,"context_line":"                               else \u0027YES\u0027}),"},{"line_number":144,"context_line":"            \u0027delete_volume\u0027: (\u0027DELETE\u0027,"},{"line_number":145,"context_line":"                              \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":146,"context_line":"                              {\u0027force\u0027: \u0027YES\u0027}),"},{"line_number":147,"context_line":"            \u0027expand_volume\u0027: (\u0027POST\u0027,"},{"line_number":148,"context_line":"                              \u0027/api/volumes/%s/expand.json\u0027"},{"line_number":149,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":150,"context_line":"                              {\u0027capacity\u0027: kwargs.get(\u0027size\u0027)}),"},{"line_number":151,"context_line":"            \u0027rename_volume\u0027: (\u0027POST\u0027,"},{"line_number":152,"context_line":"                              \u0027/api/volumes/%s/rename.json\u0027"},{"line_number":153,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":154,"context_line":"                              {\u0027new_name\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":155,"context_line":"            # Snapshot operations"},{"line_number":156,"context_line":"            # Snapshot request is triggered for a single volume though the"},{"line_number":157,"context_line":"            # API call implies that snapshot is triggered for CG (legacy API)."},{"line_number":158,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":159,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":160,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":161,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":162,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"},{"line_number":163,"context_line":"                                \u0027/api/snapshots/%s.json\u0027"},{"line_number":164,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":165,"context_line":"                                {}),"},{"line_number":166,"context_line":"            \u0027rename_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":167,"context_line":"                                \u0027/api/snapshots/%s/rename.json\u0027"},{"line_number":168,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":169,"context_line":"                                {\u0027newname\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":170,"context_line":"            \u0027create_clone_from_snap\u0027: (\u0027POST\u0027,"},{"line_number":171,"context_line":"                                       \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":172,"context_line":"                                       % kwargs.get(\u0027cg_name\u0027),"},{"line_number":173,"context_line":"                                       {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":174,"context_line":"                                        \u0027snapshot\u0027: kwargs.get(\u0027snap_id\u0027)}),"},{"line_number":175,"context_line":"            \u0027create_clone\u0027: (\u0027POST\u0027,"},{"line_number":176,"context_line":"                             \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":177,"context_line":"                             % kwargs.get(\u0027cg_name\u0027),"},{"line_number":178,"context_line":"                             {\u0027name\u0027: kwargs.get(\u0027name\u0027)}),"},{"line_number":179,"context_line":"            # Server operations"},{"line_number":180,"context_line":"            \u0027create_server\u0027: (\u0027POST\u0027,"},{"line_number":181,"context_line":"                              \u0027/api/servers.json\u0027,"},{"line_number":182,"context_line":"                              {\u0027iqn\u0027: kwargs.get(\u0027iqn\u0027),"},{"line_number":183,"context_line":"                               \u0027iscsi\u0027: kwargs.get(\u0027iscsi_ip\u0027),"},{"line_number":184,"context_line":"                               \u0027display_name\u0027: kwargs.get(\u0027iqn\u0027)"},{"line_number":185,"context_line":"                               if kwargs.get(\u0027iqn\u0027)"},{"line_number":186,"context_line":"                               else kwargs.get(\u0027iscsi_ip\u0027)}),"},{"line_number":187,"context_line":"            # Attach/Detach operations"},{"line_number":188,"context_line":"            \u0027attach_volume\u0027: (\u0027POST\u0027,"},{"line_number":189,"context_line":"                              \u0027/api/servers/%s/volumes.json\u0027"},{"line_number":190,"context_line":"                              % kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":191,"context_line":"                              {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":192,"context_line":"                               \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),"},{"line_number":193,"context_line":"                               \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),"},{"line_number":194,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":195,"context_line":"            \u0027detach_volume\u0027: (\u0027POST\u0027,"},{"line_number":196,"context_line":"                              \u0027/api/volumes/%s/detach.json\u0027"},{"line_number":197,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":198,"context_line":"                              {\u0027server_name[]\u0027: kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":199,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":200,"context_line":"            # Update volume comment"},{"line_number":201,"context_line":"            \u0027update_volume\u0027: (\u0027POST\u0027,"},{"line_number":202,"context_line":"                              \u0027/api/volumes/%s/update_comment.json\u0027"},{"line_number":203,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":204,"context_line":"                              {\u0027new_comment\u0027: kwargs.get(\u0027new_comment\u0027)}),"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"            # Get operations"},{"line_number":207,"context_line":"            \u0027list_volumes\u0027: (\u0027GET\u0027,"},{"line_number":208,"context_line":"                             \u0027/api/volumes.json?%s\u003dYES\u0027 % self.vol_type_str,"},{"line_number":209,"context_line":"                             {}),"},{"line_number":210,"context_line":"            \u0027get_volume\u0027: (\u0027GET\u0027,"},{"line_number":211,"context_line":"                           \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":212,"context_line":"                           {}),"},{"line_number":213,"context_line":"            \u0027get_volume_by_name\u0027: (\u0027GET\u0027,"},{"line_number":214,"context_line":"                                   \u0027/api/volumes.json?display_name\u003d%s\u0027"},{"line_number":215,"context_line":"                                   % kwargs.get(\u0027display_name\u0027),"},{"line_number":216,"context_line":"                                   {}),"},{"line_number":217,"context_line":"            \u0027get_pool\u0027: (\u0027GET\u0027,"},{"line_number":218,"context_line":"                         \u0027/api/pools/%s.json\u0027 % kwargs.get(\u0027pool_name\u0027),"},{"line_number":219,"context_line":"                         {}),"},{"line_number":220,"context_line":"            \u0027list_controllers\u0027: (\u0027GET\u0027,"},{"line_number":221,"context_line":"                                 \u0027/api/vcontrollers.json\u0027,"},{"line_number":222,"context_line":"                                 {}),"},{"line_number":223,"context_line":"            \u0027list_servers\u0027: (\u0027GET\u0027,"},{"line_number":224,"context_line":"                             \u0027/api/servers.json\u0027,"},{"line_number":225,"context_line":"                             {}),"},{"line_number":226,"context_line":"            \u0027list_vol_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":227,"context_line":"                                   \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":228,"context_line":"                                   % kwargs.get(\u0027cg_name\u0027),"},{"line_number":229,"context_line":"                                   {}),"},{"line_number":230,"context_line":"            \u0027list_vol_attachments\u0027: (\u0027GET\u0027,"},{"line_number":231,"context_line":"                                     \u0027/api/volumes/%s/servers.json\u0027"},{"line_number":232,"context_line":"                                     % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":233,"context_line":"                                     {}),"},{"line_number":234,"context_line":"            \u0027list_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":235,"context_line":"                               \u0027/api/snapshots.json\u0027,"},{"line_number":236,"context_line":"                               {}),"},{"line_number":237,"context_line":"            # Put operations"},{"line_number":238,"context_line":"            \u0027change_export_name\u0027: (\u0027PUT\u0027,"},{"line_number":239,"context_line":"                                   \u0027/api/volumes/%s/export_name.json\u0027"},{"line_number":240,"context_line":"                                   % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":241,"context_line":"                                   {\u0027exportname\u0027: kwargs.get(\u0027exportname\u0027)})}"},{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            method, url, params \u003d vpsa_commands[cmd]"},{"line_number":244,"context_line":"            # Populate the metadata for the volume creation"}],"source_content_type":"text/x-python","patch_set":14,"id":"dbdd2492_f0dd5512","line":241,"range":{"start_line":124,"start_character":0,"end_line":241,"end_character":77},"in_reply_to":"79fd54b6_bd896b15","updated":"2021-03-18 17:50:30.000000000","message":"I found dict of lambdas work smoothly and addressed to include the command dictionary as an attribute inside class. Thanks for the suggestion.","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1fccd4cabd4f86069325d6d1a11d7b381078f46e","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        # Dictionary of applicable VPSA commands in the following format:"},{"line_number":123,"context_line":"        # \u0027command\u0027: (method, API_URL, {optional parameters})"},{"line_number":124,"context_line":"        vpsa_commands \u003d {"},{"line_number":125,"context_line":"            # Volume operations"},{"line_number":126,"context_line":"            \u0027create_volume\u0027: (\u0027POST\u0027,"},{"line_number":127,"context_line":"                              \u0027/api/volumes.json\u0027,"},{"line_number":128,"context_line":"                              {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":129,"context_line":"                               \u0027capacity\u0027: kwargs.get(\u0027size\u0027),"},{"line_number":130,"context_line":"                               \u0027pool\u0027: self.conf.zadara_vpsa_poolname,"},{"line_number":131,"context_line":"                               \u0027block\u0027: \u0027YES\u0027"},{"line_number":132,"context_line":"                               if self.vol_type_str \u003d\u003d \u0027showonlyblock\u0027"},{"line_number":133,"context_line":"                               else \u0027NO\u0027,"},{"line_number":134,"context_line":"                               \u0027thin\u0027: \u0027YES\u0027,"},{"line_number":135,"context_line":"                               \u0027crypt\u0027: \u0027YES\u0027"},{"line_number":136,"context_line":"                               if self.conf.zadara_vol_encrypt else \u0027NO\u0027,"},{"line_number":137,"context_line":"                               \u0027compress\u0027: \u0027YES\u0027"},{"line_number":138,"context_line":"                               if self.conf.zadara_gen3_vol_compress else \u0027NO\u0027,"},{"line_number":139,"context_line":"                               \u0027dedupe\u0027: \u0027YES\u0027"},{"line_number":140,"context_line":"                               if self.conf.zadara_gen3_vol_dedupe else \u0027NO\u0027,"},{"line_number":141,"context_line":"                               \u0027attachpolicies\u0027: \u0027NO\u0027"},{"line_number":142,"context_line":"                               if not self.conf.zadara_default_snap_policy"},{"line_number":143,"context_line":"                               else \u0027YES\u0027}),"},{"line_number":144,"context_line":"            \u0027delete_volume\u0027: (\u0027DELETE\u0027,"},{"line_number":145,"context_line":"                              \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":146,"context_line":"                              {\u0027force\u0027: \u0027YES\u0027}),"},{"line_number":147,"context_line":"            \u0027expand_volume\u0027: (\u0027POST\u0027,"},{"line_number":148,"context_line":"                              \u0027/api/volumes/%s/expand.json\u0027"},{"line_number":149,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":150,"context_line":"                              {\u0027capacity\u0027: kwargs.get(\u0027size\u0027)}),"},{"line_number":151,"context_line":"            \u0027rename_volume\u0027: (\u0027POST\u0027,"},{"line_number":152,"context_line":"                              \u0027/api/volumes/%s/rename.json\u0027"},{"line_number":153,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":154,"context_line":"                              {\u0027new_name\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":155,"context_line":"            # Snapshot operations"},{"line_number":156,"context_line":"            # Snapshot request is triggered for a single volume though the"},{"line_number":157,"context_line":"            # API call implies that snapshot is triggered for CG (legacy API)."},{"line_number":158,"context_line":"            \u0027create_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":159,"context_line":"                                \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":160,"context_line":"                                % kwargs.get(\u0027cg_name\u0027),"},{"line_number":161,"context_line":"                                {\u0027display_name\u0027: kwargs.get(\u0027snap_name\u0027)}),"},{"line_number":162,"context_line":"            \u0027delete_snapshot\u0027: (\u0027DELETE\u0027,"},{"line_number":163,"context_line":"                                \u0027/api/snapshots/%s.json\u0027"},{"line_number":164,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":165,"context_line":"                                {}),"},{"line_number":166,"context_line":"            \u0027rename_snapshot\u0027: (\u0027POST\u0027,"},{"line_number":167,"context_line":"                                \u0027/api/snapshots/%s/rename.json\u0027"},{"line_number":168,"context_line":"                                % kwargs.get(\u0027snap_id\u0027),"},{"line_number":169,"context_line":"                                {\u0027newname\u0027: kwargs.get(\u0027new_name\u0027)}),"},{"line_number":170,"context_line":"            \u0027create_clone_from_snap\u0027: (\u0027POST\u0027,"},{"line_number":171,"context_line":"                                       \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":172,"context_line":"                                       % kwargs.get(\u0027cg_name\u0027),"},{"line_number":173,"context_line":"                                       {\u0027name\u0027: kwargs.get(\u0027name\u0027),"},{"line_number":174,"context_line":"                                        \u0027snapshot\u0027: kwargs.get(\u0027snap_id\u0027)}),"},{"line_number":175,"context_line":"            \u0027create_clone\u0027: (\u0027POST\u0027,"},{"line_number":176,"context_line":"                             \u0027/api/consistency_groups/%s/clone.json\u0027"},{"line_number":177,"context_line":"                             % kwargs.get(\u0027cg_name\u0027),"},{"line_number":178,"context_line":"                             {\u0027name\u0027: kwargs.get(\u0027name\u0027)}),"},{"line_number":179,"context_line":"            # Server operations"},{"line_number":180,"context_line":"            \u0027create_server\u0027: (\u0027POST\u0027,"},{"line_number":181,"context_line":"                              \u0027/api/servers.json\u0027,"},{"line_number":182,"context_line":"                              {\u0027iqn\u0027: kwargs.get(\u0027iqn\u0027),"},{"line_number":183,"context_line":"                               \u0027iscsi\u0027: kwargs.get(\u0027iscsi_ip\u0027),"},{"line_number":184,"context_line":"                               \u0027display_name\u0027: kwargs.get(\u0027iqn\u0027)"},{"line_number":185,"context_line":"                               if kwargs.get(\u0027iqn\u0027)"},{"line_number":186,"context_line":"                               else kwargs.get(\u0027iscsi_ip\u0027)}),"},{"line_number":187,"context_line":"            # Attach/Detach operations"},{"line_number":188,"context_line":"            \u0027attach_volume\u0027: (\u0027POST\u0027,"},{"line_number":189,"context_line":"                              \u0027/api/servers/%s/volumes.json\u0027"},{"line_number":190,"context_line":"                              % kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":191,"context_line":"                              {\u0027volume_name[]\u0027: kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":192,"context_line":"                               \u0027access_type\u0027: kwargs.get(\u0027share_proto\u0027),"},{"line_number":193,"context_line":"                               \u0027readonly\u0027: kwargs.get(\u0027read_only\u0027),"},{"line_number":194,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":195,"context_line":"            \u0027detach_volume\u0027: (\u0027POST\u0027,"},{"line_number":196,"context_line":"                              \u0027/api/volumes/%s/detach.json\u0027"},{"line_number":197,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":198,"context_line":"                              {\u0027server_name[]\u0027: kwargs.get(\u0027vpsa_srv\u0027),"},{"line_number":199,"context_line":"                               \u0027force\u0027: \u0027YES\u0027}),"},{"line_number":200,"context_line":"            # Update volume comment"},{"line_number":201,"context_line":"            \u0027update_volume\u0027: (\u0027POST\u0027,"},{"line_number":202,"context_line":"                              \u0027/api/volumes/%s/update_comment.json\u0027"},{"line_number":203,"context_line":"                              % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":204,"context_line":"                              {\u0027new_comment\u0027: kwargs.get(\u0027new_comment\u0027)}),"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"            # Get operations"},{"line_number":207,"context_line":"            \u0027list_volumes\u0027: (\u0027GET\u0027,"},{"line_number":208,"context_line":"                             \u0027/api/volumes.json?%s\u003dYES\u0027 % self.vol_type_str,"},{"line_number":209,"context_line":"                             {}),"},{"line_number":210,"context_line":"            \u0027get_volume\u0027: (\u0027GET\u0027,"},{"line_number":211,"context_line":"                           \u0027/api/volumes/%s.json\u0027 % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":212,"context_line":"                           {}),"},{"line_number":213,"context_line":"            \u0027get_volume_by_name\u0027: (\u0027GET\u0027,"},{"line_number":214,"context_line":"                                   \u0027/api/volumes.json?display_name\u003d%s\u0027"},{"line_number":215,"context_line":"                                   % kwargs.get(\u0027display_name\u0027),"},{"line_number":216,"context_line":"                                   {}),"},{"line_number":217,"context_line":"            \u0027get_pool\u0027: (\u0027GET\u0027,"},{"line_number":218,"context_line":"                         \u0027/api/pools/%s.json\u0027 % kwargs.get(\u0027pool_name\u0027),"},{"line_number":219,"context_line":"                         {}),"},{"line_number":220,"context_line":"            \u0027list_controllers\u0027: (\u0027GET\u0027,"},{"line_number":221,"context_line":"                                 \u0027/api/vcontrollers.json\u0027,"},{"line_number":222,"context_line":"                                 {}),"},{"line_number":223,"context_line":"            \u0027list_servers\u0027: (\u0027GET\u0027,"},{"line_number":224,"context_line":"                             \u0027/api/servers.json\u0027,"},{"line_number":225,"context_line":"                             {}),"},{"line_number":226,"context_line":"            \u0027list_vol_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":227,"context_line":"                                   \u0027/api/consistency_groups/%s/snapshots.json\u0027"},{"line_number":228,"context_line":"                                   % kwargs.get(\u0027cg_name\u0027),"},{"line_number":229,"context_line":"                                   {}),"},{"line_number":230,"context_line":"            \u0027list_vol_attachments\u0027: (\u0027GET\u0027,"},{"line_number":231,"context_line":"                                     \u0027/api/volumes/%s/servers.json\u0027"},{"line_number":232,"context_line":"                                     % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":233,"context_line":"                                     {}),"},{"line_number":234,"context_line":"            \u0027list_snapshots\u0027: (\u0027GET\u0027,"},{"line_number":235,"context_line":"                               \u0027/api/snapshots.json\u0027,"},{"line_number":236,"context_line":"                               {}),"},{"line_number":237,"context_line":"            # Put operations"},{"line_number":238,"context_line":"            \u0027change_export_name\u0027: (\u0027PUT\u0027,"},{"line_number":239,"context_line":"                                   \u0027/api/volumes/%s/export_name.json\u0027"},{"line_number":240,"context_line":"                                   % kwargs.get(\u0027vpsa_vol\u0027),"},{"line_number":241,"context_line":"                                   {\u0027exportname\u0027: kwargs.get(\u0027exportname\u0027)})}"},{"line_number":242,"context_line":"        try:"},{"line_number":243,"context_line":"            method, url, params \u003d vpsa_commands[cmd]"},{"line_number":244,"context_line":"            # Populate the metadata for the volume creation"}],"source_content_type":"text/x-python","patch_set":14,"id":"aa1f9897_c8c2ae35","line":241,"range":{"start_line":124,"start_character":0,"end_line":241,"end_character":77},"in_reply_to":"dbdd2492_f0dd5512","updated":"2021-03-18 18:28:02.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"}],"cinder/volume/drivers/zadara/exception.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":30,"context_line":"from webob.util import status_reasons"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder.i18n import _"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"14c22395_761dc6e3","line":33,"updated":"2021-02-08 17:52:10.000000000","message":"-1: This file should not be necessary, we have cinder/exception.py","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":true,"context_lines":[{"line_number":30,"context_line":"from webob.util import status_reasons"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder.i18n import _"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f2feb58_52105a61","line":33,"in_reply_to":"14c22395_761dc6e3","updated":"2021-02-12 17:29:04.000000000","message":"New exceptions specific to zadara also present in zadara/exception.py","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"31d678417c8487a86e6b9253d68b1bd1b2c535f0","unresolved":true,"context_lines":[{"line_number":30,"context_line":"from webob.util import status_reasons"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder.i18n import _"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ae2a6db0_3ff1a060","line":33,"in_reply_to":"9f2feb58_52105a61","updated":"2021-03-18 11:49:18.000000000","message":"Keeping own exception module as suggested by Brian.\nhttps://review.opendev.org/c/openstack/cinder/+/774463/12/cinder/exception.py#1092","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"0b8686cc94f299b2aa2f634e309c0a156dad89fe","unresolved":true,"context_lines":[{"line_number":30,"context_line":"from webob.util import status_reasons"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder.i18n import _"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e8b745c1_ee7718d2","line":33,"in_reply_to":"ae2a6db0_3ff1a060","updated":"2021-03-18 17:50:30.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1fccd4cabd4f86069325d6d1a11d7b381078f46e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from webob.util import status_reasons"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder.i18n import _"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"2cce0d21_8672c702","line":33,"in_reply_to":"e8b745c1_ee7718d2","updated":"2021-03-18 18:28:02.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"afbdeabf40c9330a987363872acf5354d9029967","unresolved":true,"context_lines":[{"line_number":61,"context_line":"    pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class CinderException(Exception):"},{"line_number":65,"context_line":"    \"\"\"Base Cinder Exception"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    To correctly use this class, inherit from it and define"}],"source_content_type":"text/x-python","patch_set":10,"id":"28a5416a_3034a381","line":64,"updated":"2021-03-11 02:58:49.000000000","message":"I\u0027m not clear on why you are copying the cinder.exception code here instead of importing the module.  These won\u0027t be cinder.exception exceptions, they will be cinder.volume.drivers.zadara.exception exceptions\n\nGorka brought this issue up on PS 1.  You can have you own Zadara* exceptions defined here, but you shouldn\u0027t redefine the cinder.exceptions.","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1c2306f618449f2f606384d08d1e40b0f221e47a","unresolved":true,"context_lines":[{"line_number":61,"context_line":"    pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class CinderException(Exception):"},{"line_number":65,"context_line":"    \"\"\"Base Cinder Exception"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    To correctly use this class, inherit from it and define"}],"source_content_type":"text/x-python","patch_set":10,"id":"c75499d1_fd3cb473","line":64,"in_reply_to":"15e19d38_74d8d745","updated":"2021-03-18 11:59:56.000000000","message":"Keeping own zadara exceptions, removed all redefinitions.","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"f55a5f9c48a70065f5a9bcd0bb87404400f32bef","unresolved":true,"context_lines":[{"line_number":61,"context_line":"    pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class CinderException(Exception):"},{"line_number":65,"context_line":"    \"\"\"Base Cinder Exception"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    To correctly use this class, inherit from it and define"}],"source_content_type":"text/x-python","patch_set":10,"id":"15e19d38_74d8d745","line":64,"in_reply_to":"28a5416a_3034a381","updated":"2021-03-14 17:23:30.000000000","message":"Moved the zadara exceptions to cinder/exceptions.py","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1fccd4cabd4f86069325d6d1a11d7b381078f46e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class CinderException(Exception):"},{"line_number":65,"context_line":"    \"\"\"Base Cinder Exception"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    To correctly use this class, inherit from it and define"}],"source_content_type":"text/x-python","patch_set":10,"id":"8317d4a1_c24621aa","line":64,"in_reply_to":"ac5137a0_89d85766","updated":"2021-03-18 18:28:02.000000000","message":"Done","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"0b8686cc94f299b2aa2f634e309c0a156dad89fe","unresolved":true,"context_lines":[{"line_number":61,"context_line":"    pass"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class CinderException(Exception):"},{"line_number":65,"context_line":"    \"\"\"Base Cinder Exception"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    To correctly use this class, inherit from it and define"}],"source_content_type":"text/x-python","patch_set":10,"id":"ac5137a0_89d85766","line":64,"in_reply_to":"c75499d1_fd3cb473","updated":"2021-03-18 17:50:30.000000000","message":"Done","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ebd9cbedabbcd9ff8c1a73460bb5cfbcdd90ae9c","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    message \u003d \"Invalid VPSA access key\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class ZadaraVPSANoActiveController(exception.CinderException):"},{"line_number":33,"context_line":"    message \u003d _(\"Unable to find any active VPSA controller\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"b814f0a4_b810d5b4","line":32,"range":{"start_line":32,"start_character":35,"end_line":32,"end_character":60},"updated":"2021-03-17 17:05:58.000000000","message":"Why CinderException instead of VolumeDriverException?","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    message \u003d \"Invalid VPSA access key\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class ZadaraVPSANoActiveController(exception.CinderException):"},{"line_number":33,"context_line":"    message \u003d _(\"Unable to find any active VPSA controller\")"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"950ab8e6_e53be3d4","line":32,"range":{"start_line":32,"start_character":35,"end_line":32,"end_character":60},"in_reply_to":"b814f0a4_b810d5b4","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ebd9cbedabbcd9ff8c1a73460bb5cfbcdd90ae9c","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    message \u003d _(\"Unable to create server object for initiator %(name)s\")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class ZadaraAttachmentsNotFound(exception.NotFound):"},{"line_number":45,"context_line":"    message \u003d _(\"Failed to retrieve attachments for volume %(name)s\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"dd00937d_809ab27f","line":44,"range":{"start_line":44,"start_character":32,"end_line":44,"end_character":50},"updated":"2021-03-17 17:05:58.000000000","message":"This doesn\u0027t inherit from VolumeDriverException.","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    message \u003d _(\"Unable to create server object for initiator %(name)s\")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class ZadaraAttachmentsNotFound(exception.NotFound):"},{"line_number":45,"context_line":"    message \u003d _(\"Failed to retrieve attachments for volume %(name)s\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"24e03524_20591a35","line":44,"range":{"start_line":44,"start_character":32,"end_line":44,"end_character":50},"in_reply_to":"dd00937d_809ab27f","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ebd9cbedabbcd9ff8c1a73460bb5cfbcdd90ae9c","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    message \u003d _(\"Failed to retrieve attachments for volume %(name)s\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class ZadaraInvalidAttachmentInfo(exception.Invalid):"},{"line_number":49,"context_line":"    message \u003d _(\"Invalid attachment info for volume %(name)s: %(reason)s\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"f45549e6_18620534","line":48,"range":{"start_line":48,"start_character":34,"end_line":48,"end_character":51},"updated":"2021-03-17 17:05:58.000000000","message":"This doesn\u0027t inherit from VolumeDriverException.","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    message \u003d _(\"Failed to retrieve attachments for volume %(name)s\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class ZadaraInvalidAttachmentInfo(exception.Invalid):"},{"line_number":49,"context_line":"    message \u003d _(\"Invalid attachment info for volume %(name)s: %(reason)s\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"69d4336d_d6e0b072","line":48,"range":{"start_line":48,"start_character":34,"end_line":48,"end_character":51},"in_reply_to":"f45549e6_18620534","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ebd9cbedabbcd9ff8c1a73460bb5cfbcdd90ae9c","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    message \u003d _(\"Invalid attachment info for volume %(name)s: %(reason)s\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class ZadaraServerNotFound(exception.NotFound):"},{"line_number":53,"context_line":"    message \u003d _(\"Unable to find server object for initiator %(name)s\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"08acff11_b7b38b0c","line":52,"range":{"start_line":52,"start_character":27,"end_line":52,"end_character":45},"updated":"2021-03-17 17:05:58.000000000","message":"same","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    message \u003d _(\"Invalid attachment info for volume %(name)s: %(reason)s\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class ZadaraServerNotFound(exception.NotFound):"},{"line_number":53,"context_line":"    message \u003d _(\"Unable to find server object for initiator %(name)s\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"ce551461_9e13f50b","line":52,"range":{"start_line":52,"start_character":27,"end_line":52,"end_character":45},"in_reply_to":"08acff11_b7b38b0c","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"}],"cinder/volume/drivers/zadara/zadara.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":28,"context_line":"from cinder.volume import configuration"},{"line_number":29,"context_line":"from cinder.volume import driver"},{"line_number":30,"context_line":"from cinder.volume.drivers.zadara.common import common_exception"},{"line_number":31,"context_line":"from cinder.volume.drivers.zadara.common import LOG"},{"line_number":32,"context_line":"from cinder.volume.drivers.zadara.common import zadara_opts"},{"line_number":33,"context_line":"from cinder.volume.drivers.zadara.common import ZadaraVPSAConnection"},{"line_number":34,"context_line":"from cinder.volume.drivers.zadara import exception as zadara_exception"}],"source_content_type":"text/x-python","patch_set":1,"id":"5dfafff9_6ad44b30","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":51},"updated":"2021-02-08 17:52:10.000000000","message":"-1: This doesn\u0027t look right to me, we should have our own LOG variable using our own __name__","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1b8ccdd4195d772f4de7c2f6c8ad2555959d0150","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from cinder.volume import configuration"},{"line_number":29,"context_line":"from cinder.volume import driver"},{"line_number":30,"context_line":"from cinder.volume.drivers.zadara.common import common_exception"},{"line_number":31,"context_line":"from cinder.volume.drivers.zadara.common import LOG"},{"line_number":32,"context_line":"from cinder.volume.drivers.zadara.common import zadara_opts"},{"line_number":33,"context_line":"from cinder.volume.drivers.zadara.common import ZadaraVPSAConnection"},{"line_number":34,"context_line":"from cinder.volume.drivers.zadara import exception as zadara_exception"}],"source_content_type":"text/x-python","patch_set":1,"id":"2c341316_0f53b49e","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":51},"in_reply_to":"5dfafff9_6ad44b30","updated":"2021-02-09 05:09:52.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        15.07 - Initial driver"},{"line_number":49,"context_line":"        16.05 - Move from httplib to requests"},{"line_number":50,"context_line":"        19.08 - Add API access key authentication option"},{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"}],"source_content_type":"text/x-python","patch_set":1,"id":"7947f8ed_14e53d19","line":51,"range":{"start_line":51,"start_character":16,"end_line":51,"end_character":45},"updated":"2021-02-08 17:52:10.000000000","message":"?: Do all Zadara versions support json output?  Or has this been added in a specific version?","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        15.07 - Initial driver"},{"line_number":49,"context_line":"        16.05 - Move from httplib to requests"},{"line_number":50,"context_line":"        19.08 - Add API access key authentication option"},{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"}],"source_content_type":"text/x-python","patch_set":1,"id":"7979178b_57a0493f","line":51,"range":{"start_line":51,"start_character":16,"end_line":51,"end_character":45},"in_reply_to":"6c1585f5_b2e0e299","updated":"2021-03-18 11:46:34.000000000","message":"Updated. Adding the code check definitely is a nice idea. Other side, I don\u0027t feel this is a concern and the onus is on the customers at the present moment. I would consider and like to add checks in the further patches. Thanks.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1b8ccdd4195d772f4de7c2f6c8ad2555959d0150","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        15.07 - Initial driver"},{"line_number":49,"context_line":"        16.05 - Move from httplib to requests"},{"line_number":50,"context_line":"        19.08 - Add API access key authentication option"},{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"}],"source_content_type":"text/x-python","patch_set":1,"id":"b8669aef_cf1d85ca","line":51,"range":{"start_line":51,"start_character":16,"end_line":51,"end_character":45},"in_reply_to":"7947f8ed_14e53d19","updated":"2021-02-09 05:09:52.000000000","message":"It was added in a specific version.\nI should also mention this with our commit message.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        15.07 - Initial driver"},{"line_number":49,"context_line":"        16.05 - Move from httplib to requests"},{"line_number":50,"context_line":"        19.08 - Add API access key authentication option"},{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"}],"source_content_type":"text/x-python","patch_set":1,"id":"6c1585f5_b2e0e299","line":51,"range":{"start_line":51,"start_character":16,"end_line":51,"end_character":45},"in_reply_to":"b8669aef_cf1d85ca","updated":"2021-03-17 15:17:04.000000000","message":"More importantly in the documentation and release notes.\nAlso, shouldn\u0027t the code check that the backend it\u0027s connected to has that specific version?","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":50,"context_line":"        19.08 - Add API access key authentication option"},{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"},{"line_number":55,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":56,"context_line":"                   configure vpsa."}],"source_content_type":"text/x-python","patch_set":1,"id":"c000e9f7_111bf56e","line":53,"updated":"2021-02-08 17:52:10.000000000","message":"?: What does this mean?  Are you saying you are creating a new common file that will be the same in all openstack drivers and will make it easier to import fixes?","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        19.08 - Add API access key authentication option"},{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"},{"line_number":55,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":56,"context_line":"                   configure vpsa."}],"source_content_type":"text/x-python","patch_set":1,"id":"9177e7fc_93fec13b","line":53,"in_reply_to":"7c02adf5_9bb948ea","updated":"2021-03-17 15:17:04.000000000","message":"Ack","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"40f8889d16119762cebc0bf2422c6ad03485a3f1","unresolved":true,"context_lines":[{"line_number":50,"context_line":"        19.08 - Add API access key authentication option"},{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"},{"line_number":55,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":56,"context_line":"                   configure vpsa."}],"source_content_type":"text/x-python","patch_set":1,"id":"7c02adf5_9bb948ea","line":53,"in_reply_to":"c000e9f7_111bf56e","updated":"2021-02-09 05:28:08.000000000","message":"That is the idea behind maintaining the common file.\nAs of now, it is for the cinder and manila drivers.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"},{"line_number":55,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":56,"context_line":"                   configure vpsa."},{"line_number":57,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"}],"source_content_type":"text/x-python","patch_set":1,"id":"6cb0c3a8_5c3b31c5","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":63},"updated":"2021-02-08 17:52:10.000000000","message":"?: What is this thing that is fixing? Because it\u0027s not a launchpad bug.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"40f8889d16119762cebc0bf2422c6ad03485a3f1","unresolved":true,"context_lines":[{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"},{"line_number":55,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":56,"context_line":"                   configure vpsa."},{"line_number":57,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"}],"source_content_type":"text/x-python","patch_set":1,"id":"960e164b_0f376be0","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":63},"in_reply_to":"6cb0c3a8_5c3b31c5","updated":"2021-02-09 05:28:08.000000000","message":"It is not a launchpad bug. An internal zadara issue that was used to fix the common code. The driver version is tagged along with internal fixes and maintain zadara releases.\nAny specific issue you are pointing out with this?","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"},{"line_number":55,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":56,"context_line":"                   configure vpsa."},{"line_number":57,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"}],"source_content_type":"text/x-python","patch_set":1,"id":"be7b06a2_f28ac3a6","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":63},"in_reply_to":"960e164b_0f376be0","updated":"2021-03-17 15:17:04.000000000","message":"Yes, on Cinder drivers when we reference an issue without saying where it\u0027s from (company bugzilla, github issue, etc) it is assumed that it is launchpad.\n\nSo any non launchpad bug we refer should say where it is from.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"},{"line_number":55,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":56,"context_line":"                   configure vpsa."},{"line_number":57,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"}],"source_content_type":"text/x-python","patch_set":1,"id":"2ecc7652_ddb27328","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":63},"in_reply_to":"be7b06a2_f28ac3a6","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        15.07 - Initial driver"},{"line_number":49,"context_line":"        16.05 - Move from httplib to requests"},{"line_number":50,"context_line":"        19.08 - Add API access key authentication option"},{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"},{"line_number":55,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":56,"context_line":"                   configure vpsa."},{"line_number":57,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    VERSION \u003d \u002720.12-20\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"385024b4_97ed4291","line":57,"range":{"start_line":51,"start_character":0,"end_line":57,"end_character":62},"updated":"2021-02-08 17:52:10.000000000","message":"nit: You are adding everything in a single patch, so shouldn\u0027t there be only one date for all the changes?\n\n    21.02 - line 1\n          - line 2\n          - line 3","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"40f8889d16119762cebc0bf2422c6ad03485a3f1","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        15.07 - Initial driver"},{"line_number":49,"context_line":"        16.05 - Move from httplib to requests"},{"line_number":50,"context_line":"        19.08 - Add API access key authentication option"},{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"},{"line_number":55,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":56,"context_line":"                   configure vpsa."},{"line_number":57,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    VERSION \u003d \u002720.12-20\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"4fd9908a_1bd574dd","line":57,"range":{"start_line":51,"start_character":0,"end_line":57,"end_character":62},"in_reply_to":"385024b4_97ed4291","updated":"2021-02-09 05:28:08.000000000","message":"As said above, the version is tagged for maintaining the internal releases.\nCould you please specify if it is arising any issue here? Thanks.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        15.07 - Initial driver"},{"line_number":49,"context_line":"        16.05 - Move from httplib to requests"},{"line_number":50,"context_line":"        19.08 - Add API access key authentication option"},{"line_number":51,"context_line":"        20.01 - Move to json format from xml. Provide manage/unmanage"},{"line_number":52,"context_line":"                volume/snapshot feature"},{"line_number":53,"context_line":"        20.12-01 - Merging with the common code for all the openstack drivers"},{"line_number":54,"context_line":"        20.12-02 - Common code changed as part of fixing #18723"},{"line_number":55,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":56,"context_line":"                   configure vpsa."},{"line_number":57,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    VERSION \u003d \u002720.12-20\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"717ec941_40ed101d","line":57,"range":{"start_line":51,"start_character":0,"end_line":57,"end_character":62},"in_reply_to":"4fd9908a_1bd574dd","updated":"2021-03-17 15:17:04.000000000","message":"No in this case, thanks for the explanation.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    VERSION \u003d \u002720.12-20\u0027"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":63,"context_line":"    CI_WIKI_NAME \u003d \"ZadaraStorage_VPSA_CI\""}],"source_content_type":"text/x-python","patch_set":1,"id":"6352525e_9ee9923a","line":60,"range":{"start_line":60,"start_character":14,"end_line":60,"end_character":24},"updated":"2021-02-08 17:52:10.000000000","message":"nit: I think this should just be \u002721.02\u0027 since you have to submit a new patch anyway to fix the mapping issue.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    VERSION \u003d \u002720.12-20\u0027"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":63,"context_line":"    CI_WIKI_NAME \u003d \"ZadaraStorage_VPSA_CI\""}],"source_content_type":"text/x-python","patch_set":1,"id":"e24d56a8_304c6046","line":60,"range":{"start_line":60,"start_character":14,"end_line":60,"end_character":24},"in_reply_to":"6352525e_9ee9923a","updated":"2021-02-12 17:29:04.000000000","message":"Could you please help me to understand this?\nDo you mean that mapping change for the driver can\u0027t be submitted with this patch?","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    VERSION \u003d \u002720.12-20\u0027"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":63,"context_line":"    CI_WIKI_NAME \u003d \"ZadaraStorage_VPSA_CI\""}],"source_content_type":"text/x-python","patch_set":1,"id":"1265ab83_9ccc1857","line":60,"range":{"start_line":60,"start_character":14,"end_line":60,"end_character":24},"in_reply_to":"e24d56a8_304c6046","updated":"2021-03-17 15:17:04.000000000","message":"I didn\u0027t know these were internal references, I thought they were referring to the current date where this has been updated in Cinder.\n\nNo need to change anything here.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        self.configuration.append_config_values(zadara_opts)"},{"line_number":69,"context_line":"        # The valid list of volume options that can be specified"},{"line_number":70,"context_line":"        # as the metadata while creating cinder volume"},{"line_number":71,"context_line":"        self.vol_options \u003d [\u0027crypt\u0027, \u0027compress\u0027,"},{"line_number":72,"context_line":"                            \u0027dedupe\u0027, \u0027attachpolicies\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def get_driver_options():"}],"source_content_type":"text/x-python","patch_set":1,"id":"1b676a45_d7d028c7","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":55},"updated":"2021-02-08 17:52:10.000000000","message":"nit: This should be a class attribute since it never changes, and it would be better to use a tuple.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        self.configuration.append_config_values(zadara_opts)"},{"line_number":69,"context_line":"        # The valid list of volume options that can be specified"},{"line_number":70,"context_line":"        # as the metadata while creating cinder volume"},{"line_number":71,"context_line":"        self.vol_options \u003d [\u0027crypt\u0027, \u0027compress\u0027,"},{"line_number":72,"context_line":"                            \u0027dedupe\u0027, \u0027attachpolicies\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def get_driver_options():"}],"source_content_type":"text/x-python","patch_set":1,"id":"d4cd30c9_ad47f225","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":55},"in_reply_to":"1b676a45_d7d028c7","updated":"2021-02-12 17:29:04.000000000","message":"If you don\u0027t insist, I prefer to keep the same.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.configuration.append_config_values(zadara_opts)"},{"line_number":69,"context_line":"        # The valid list of volume options that can be specified"},{"line_number":70,"context_line":"        # as the metadata while creating cinder volume"},{"line_number":71,"context_line":"        self.vol_options \u003d [\u0027crypt\u0027, \u0027compress\u0027,"},{"line_number":72,"context_line":"                            \u0027dedupe\u0027, \u0027attachpolicies\u0027]"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def get_driver_options():"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c00d297_57feb5e8","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":55},"in_reply_to":"d4cd30c9_ad47f225","updated":"2021-03-17 15:17:04.000000000","message":"Ack","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def get_driver_options():"},{"line_number":76,"context_line":"        return zadara_opts"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _check_access_key_validity(self):"},{"line_number":79,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"f6930bc2_5bf434c6","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":26},"updated":"2021-02-08 17:52:10.000000000","message":"?: This is missing at least option \"driver_ssl_cert_path\", maybe others...  You can see how to return the right data in the LVM driver cinder/volume/drivers/lvm.py\n\nFixing this can be done in a different patch.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":true,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @staticmethod"},{"line_number":75,"context_line":"    def get_driver_options():"},{"line_number":76,"context_line":"        return zadara_opts"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _check_access_key_validity(self):"},{"line_number":79,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"a6fc8f82_b430e94c","line":76,"range":{"start_line":76,"start_character":0,"end_line":76,"end_character":26},"in_reply_to":"f6930bc2_5bf434c6","updated":"2021-03-18 11:46:34.000000000","message":"Agreed to be done in a follow up patch.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _validate_existing_ref(self, existing_ref):"},{"line_number":129,"context_line":"        \"\"\"Validates existing ref\"\"\""},{"line_number":130,"context_line":"        if \"name\" not in existing_ref or not existing_ref[\"name\"]:"},{"line_number":131,"context_line":"            raise cinder_exception.ManageExistingInvalidReference("},{"line_number":132,"context_line":"                existing_ref\u003dexisting_ref,"},{"line_number":133,"context_line":"                reason\u003d_(\"manage_existing requires a \u0027name\u0027\""}],"source_content_type":"text/x-python","patch_set":1,"id":"6a027bf6_3576ad77","line":130,"updated":"2021-02-08 17:52:10.000000000","message":"nit: simpler to read\n\n  if not existing_ref.get(\u0027name\u0027):","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _validate_existing_ref(self, existing_ref):"},{"line_number":129,"context_line":"        \"\"\"Validates existing ref\"\"\""},{"line_number":130,"context_line":"        if \"name\" not in existing_ref or not existing_ref[\"name\"]:"},{"line_number":131,"context_line":"            raise cinder_exception.ManageExistingInvalidReference("},{"line_number":132,"context_line":"                existing_ref\u003dexisting_ref,"},{"line_number":133,"context_line":"                reason\u003d_(\"manage_existing requires a \u0027name\u0027\""}],"source_content_type":"text/x-python","patch_set":1,"id":"cea102cc_48dc479d","line":130,"in_reply_to":"6a027bf6_3576ad77","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":142,"context_line":"        return {}"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def is_valid_metadata(self, metadata):"},{"line_number":145,"context_line":"        LOG.debug(\u0027Metadata while creating volume: %(metadata)s\u0027,"},{"line_number":146,"context_line":"                  {\u0027metadata\u0027: metadata})"},{"line_number":147,"context_line":"        for key, value in metadata.items():"},{"line_number":148,"context_line":"            if key in self.vol_options:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4afd1955_b5b9ea04","line":145,"range":{"start_line":145,"start_character":28,"end_line":145,"end_character":49},"updated":"2021-02-08 17:52:10.000000000","message":"nit: this doesn\u0027t seem like the right place to log this, since it makes this method only correct when creating a volume and cannot be reused without refactoring.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        return {}"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def is_valid_metadata(self, metadata):"},{"line_number":145,"context_line":"        LOG.debug(\u0027Metadata while creating volume: %(metadata)s\u0027,"},{"line_number":146,"context_line":"                  {\u0027metadata\u0027: metadata})"},{"line_number":147,"context_line":"        for key, value in metadata.items():"},{"line_number":148,"context_line":"            if key in self.vol_options:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9354976c_f263f9e3","line":145,"range":{"start_line":145,"start_character":28,"end_line":145,"end_character":49},"in_reply_to":"125b9e14_983c8c2d","updated":"2021-03-17 15:17:04.000000000","message":"Ack","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":true,"context_lines":[{"line_number":142,"context_line":"        return {}"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def is_valid_metadata(self, metadata):"},{"line_number":145,"context_line":"        LOG.debug(\u0027Metadata while creating volume: %(metadata)s\u0027,"},{"line_number":146,"context_line":"                  {\u0027metadata\u0027: metadata})"},{"line_number":147,"context_line":"        for key, value in metadata.items():"},{"line_number":148,"context_line":"            if key in self.vol_options:"}],"source_content_type":"text/x-python","patch_set":1,"id":"125b9e14_983c8c2d","line":145,"range":{"start_line":145,"start_character":28,"end_line":145,"end_character":49},"in_reply_to":"4afd1955_b5b9ea04","updated":"2021-02-12 17:29:04.000000000","message":"Metadata and its validation is involved with driver only during volume creation.\nUnless you insist, I am ok to keep the way it is as I do not foresee any need to refactor it for our driver. Thnx.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":144,"context_line":"    def is_valid_metadata(self, metadata):"},{"line_number":145,"context_line":"        LOG.debug(\u0027Metadata while creating volume: %(metadata)s\u0027,"},{"line_number":146,"context_line":"                  {\u0027metadata\u0027: metadata})"},{"line_number":147,"context_line":"        for key, value in metadata.items():"},{"line_number":148,"context_line":"            if key in self.vol_options:"},{"line_number":149,"context_line":"                # Check the values allowed for provided metadata"},{"line_number":150,"context_line":"                if value in [\u0027YES\u0027, \u0027NO\u0027]:"},{"line_number":151,"context_line":"                    continue"},{"line_number":152,"context_line":"                else:"},{"line_number":153,"context_line":"                    return False"},{"line_number":154,"context_line":"        return True"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def create_volume(self, volume):"},{"line_number":157,"context_line":"        \"\"\"Create volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"355910bd_272b51dc","line":154,"range":{"start_line":147,"start_character":0,"end_line":154,"end_character":19},"updated":"2021-02-08 17:52:10.000000000","message":"nit:\n\n  return all(value in (\u0027YES\u0027, \u0027NO\u0027) \n             for key, value in metadata.items()\n             if key in self.vol_options)","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    def is_valid_metadata(self, metadata):"},{"line_number":145,"context_line":"        LOG.debug(\u0027Metadata while creating volume: %(metadata)s\u0027,"},{"line_number":146,"context_line":"                  {\u0027metadata\u0027: metadata})"},{"line_number":147,"context_line":"        for key, value in metadata.items():"},{"line_number":148,"context_line":"            if key in self.vol_options:"},{"line_number":149,"context_line":"                # Check the values allowed for provided metadata"},{"line_number":150,"context_line":"                if value in [\u0027YES\u0027, \u0027NO\u0027]:"},{"line_number":151,"context_line":"                    continue"},{"line_number":152,"context_line":"                else:"},{"line_number":153,"context_line":"                    return False"},{"line_number":154,"context_line":"        return True"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def create_volume(self, volume):"},{"line_number":157,"context_line":"        \"\"\"Create volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"85587941_584723f0","line":154,"range":{"start_line":147,"start_character":0,"end_line":154,"end_character":19},"in_reply_to":"355910bd_272b51dc","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def create_volume(self, volume):"},{"line_number":157,"context_line":"        \"\"\"Create volume.\"\"\""},{"line_number":158,"context_line":"        vol_name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # Collect the volume metadata if any provided and validate it"},{"line_number":161,"context_line":"        metadata \u003d self._get_volume_metadata(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a589dfcd_412d33b9","line":158,"range":{"start_line":158,"start_character":65,"end_line":158,"end_character":79},"updated":"2021-02-08 17:52:10.000000000","message":"-1: volume is an OVO, and name is a property, so we should be using attribute notation: `volume.name`","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def create_volume(self, volume):"},{"line_number":157,"context_line":"        \"\"\"Create volume.\"\"\""},{"line_number":158,"context_line":"        vol_name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # Collect the volume metadata if any provided and validate it"},{"line_number":161,"context_line":"        metadata \u003d self._get_volume_metadata(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"65e86f70_5959890b","line":158,"range":{"start_line":158,"start_character":65,"end_line":158,"end_character":79},"in_reply_to":"a589dfcd_412d33b9","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        # Collect the volume metadata if any provided and validate it"},{"line_number":161,"context_line":"        metadata \u003d self._get_volume_metadata(volume)"},{"line_number":162,"context_line":"        if not self.is_valid_metadata(metadata):"},{"line_number":163,"context_line":"            msg \u003d (_(\u0027Not a valid metadata for Volume %s\u0027) % vol_name)"},{"line_number":164,"context_line":"            LOG.error(msg)"},{"line_number":165,"context_line":"            raise cinder_exception.VolumeDriverException(message\u003dmsg)"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"2a069ea9_53d5fceb","line":163,"range":{"start_line":163,"start_character":22,"end_line":163,"end_character":33},"updated":"2021-02-08 17:52:10.000000000","message":"nit: Invalid","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        # Collect the volume metadata if any provided and validate it"},{"line_number":161,"context_line":"        metadata \u003d self._get_volume_metadata(volume)"},{"line_number":162,"context_line":"        if not self.is_valid_metadata(metadata):"},{"line_number":163,"context_line":"            msg \u003d (_(\u0027Not a valid metadata for Volume %s\u0027) % vol_name)"},{"line_number":164,"context_line":"            LOG.error(msg)"},{"line_number":165,"context_line":"            raise cinder_exception.VolumeDriverException(message\u003dmsg)"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"4b65e297_5fed72d4","line":163,"range":{"start_line":163,"start_character":22,"end_line":163,"end_character":33},"in_reply_to":"2a069ea9_53d5fceb","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":167,"context_line":"        self.vpsa_send_cmd("},{"line_number":168,"context_line":"            \u0027create_volume\u0027,"},{"line_number":169,"context_line":"            name\u003dvol_name,"},{"line_number":170,"context_line":"            size\u003dvolume[\u0027size\u0027],"},{"line_number":171,"context_line":"            metadata\u003dmetadata)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        vpsa_volume \u003d self.vpsa._get_vpsa_volume(vol_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a96ed63f_76a2fcc2","line":170,"range":{"start_line":170,"start_character":17,"end_line":170,"end_character":32},"updated":"2021-02-08 17:52:10.000000000","message":"-1: volume.size,","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        self.vpsa_send_cmd("},{"line_number":168,"context_line":"            \u0027create_volume\u0027,"},{"line_number":169,"context_line":"            name\u003dvol_name,"},{"line_number":170,"context_line":"            size\u003dvolume[\u0027size\u0027],"},{"line_number":171,"context_line":"            metadata\u003dmetadata)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        vpsa_volume \u003d self.vpsa._get_vpsa_volume(vol_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6fc91e81_cdda866c","line":170,"range":{"start_line":170,"start_character":17,"end_line":170,"end_character":32},"in_reply_to":"a96ed63f_76a2fcc2","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":175,"context_line":"            msg \u003d _(\u0027VPSA volume %s could not be found.\u0027) % vol_name"},{"line_number":176,"context_line":"            LOG.error(msg)"},{"line_number":177,"context_line":"            raise cinder_exception.VolumeNotFound(volume_id\u003dvolume[\u0027id\u0027])"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def delete_volume(self, volume):"},{"line_number":180,"context_line":"        \"\"\"Delete volume."},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"cc6a10a7_16b83daf","line":178,"updated":"2021-02-08 17:52:10.000000000","message":"There is another bug in the driver, a change in the zadara_vol_name_template means that existing volumes will no longer be reachable!\n\nDriver should be returning here an update to the volume DB entry so that even if the configuration changes the driver can still locate the volume:\n\n  return {\u0027provider_location\u0027: vol_name}\n\nThen on each place that we are currently doing\n\n  name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]\n\nWe should be using this value in a backward compatible way (for old volumes that have this issue):\n\n  name \u003d volume.provider_location or self.configuration.zadara_vol_name_template % volume.name\n\nI won\u0027t downvote since this is an already existing bug, not something this patch is introducing.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"de3405a9feee9f3f95b690b8696f3ec292e50aee","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            msg \u003d _(\u0027VPSA volume %s could not be found.\u0027) % vol_name"},{"line_number":176,"context_line":"            LOG.error(msg)"},{"line_number":177,"context_line":"            raise cinder_exception.VolumeNotFound(volume_id\u003dvolume[\u0027id\u0027])"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def delete_volume(self, volume):"},{"line_number":180,"context_line":"        \"\"\"Delete volume."},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"8f028ba8_9f50e529","line":178,"in_reply_to":"cc6a10a7_16b83daf","updated":"2021-02-12 17:33:59.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":182,"context_line":"        Return ok if doesn\u0027t exist. Auto detach from all servers."},{"line_number":183,"context_line":"        \"\"\""},{"line_number":184,"context_line":"        # Get volume name"},{"line_number":185,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":186,"context_line":"        volume \u003d self.vpsa._get_vpsa_volume(name)"},{"line_number":187,"context_line":"        if not volume:"},{"line_number":188,"context_line":"            LOG.warning(\u0027Volume %s could not be found. \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"f72f585f_c174be62","line":185,"range":{"start_line":185,"start_character":61,"end_line":185,"end_character":75},"updated":"2021-02-08 17:52:10.000000000","message":"-1: volume.name","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        Return ok if doesn\u0027t exist. Auto detach from all servers."},{"line_number":183,"context_line":"        \"\"\""},{"line_number":184,"context_line":"        # Get volume name"},{"line_number":185,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":186,"context_line":"        volume \u003d self.vpsa._get_vpsa_volume(name)"},{"line_number":187,"context_line":"        if not volume:"},{"line_number":188,"context_line":"            LOG.warning(\u0027Volume %s could not be found. \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"e5b62c92_b8599f35","line":185,"range":{"start_line":185,"start_character":61,"end_line":185,"end_character":75},"in_reply_to":"f72f585f_c174be62","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":189,"context_line":"                        \u0027It might be already deleted\u0027, name)"},{"line_number":190,"context_line":"            return"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        self.vpsa._detach_vpsa_volume(vpsa_vol\u003dvolume[\u0027name\u0027])"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        # Delete volume"},{"line_number":195,"context_line":"        self.vpsa_send_cmd(\u0027delete_volume\u0027, vpsa_vol\u003dvolume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"3d21a09b_7709c3bd","line":192,"range":{"start_line":192,"start_character":47,"end_line":192,"end_character":62},"updated":"2021-02-08 17:52:10.000000000","message":"volume.name","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                        \u0027It might be already deleted\u0027, name)"},{"line_number":190,"context_line":"            return"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        self.vpsa._detach_vpsa_volume(vpsa_vol\u003dvolume[\u0027name\u0027])"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        # Delete volume"},{"line_number":195,"context_line":"        self.vpsa_send_cmd(\u0027delete_volume\u0027, vpsa_vol\u003dvolume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"d9f8e86c_d744aaff","line":192,"range":{"start_line":192,"start_character":47,"end_line":192,"end_character":62},"in_reply_to":"3d21a09b_7709c3bd","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":192,"context_line":"        self.vpsa._detach_vpsa_volume(vpsa_vol\u003dvolume[\u0027name\u0027])"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        # Delete volume"},{"line_number":195,"context_line":"        self.vpsa_send_cmd(\u0027delete_volume\u0027, vpsa_vol\u003dvolume[\u0027name\u0027])"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":198,"context_line":"        \"\"\"Creates a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"38ee705a_53949ddf","line":195,"range":{"start_line":195,"start_character":53,"end_line":195,"end_character":67},"updated":"2021-02-08 17:52:10.000000000","message":"volume.name","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self.vpsa._detach_vpsa_volume(vpsa_vol\u003dvolume[\u0027name\u0027])"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        # Delete volume"},{"line_number":195,"context_line":"        self.vpsa_send_cmd(\u0027delete_volume\u0027, vpsa_vol\u003dvolume[\u0027name\u0027])"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":198,"context_line":"        \"\"\"Creates a snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"347c0074_e37e8eb9","line":195,"range":{"start_line":195,"start_character":53,"end_line":195,"end_character":67},"in_reply_to":"38ee705a_53949ddf","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":197,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":198,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        LOG.debug(\u0027Create snapshot: %s\u0027, snapshot[\u0027name\u0027])"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":203,"context_line":"        volume_name \u003d (self.configuration.zadara_vol_name_template"}],"source_content_type":"text/x-python","patch_set":1,"id":"51727e27_864ef451","line":200,"range":{"start_line":200,"start_character":41,"end_line":200,"end_character":58},"updated":"2021-02-08 17:52:10.000000000","message":"snapshot.name","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":198,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        LOG.debug(\u0027Create snapshot: %s\u0027, snapshot[\u0027name\u0027])"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":203,"context_line":"        volume_name \u003d (self.configuration.zadara_vol_name_template"}],"source_content_type":"text/x-python","patch_set":1,"id":"06329be5_c25bf333","line":200,"range":{"start_line":200,"start_character":41,"end_line":200,"end_character":58},"in_reply_to":"51727e27_864ef451","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":203,"context_line":"        volume_name \u003d (self.configuration.zadara_vol_name_template"},{"line_number":204,"context_line":"                       % snapshot[\u0027volume_name\u0027])"},{"line_number":205,"context_line":"        cg_name \u003d self.vpsa._get_volume_cg_name(volume_name)"},{"line_number":206,"context_line":"        if not cg_name:"},{"line_number":207,"context_line":"            msg \u003d _(\u0027Volume %(name)s not found\u0027) % {\u0027name\u0027: volume_name}"}],"source_content_type":"text/x-python","patch_set":1,"id":"9dee3836_1c1a3673","line":204,"range":{"start_line":204,"start_character":24,"end_line":204,"end_character":48},"updated":"2021-02-08 17:52:10.000000000","message":"snapshot.volume_name","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":203,"context_line":"        volume_name \u003d (self.configuration.zadara_vol_name_template"},{"line_number":204,"context_line":"                       % snapshot[\u0027volume_name\u0027])"},{"line_number":205,"context_line":"        cg_name \u003d self.vpsa._get_volume_cg_name(volume_name)"},{"line_number":206,"context_line":"        if not cg_name:"},{"line_number":207,"context_line":"            msg \u003d _(\u0027Volume %(name)s not found\u0027) % {\u0027name\u0027: volume_name}"}],"source_content_type":"text/x-python","patch_set":1,"id":"54c50cea_60eb703f","line":204,"range":{"start_line":204,"start_character":24,"end_line":204,"end_character":48},"in_reply_to":"9dee3836_1c1a3673","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":211,"context_line":"        self.vpsa_send_cmd(\u0027create_snapshot\u0027,"},{"line_number":212,"context_line":"                           cg_name\u003dcg_name,"},{"line_number":213,"context_line":"                           snap_name\u003dsnapshot[\u0027name\u0027])"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":216,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a023259_49616bb8","line":214,"updated":"2021-02-08 17:52:10.000000000","message":"Same as with the volume, we need to return `provider_location`","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":true,"context_lines":[{"line_number":211,"context_line":"        self.vpsa_send_cmd(\u0027create_snapshot\u0027,"},{"line_number":212,"context_line":"                           cg_name\u003dcg_name,"},{"line_number":213,"context_line":"                           snap_name\u003dsnapshot[\u0027name\u0027])"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":216,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"b15ab2e2_fa0c6d7d","line":214,"in_reply_to":"7a023259_49616bb8","updated":"2021-02-12 17:29:04.000000000","message":"Added provider_location for both volumes and snapshots.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"de3405a9feee9f3f95b690b8696f3ec292e50aee","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.vpsa_send_cmd(\u0027create_snapshot\u0027,"},{"line_number":212,"context_line":"                           cg_name\u003dcg_name,"},{"line_number":213,"context_line":"                           snap_name\u003dsnapshot[\u0027name\u0027])"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":216,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"f7423db7_08603f73","line":214,"in_reply_to":"b15ab2e2_fa0c6d7d","updated":"2021-02-12 17:33:59.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":291,"context_line":"        \"\"\"Extend an existing volume.\"\"\""},{"line_number":292,"context_line":"        # Get volume name"},{"line_number":293,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":294,"context_line":"        volume \u003d self.vpsa._get_vpsa_volume(name)"},{"line_number":295,"context_line":"        if not volume:"},{"line_number":296,"context_line":"            msg \u003d (_(\u0027Volume %(name)s could not be found. \u0027"},{"line_number":297,"context_line":"                     \u0027It might be already deleted\u0027) % {\u0027name\u0027: name})"}],"source_content_type":"text/x-python","patch_set":1,"id":"a23b5f9a_48740a8c","line":294,"updated":"2021-02-08 17:52:10.000000000","message":"nit: overwriting the volume parameter is usually not a good idea, it makes code harder to read","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"de3405a9feee9f3f95b690b8696f3ec292e50aee","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        \"\"\"Extend an existing volume.\"\"\""},{"line_number":292,"context_line":"        # Get volume name"},{"line_number":293,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":294,"context_line":"        volume \u003d self.vpsa._get_vpsa_volume(name)"},{"line_number":295,"context_line":"        if not volume:"},{"line_number":296,"context_line":"            msg \u003d (_(\u0027Volume %(name)s could not be found. \u0027"},{"line_number":297,"context_line":"                     \u0027It might be already deleted\u0027) % {\u0027name\u0027: name})"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ed540df_fe28e62c","line":294,"in_reply_to":"89a57f89_98fb5065","updated":"2021-02-12 17:33:59.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":true,"context_lines":[{"line_number":291,"context_line":"        \"\"\"Extend an existing volume.\"\"\""},{"line_number":292,"context_line":"        # Get volume name"},{"line_number":293,"context_line":"        name \u003d self.configuration.zadara_vol_name_template % volume[\u0027name\u0027]"},{"line_number":294,"context_line":"        volume \u003d self.vpsa._get_vpsa_volume(name)"},{"line_number":295,"context_line":"        if not volume:"},{"line_number":296,"context_line":"            msg \u003d (_(\u0027Volume %(name)s could not be found. \u0027"},{"line_number":297,"context_line":"                     \u0027It might be already deleted\u0027) % {\u0027name\u0027: name})"}],"source_content_type":"text/x-python","patch_set":1,"id":"89a57f89_98fb5065","line":294,"in_reply_to":"a23b5f9a_48740a8c","updated":"2021-02-12 17:29:04.000000000","message":"Using a new variable vpsa_volume.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":297,"context_line":"                     \u0027It might be already deleted\u0027) % {\u0027name\u0027: name})"},{"line_number":298,"context_line":"            LOG.error(msg)"},{"line_number":299,"context_line":"            raise zadara_exception.ZadaraVolumeNotFound(reason\u003dmsg)"},{"line_number":300,"context_line":"        size \u003d volume[\u0027virtual_capacity\u0027]"},{"line_number":301,"context_line":"        if new_size \u003c size:"},{"line_number":302,"context_line":"            raise cinder_exception.InvalidInput("},{"line_number":303,"context_line":"                reason\u003d_(\u0027%(new_size)s \u003c current size %(size)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":1,"id":"aeb0d144_cd828ef6","line":300,"updated":"2021-02-08 17:52:10.000000000","message":"?: Is virtual_capacity reported as an int and in GB?","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"de3405a9feee9f3f95b690b8696f3ec292e50aee","unresolved":false,"context_lines":[{"line_number":297,"context_line":"                     \u0027It might be already deleted\u0027) % {\u0027name\u0027: name})"},{"line_number":298,"context_line":"            LOG.error(msg)"},{"line_number":299,"context_line":"            raise zadara_exception.ZadaraVolumeNotFound(reason\u003dmsg)"},{"line_number":300,"context_line":"        size \u003d volume[\u0027virtual_capacity\u0027]"},{"line_number":301,"context_line":"        if new_size \u003c size:"},{"line_number":302,"context_line":"            raise cinder_exception.InvalidInput("},{"line_number":303,"context_line":"                reason\u003d_(\u0027%(new_size)s \u003c current size %(size)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":1,"id":"58760268_ef594cbd","line":300,"in_reply_to":"15773ed1_75546ec7","updated":"2021-02-12 17:33:59.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":true,"context_lines":[{"line_number":297,"context_line":"                     \u0027It might be already deleted\u0027) % {\u0027name\u0027: name})"},{"line_number":298,"context_line":"            LOG.error(msg)"},{"line_number":299,"context_line":"            raise zadara_exception.ZadaraVolumeNotFound(reason\u003dmsg)"},{"line_number":300,"context_line":"        size \u003d volume[\u0027virtual_capacity\u0027]"},{"line_number":301,"context_line":"        if new_size \u003c size:"},{"line_number":302,"context_line":"            raise cinder_exception.InvalidInput("},{"line_number":303,"context_line":"                reason\u003d_(\u0027%(new_size)s \u003c current size %(size)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":1,"id":"15773ed1_75546ec7","line":300,"in_reply_to":"aeb0d144_cd828ef6","updated":"2021-02-12 17:29:04.000000000","message":"Yes. It is of type integer and reported in GB.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":364,"context_line":"                not_safe_msgs.append(_(\u0027Volume connected to host(s) %s\u0027)"},{"line_number":365,"context_line":"                                     % host_list)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"            if volumes_not_available.get(vol_name):"},{"line_number":368,"context_line":"                not_safe_msgs.append(_(\u0027Volume not available\u0027))"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            if cinder_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"a2bcf437_d804328b","line":367,"updated":"2021-02-08 17:52:10.000000000","message":"?: Shouldn\u0027t this be an \u0027elif\u0027?  If it\u0027s in use it cannot be in the list of volumes_not_available, because of L349","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":364,"context_line":"                not_safe_msgs.append(_(\u0027Volume connected to host(s) %s\u0027)"},{"line_number":365,"context_line":"                                     % host_list)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"            if volumes_not_available.get(vol_name):"},{"line_number":368,"context_line":"                not_safe_msgs.append(_(\u0027Volume not available\u0027))"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            if cinder_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"e508b32c_b59c39e3","line":367,"in_reply_to":"a2bcf437_d804328b","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":371,"context_line":"                not_safe_msgs.append(_(\u0027Volume already managed\u0027))"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"            is_safe \u003d (len(not_safe_msgs) \u003d\u003d 0)"},{"line_number":374,"context_line":"            reason_not_safe \u003d \u0027\u0027"},{"line_number":375,"context_line":"            if not is_safe:"},{"line_number":376,"context_line":"                for i, msg in enumerate(not_safe_msgs):"},{"line_number":377,"context_line":"                    if i \u003e 0:"},{"line_number":378,"context_line":"                        reason_not_safe +\u003d \u0027 \u0026\u0026 \u0027"},{"line_number":379,"context_line":"                    reason_not_safe +\u003d \"%s\" % msg"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"            manageable_vols.append({"},{"line_number":382,"context_line":"                \u0027reference\u0027: {\u0027name\u0027: vol_display_name},"}],"source_content_type":"text/x-python","patch_set":1,"id":"f4fbec5d_9ff1abfc","line":379,"range":{"start_line":374,"start_character":0,"end_line":379,"end_character":49},"updated":"2021-02-08 17:52:10.000000000","message":"-1: We can do this for all cases and get the same result:\n\n  reason_not_safe \u003d \u0027 \u0026\u0026 \u0027.join(not_safe_msgs)","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                not_safe_msgs.append(_(\u0027Volume already managed\u0027))"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"            is_safe \u003d (len(not_safe_msgs) \u003d\u003d 0)"},{"line_number":374,"context_line":"            reason_not_safe \u003d \u0027\u0027"},{"line_number":375,"context_line":"            if not is_safe:"},{"line_number":376,"context_line":"                for i, msg in enumerate(not_safe_msgs):"},{"line_number":377,"context_line":"                    if i \u003e 0:"},{"line_number":378,"context_line":"                        reason_not_safe +\u003d \u0027 \u0026\u0026 \u0027"},{"line_number":379,"context_line":"                    reason_not_safe +\u003d \"%s\" % msg"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"            manageable_vols.append({"},{"line_number":382,"context_line":"                \u0027reference\u0027: {\u0027name\u0027: vol_display_name},"}],"source_content_type":"text/x-python","patch_set":1,"id":"94e66352_d6d08de3","line":379,"range":{"start_line":374,"start_character":0,"end_line":379,"end_character":49},"in_reply_to":"f4fbec5d_9ff1abfc","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":729,"context_line":"        storage_protocol \u003d (\u0027iSER\u0027 if"},{"line_number":730,"context_line":"                            (self.configuration.safe_get(\u0027zadara_use_iser\u0027))"},{"line_number":731,"context_line":"                            else \u0027iSCSI\u0027)"},{"line_number":732,"context_line":"        data[\"volume_backend_name\"] \u003d backend_name or self.__class__.__name__"},{"line_number":733,"context_line":"        data[\"vendor_name\"] \u003d \u0027Zadara Storage\u0027"},{"line_number":734,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":735,"context_line":"        data[\"storage_protocol\"] \u003d storage_protocol"},{"line_number":736,"context_line":"        data[\u0027reserved_percentage\u0027] \u003d self.configuration.reserved_percentage"},{"line_number":737,"context_line":"        data[\u0027QoS_support\u0027] \u003d False"},{"line_number":738,"context_line":"        data[\u0027multiattach\u0027] \u003d True"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"        (total, free) \u003d self.vpsa._get_pool_capacity(self.configuration."},{"line_number":741,"context_line":"                                                     zadara_vpsa_poolname)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f3a53c42_22d5f4fb","line":738,"range":{"start_line":732,"start_character":0,"end_line":738,"end_character":34},"updated":"2021-02-08 17:52:10.000000000","message":"nit: It\u0027s easier to read if we create the whole dict:\n\n  data \u003d {\n      \"volume_backend_name\": backend_name or self.__class__.__name__,\n      ...\n  }\n\nor:\n\n  data \u003d dict(\n      volume_backend_name\u003dbackend_name or self.__class__.__name__,\n      ...\n  )\n\nand we can do it after L743 and create it with all the data","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2c70bb7b2bddd7997970648e69f2b06947afdef6","unresolved":false,"context_lines":[{"line_number":729,"context_line":"        storage_protocol \u003d (\u0027iSER\u0027 if"},{"line_number":730,"context_line":"                            (self.configuration.safe_get(\u0027zadara_use_iser\u0027))"},{"line_number":731,"context_line":"                            else \u0027iSCSI\u0027)"},{"line_number":732,"context_line":"        data[\"volume_backend_name\"] \u003d backend_name or self.__class__.__name__"},{"line_number":733,"context_line":"        data[\"vendor_name\"] \u003d \u0027Zadara Storage\u0027"},{"line_number":734,"context_line":"        data[\"driver_version\"] \u003d self.VERSION"},{"line_number":735,"context_line":"        data[\"storage_protocol\"] \u003d storage_protocol"},{"line_number":736,"context_line":"        data[\u0027reserved_percentage\u0027] \u003d self.configuration.reserved_percentage"},{"line_number":737,"context_line":"        data[\u0027QoS_support\u0027] \u003d False"},{"line_number":738,"context_line":"        data[\u0027multiattach\u0027] \u003d True"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"        (total, free) \u003d self.vpsa._get_pool_capacity(self.configuration."},{"line_number":741,"context_line":"                                                     zadara_vpsa_poolname)"}],"source_content_type":"text/x-python","patch_set":1,"id":"83b04c02_ce421c16","line":738,"range":{"start_line":732,"start_character":0,"end_line":738,"end_character":34},"in_reply_to":"f3a53c42_22d5f4fb","updated":"2021-02-12 17:29:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"34b47bd9dba2b08adf27ef1fd516e4f932e1dee6","unresolved":true,"context_lines":[{"line_number":66,"context_line":"        20.12-21 - Fixing review comments from the openstack community."},{"line_number":67,"context_line":"        20.12-22 - Fixing review comments from the openstack cinder community."},{"line_number":68,"context_line":"        20.12-23 - Fixing review comments from the openstack cinder community."},{"line_number":69,"context_line":"        20.12-24 - Fixing review comments from the openstack cinder community."},{"line_number":70,"context_line":"    \"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    VERSION \u003d \u002720.12-24\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"52210bf1_47fd96c9","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":78},"updated":"2021-02-24 14:50:12.000000000","message":"Line 65-69 shouldn\u0027t be added, please remove them","commit_id":"aff92dfb8509c5d46c5afaddef69e4f29a4f5684"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1c2306f618449f2f606384d08d1e40b0f221e47a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        20.12-21 - Fixing review comments from the openstack community."},{"line_number":67,"context_line":"        20.12-22 - Fixing review comments from the openstack cinder community."},{"line_number":68,"context_line":"        20.12-23 - Fixing review comments from the openstack cinder community."},{"line_number":69,"context_line":"        20.12-24 - Fixing review comments from the openstack cinder community."},{"line_number":70,"context_line":"    \"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    VERSION \u003d \u002720.12-24\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"b1676422_32acfc03","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":78},"in_reply_to":"52210bf1_47fd96c9","updated":"2021-03-18 11:59:56.000000000","message":"Done","commit_id":"aff92dfb8509c5d46c5afaddef69e4f29a4f5684"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"afbdeabf40c9330a987363872acf5354d9029967","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        20.12-03 - Adding the metadata support while creating volume to"},{"line_number":64,"context_line":"                   configure vpsa."},{"line_number":65,"context_line":"        20.12-20 - IPv6 connectivity support for Cinder driver"},{"line_number":66,"context_line":"        20.12-24 - Optimizing get manageable volumes and snapshots"},{"line_number":67,"context_line":"    \"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    VERSION \u003d \u002720.12-24\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"d8f85bfc_a703ee2f","line":66,"updated":"2021-03-11 02:58:49.000000000","message":"We discussed the versioning on PS 7.  We can see what other reviewers think, but I don\u0027t like this for the reasons mentioned in my comment on PS 7.","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"afbdeabf40c9330a987363872acf5354d9029967","unresolved":true,"context_lines":[{"line_number":744,"context_line":"        self.vpsa._detach_vpsa_volume(vpsa_vol\u003dvpsa_volume,"},{"line_number":745,"context_line":"                                      vpsa_srv\u003dvpsa_srv)"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":748,"context_line":"        \"\"\"Get volume stats."},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"        If \u0027refresh\u0027 is True, run update the stats first."},{"line_number":751,"context_line":"        \"\"\""},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"        if refresh:"},{"line_number":754,"context_line":"            self._update_volume_stats()"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"        return self._stats"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"    def _update_volume_stats(self):"},{"line_number":759,"context_line":"        \"\"\"Retrieve stats info from volume group.\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"643621cc_a1a585b5","line":756,"range":{"start_line":747,"start_character":0,"end_line":756,"end_character":26},"updated":"2021-03-11 02:58:49.000000000","message":"This function is already implemented in the BaseVD class, which you are inheriting through the ISCSIDriver through the VolumeDriver, so don\u0027t override it here.  All you need to do is provide the implementation of _update_volume_stats(), which you do at lines 758-780.","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"f55a5f9c48a70065f5a9bcd0bb87404400f32bef","unresolved":false,"context_lines":[{"line_number":744,"context_line":"        self.vpsa._detach_vpsa_volume(vpsa_vol\u003dvpsa_volume,"},{"line_number":745,"context_line":"                                      vpsa_srv\u003dvpsa_srv)"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":748,"context_line":"        \"\"\"Get volume stats."},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"        If \u0027refresh\u0027 is True, run update the stats first."},{"line_number":751,"context_line":"        \"\"\""},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"        if refresh:"},{"line_number":754,"context_line":"            self._update_volume_stats()"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"        return self._stats"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"    def _update_volume_stats(self):"},{"line_number":759,"context_line":"        \"\"\"Retrieve stats info from volume group.\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"9ac92dc9_9dcc1e09","line":756,"range":{"start_line":747,"start_character":0,"end_line":756,"end_character":26},"in_reply_to":"643621cc_a1a585b5","updated":"2021-03-14 17:23:30.000000000","message":"Done","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"afbdeabf40c9330a987363872acf5354d9029967","unresolved":true,"context_lines":[{"line_number":758,"context_line":"    def _update_volume_stats(self):"},{"line_number":759,"context_line":"        \"\"\"Retrieve stats info from volume group.\"\"\""},{"line_number":760,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":761,"context_line":"        data \u003d {}"},{"line_number":762,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":763,"context_line":"        storage_protocol \u003d (\u0027iSER\u0027 if"},{"line_number":764,"context_line":"                            (self.configuration.safe_get(\u0027zadara_use_iser\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"1b9ce659_7712f29a","line":761,"range":{"start_line":761,"start_character":8,"end_line":761,"end_character":17},"updated":"2021-03-11 02:58:49.000000000","message":"you don\u0027t need this, you are initializing data a line 768.","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"f55a5f9c48a70065f5a9bcd0bb87404400f32bef","unresolved":false,"context_lines":[{"line_number":758,"context_line":"    def _update_volume_stats(self):"},{"line_number":759,"context_line":"        \"\"\"Retrieve stats info from volume group.\"\"\""},{"line_number":760,"context_line":"        LOG.debug(\"Updating volume stats\")"},{"line_number":761,"context_line":"        data \u003d {}"},{"line_number":762,"context_line":"        backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)"},{"line_number":763,"context_line":"        storage_protocol \u003d (\u0027iSER\u0027 if"},{"line_number":764,"context_line":"                            (self.configuration.safe_get(\u0027zadara_use_iser\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"6ec0bcc7_91ee19f1","line":761,"range":{"start_line":761,"start_character":8,"end_line":761,"end_character":17},"in_reply_to":"1b9ce659_7712f29a","updated":"2021-03-14 17:23:30.000000000","message":"Done","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    def get_driver_options():"},{"line_number":86,"context_line":"        driver_opts \u003d []"},{"line_number":87,"context_line":"        driver_opts.extend(common.zadara_opts)"},{"line_number":88,"context_line":"        driver_opts.extend(cinder_opts)"},{"line_number":89,"context_line":"        return driver_opts"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def _check_access_key_validity(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1c82df00_1f47b9cc","line":88,"updated":"2021-03-17 15:17:04.000000000","message":"We should also return configuration options that are being used by this and other drivers.\n\nFor example, driver_ssl_cert_path is being used in L106, yet it is not being returned by this method, so installations tools will not know that this driver can use/requires that option.\n\nIt will need a follow up patch if this patch is merged as it is.","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    def get_driver_options():"},{"line_number":86,"context_line":"        driver_opts \u003d []"},{"line_number":87,"context_line":"        driver_opts.extend(common.zadara_opts)"},{"line_number":88,"context_line":"        driver_opts.extend(cinder_opts)"},{"line_number":89,"context_line":"        return driver_opts"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def _check_access_key_validity(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"89f3fcd9_faaa0d7f","line":88,"in_reply_to":"1c82df00_1f47b9cc","updated":"2021-03-18 11:46:34.000000000","message":"Keeping timeline in mind, I would prefer to merge the current change and follow up to address this comment. I will share here the launchpad bug.","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"4cdaa20e9217c4e05fd40917de56df7185ce1f46","unresolved":true,"context_lines":[{"line_number":85,"context_line":"    def get_driver_options():"},{"line_number":86,"context_line":"        driver_opts \u003d []"},{"line_number":87,"context_line":"        driver_opts.extend(common.zadara_opts)"},{"line_number":88,"context_line":"        driver_opts.extend(cinder_opts)"},{"line_number":89,"context_line":"        return driver_opts"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def _check_access_key_validity(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a984375_25b9c654","line":88,"in_reply_to":"89f3fcd9_faaa0d7f","updated":"2021-03-18 18:13:36.000000000","message":"Sounds good","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":267,"context_line":"                           snapshot.volume_name))"},{"line_number":268,"context_line":"            LOG.error(\u0027Volume %(name)s not found\u0027,"},{"line_number":269,"context_line":"                      {\u0027name\u0027: volume_name})"},{"line_number":270,"context_line":"            raise cinder_exception.VolumeNotFound(volume_id\u003dvolume.id)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":273,"context_line":"        cg_name \u003d vpsa_volume[\u0027cg_name\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"0d220699_991e6ac3","line":270,"updated":"2021-03-17 15:17:04.000000000","message":"I understand the logic, but this is going to look weird in the logs, because we are complaining that we cannot find a volume when we were asked to look for a snapshot.","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":true,"context_lines":[{"line_number":267,"context_line":"                           snapshot.volume_name))"},{"line_number":268,"context_line":"            LOG.error(\u0027Volume %(name)s not found\u0027,"},{"line_number":269,"context_line":"                      {\u0027name\u0027: volume_name})"},{"line_number":270,"context_line":"            raise cinder_exception.VolumeNotFound(volume_id\u003dvolume.id)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":273,"context_line":"        cg_name \u003d vpsa_volume[\u0027cg_name\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"7dd620a9_c0947ed6","line":270,"in_reply_to":"0d220699_991e6ac3","updated":"2021-03-18 11:46:34.000000000","message":"Changed it to log and raise exception that snapshot not found.","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1c2306f618449f2f606384d08d1e40b0f221e47a","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                           snapshot.volume_name))"},{"line_number":268,"context_line":"            LOG.error(\u0027Volume %(name)s not found\u0027,"},{"line_number":269,"context_line":"                      {\u0027name\u0027: volume_name})"},{"line_number":270,"context_line":"            raise cinder_exception.VolumeNotFound(volume_id\u003dvolume.id)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":273,"context_line":"        cg_name \u003d vpsa_volume[\u0027cg_name\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"66d68b68_dc8e631f","line":270,"in_reply_to":"7dd620a9_c0947ed6","updated":"2021-03-18 11:59:56.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":294,"context_line":"        LOG.debug(\u0027Creating clone of volume: %s\u0027, src_vref.name)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        vpsa_volume \u003d self._get_vpsa_volume(src_vref)"},{"line_number":297,"context_line":"        if not vpsa_volume:"},{"line_number":298,"context_line":"            vol_name \u003d (self._get_zadara_vol_template_name("},{"line_number":299,"context_line":"                        src_vref.name))"},{"line_number":300,"context_line":"            LOG.error(\u0027Volume %(name)s not found\u0027, {\u0027name\u0027: vol_name})"},{"line_number":301,"context_line":"            raise cinder_exception.VolumeNotFound(volume_id\u003dvolume.id)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":304,"context_line":"        cg_name \u003d vpsa_volume[\u0027cg_name\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"2e45a7a6_6d8fd77d","line":301,"range":{"start_line":297,"start_character":0,"end_line":301,"end_character":70},"updated":"2021-03-17 15:17:04.000000000","message":"nit: I see us doing this same code in multiple places, couldn\u0027t we add it to _get_vpsa_volume and then use a parameter (for example fail_not_found) to raise it when not found?","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        LOG.debug(\u0027Creating clone of volume: %s\u0027, src_vref.name)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        vpsa_volume \u003d self._get_vpsa_volume(src_vref)"},{"line_number":297,"context_line":"        if not vpsa_volume:"},{"line_number":298,"context_line":"            vol_name \u003d (self._get_zadara_vol_template_name("},{"line_number":299,"context_line":"                        src_vref.name))"},{"line_number":300,"context_line":"            LOG.error(\u0027Volume %(name)s not found\u0027, {\u0027name\u0027: vol_name})"},{"line_number":301,"context_line":"            raise cinder_exception.VolumeNotFound(volume_id\u003dvolume.id)"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        # Retrieve the CG name for the base volume"},{"line_number":304,"context_line":"        cg_name \u003d vpsa_volume[\u0027cg_name\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f28eabf_fa557829","line":301,"range":{"start_line":297,"start_character":0,"end_line":301,"end_character":70},"in_reply_to":"2e45a7a6_6d8fd77d","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":363,"context_line":"                cinder_name \u003d (self._get_zadara_vol_template_name("},{"line_number":364,"context_line":"                               cinder_vol.name))"},{"line_number":365,"context_line":"                volumes \u003d (list(filter(lambda volume:"},{"line_number":366,"context_line":"                                (volume[\u0027display_name\u0027] \u003d\u003d cinder_name),"},{"line_number":367,"context_line":"                                all_vpsa_volumes)))"},{"line_number":368,"context_line":"            if len(volumes) \u003d\u003d 0:"},{"line_number":369,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":14,"id":"ec51224a_0cd15107","line":366,"range":{"start_line":366,"start_character":41,"end_line":366,"end_character":53},"updated":"2021-03-17 15:17:04.000000000","message":"?: Shouldn\u0027t this be \u0027name\u0027 like in the previous case?\n\nI don\u0027t understand the difference in this driver\u0027s case for \u0027name\u0027 and \u0027display_name\u0027, and I\u0027m getting confused with Cinder\u0027s name and display_name.","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"2bbd37c4844df2c7312dc2e7d90a4a62d4db16fd","unresolved":true,"context_lines":[{"line_number":363,"context_line":"                cinder_name \u003d (self._get_zadara_vol_template_name("},{"line_number":364,"context_line":"                               cinder_vol.name))"},{"line_number":365,"context_line":"                volumes \u003d (list(filter(lambda volume:"},{"line_number":366,"context_line":"                                (volume[\u0027display_name\u0027] \u003d\u003d cinder_name),"},{"line_number":367,"context_line":"                                all_vpsa_volumes)))"},{"line_number":368,"context_line":"            if len(volumes) \u003d\u003d 0:"},{"line_number":369,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":14,"id":"068f9a5d_65f6b9fa","line":366,"range":{"start_line":366,"start_character":41,"end_line":366,"end_character":53},"in_reply_to":"ec51224a_0cd15107","updated":"2021-03-18 10:05:47.000000000","message":"Below is a sample of the volume query response from the zadara backend:\n\n{\"name\":\"volume-00000064\",\"display_name\":\"OS_volume-a262dba9-937a-4057-88f3-f0eba2e6ad44\",\"cg_display_name\":\"OS_volume-a262dba9-937a-4057-88f3-f0eba2e6ad44\",\"cg_name\":\"cg-00000064\",\"cg_user_created\":\"NO\",\"pool_display_name\":\"RAID-10-Pool-1\",\"pool_name\":\"pool-00010001\",\"pool_version\":2,\"av_scan_policy_name\":null,\"status\":\"Available\",\"provisioned_capacity\":1,\"server_name\":null,\" .....}\n\nFor each cinder volume with given name as \"volume.name\", zadara driver will use a template and creates a volume at the backend with display_name as \"(OS_\u003cvolume.name\u003e)\". The volume response field \"name\" corresponds to the backend id(volume-00000064). This backend \u0027id\u0027 is stored in cinder volume as provider_location.\n\nI hope I am able to explain and reduce the confusion. Please do not correlate terms like id,name of the cinder volume with zadara backend volume. Thanks.","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":365,"context_line":"                volumes \u003d (list(filter(lambda volume:"},{"line_number":366,"context_line":"                                (volume[\u0027display_name\u0027] \u003d\u003d cinder_name),"},{"line_number":367,"context_line":"                                all_vpsa_volumes)))"},{"line_number":368,"context_line":"            if len(volumes) \u003d\u003d 0:"},{"line_number":369,"context_line":"                continue"},{"line_number":370,"context_line":"            for volume in volumes:"},{"line_number":371,"context_line":"                existing_vols[volume[\u0027name\u0027]] \u003d cinder_vol.name_id"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"a25849fd_28c6252f","line":369,"range":{"start_line":368,"start_character":0,"end_line":369,"end_character":24},"updated":"2021-03-17 15:17:04.000000000","message":"nit: Not really needed, if there are no volumes the next for loop won\u0027t do anything anyway","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                volumes \u003d (list(filter(lambda volume:"},{"line_number":366,"context_line":"                                (volume[\u0027display_name\u0027] \u003d\u003d cinder_name),"},{"line_number":367,"context_line":"                                all_vpsa_volumes)))"},{"line_number":368,"context_line":"            if len(volumes) \u003d\u003d 0:"},{"line_number":369,"context_line":"                continue"},{"line_number":370,"context_line":"            for volume in volumes:"},{"line_number":371,"context_line":"                existing_vols[volume[\u0027name\u0027]] \u003d cinder_vol.name_id"},{"line_number":372,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"90c64e0b_5185eb80","line":369,"range":{"start_line":368,"start_character":0,"end_line":369,"end_character":24},"in_reply_to":"a25849fd_28c6252f","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":374,"context_line":"        volumes_in_use \u003d {}"},{"line_number":375,"context_line":"        volumes_not_available \u003d {}"},{"line_number":376,"context_line":"        for volume in all_vpsa_volumes:"},{"line_number":377,"context_line":"            if existing_vols.get(volume[\u0027name\u0027]):"},{"line_number":378,"context_line":"                continue"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"            if volume[\u0027status\u0027] \u003d\u003d \u0027In-use\u0027:"}],"source_content_type":"text/x-python","patch_set":14,"id":"e4aa68fc_5b6a0199","line":377,"updated":"2021-03-17 15:17:04.000000000","message":"nit:\n\n if volume[\u0027name\u0027] in existing_vols:","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        volumes_in_use \u003d {}"},{"line_number":375,"context_line":"        volumes_not_available \u003d {}"},{"line_number":376,"context_line":"        for volume in all_vpsa_volumes:"},{"line_number":377,"context_line":"            if existing_vols.get(volume[\u0027name\u0027]):"},{"line_number":378,"context_line":"                continue"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"            if volume[\u0027status\u0027] \u003d\u003d \u0027In-use\u0027:"}],"source_content_type":"text/x-python","patch_set":14,"id":"0c0acc0c_89184770","line":377,"in_reply_to":"e4aa68fc_5b6a0199","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":393,"context_line":"            cinder_id \u003d existing_vols.get(vol_name)"},{"line_number":394,"context_line":"            not_safe_msgs \u003d []"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"            if volumes_in_use.get(vol_name):"},{"line_number":397,"context_line":"                host_list \u003d volumes_in_use[vol_name]"},{"line_number":398,"context_line":"                not_safe_msgs.append(_(\u0027Volume connected to host(s) %s\u0027)"},{"line_number":399,"context_line":"                                     % host_list)"}],"source_content_type":"text/x-python","patch_set":14,"id":"df697d78_7186cc92","line":396,"range":{"start_line":396,"start_character":12,"end_line":396,"end_character":44},"updated":"2021-03-17 15:17:04.000000000","message":"nit:\n\n if vol_name in volumes_in_use:","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":393,"context_line":"            cinder_id \u003d existing_vols.get(vol_name)"},{"line_number":394,"context_line":"            not_safe_msgs \u003d []"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"            if volumes_in_use.get(vol_name):"},{"line_number":397,"context_line":"                host_list \u003d volumes_in_use[vol_name]"},{"line_number":398,"context_line":"                not_safe_msgs.append(_(\u0027Volume connected to host(s) %s\u0027)"},{"line_number":399,"context_line":"                                     % host_list)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ae8a0df4_5b04780c","line":396,"range":{"start_line":396,"start_character":12,"end_line":396,"end_character":44},"in_reply_to":"df697d78_7186cc92","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":true,"context_lines":[{"line_number":398,"context_line":"                not_safe_msgs.append(_(\u0027Volume connected to host(s) %s\u0027)"},{"line_number":399,"context_line":"                                     % host_list)"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"            elif volumes_not_available.get(vol_name):"},{"line_number":402,"context_line":"                not_safe_msgs.append(_(\u0027Volume not available\u0027))"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"            if cinder_id:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7c8c61df_59b241bd","line":401,"range":{"start_line":401,"start_character":12,"end_line":401,"end_character":53},"updated":"2021-03-17 15:17:04.000000000","message":"nit:\n\n elif vol_name in volumes_not_available:","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"43a1c489667726baaa5ef7e70e7a7f356e152942","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                not_safe_msgs.append(_(\u0027Volume connected to host(s) %s\u0027)"},{"line_number":399,"context_line":"                                     % host_list)"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"            elif volumes_not_available.get(vol_name):"},{"line_number":402,"context_line":"                not_safe_msgs.append(_(\u0027Volume not available\u0027))"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"            if cinder_id:"}],"source_content_type":"text/x-python","patch_set":14,"id":"4a9e58bb_3b07d50d","line":401,"range":{"start_line":401,"start_character":12,"end_line":401,"end_character":53},"in_reply_to":"7c8c61df_59b241bd","updated":"2021-03-18 11:46:34.000000000","message":"Done","commit_id":"6f754e25cdfa571c09936762419ace34739c573e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"4cdaa20e9217c4e05fd40917de56df7185ce1f46","unresolved":true,"context_lines":[{"line_number":132,"context_line":"        if not vpsa_volume:"},{"line_number":133,"context_line":"            vol_name \u003d self._get_zadara_vol_template_name(volume.name)"},{"line_number":134,"context_line":"            msg \u003d (_(\u0027Backend Volume %(name)s not found\u0027) % {\u0027name\u0027: vol_name})"},{"line_number":135,"context_line":"            LOG.error(msg)"},{"line_number":136,"context_line":"            if raise_exception:"},{"line_number":137,"context_line":"                raise cinder_exception.VolumeDriverException(message\u003dmsg)"},{"line_number":138,"context_line":"        return vpsa_volume"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def vpsa_send_cmd(self, cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":15,"id":"e8fe7e04_cbc52c0a","line":137,"range":{"start_line":135,"start_character":0,"end_line":137,"end_character":73},"updated":"2021-03-18 18:13:36.000000000","message":"nit: We have changed from logging a warning on delete_volume and delete_snapshot to logging an error.\n\nWe can fix this by doing:\n\n            if raise_exception:\n                LOG.error(msg)\n                raise cinder_exception.VolumeDriverException(message\u003dmsg)\n            LOG.warning(msg)","commit_id":"1aec77b9c1ab8b8c9bdd669cc462e5a70c71937a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"70a5d9b4f2b149c93aa37ae296f920f64e08d6f1","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        if not vpsa_volume:"},{"line_number":133,"context_line":"            vol_name \u003d self._get_zadara_vol_template_name(volume.name)"},{"line_number":134,"context_line":"            msg \u003d (_(\u0027Backend Volume %(name)s not found\u0027) % {\u0027name\u0027: vol_name})"},{"line_number":135,"context_line":"            LOG.error(msg)"},{"line_number":136,"context_line":"            if raise_exception:"},{"line_number":137,"context_line":"                raise cinder_exception.VolumeDriverException(message\u003dmsg)"},{"line_number":138,"context_line":"        return vpsa_volume"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def vpsa_send_cmd(self, cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":15,"id":"d26df6cb_1775b9c1","line":137,"range":{"start_line":135,"start_character":0,"end_line":137,"end_character":73},"in_reply_to":"e8fe7e04_cbc52c0a","updated":"2021-03-18 18:25:30.000000000","message":"Done","commit_id":"1aec77b9c1ab8b8c9bdd669cc462e5a70c71937a"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1fccd4cabd4f86069325d6d1a11d7b381078f46e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        if not vpsa_volume:"},{"line_number":133,"context_line":"            vol_name \u003d self._get_zadara_vol_template_name(volume.name)"},{"line_number":134,"context_line":"            msg \u003d (_(\u0027Backend Volume %(name)s not found\u0027) % {\u0027name\u0027: vol_name})"},{"line_number":135,"context_line":"            LOG.error(msg)"},{"line_number":136,"context_line":"            if raise_exception:"},{"line_number":137,"context_line":"                raise cinder_exception.VolumeDriverException(message\u003dmsg)"},{"line_number":138,"context_line":"        return vpsa_volume"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def vpsa_send_cmd(self, cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":15,"id":"f9e7b6e3_dd4c86d0","line":137,"range":{"start_line":135,"start_character":0,"end_line":137,"end_character":73},"in_reply_to":"e8fe7e04_cbc52c0a","updated":"2021-03-18 18:28:02.000000000","message":"Done","commit_id":"1aec77b9c1ab8b8c9bdd669cc462e5a70c71937a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"4cdaa20e9217c4e05fd40917de56df7185ce1f46","unresolved":true,"context_lines":[{"line_number":340,"context_line":"                                (volume[\u0027display_name\u0027] \u003d\u003d cinder_name),"},{"line_number":341,"context_line":"                                all_vpsa_volumes)))"},{"line_number":342,"context_line":"            for volume in volumes:"},{"line_number":343,"context_line":"                existing_vols[volume[\u0027name\u0027]] \u003d cinder_vol.name_id"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        # Filter out all volumes already attached to any server"},{"line_number":346,"context_line":"        volumes_in_use \u003d {}"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a7a7228_d88cab1f","line":343,"range":{"start_line":343,"start_character":48,"end_line":343,"end_character":66},"updated":"2021-03-18 18:13:36.000000000","message":"-1: This should be cinder_vol.id  since that\u0027s the cinder id, the _name_id is only kept for driver\u0027s benefit if they couldn\u0027t rename a volume at the end of a migration.","commit_id":"1aec77b9c1ab8b8c9bdd669cc462e5a70c71937a"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1fccd4cabd4f86069325d6d1a11d7b381078f46e","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                                (volume[\u0027display_name\u0027] \u003d\u003d cinder_name),"},{"line_number":341,"context_line":"                                all_vpsa_volumes)))"},{"line_number":342,"context_line":"            for volume in volumes:"},{"line_number":343,"context_line":"                existing_vols[volume[\u0027name\u0027]] \u003d cinder_vol.name_id"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        # Filter out all volumes already attached to any server"},{"line_number":346,"context_line":"        volumes_in_use \u003d {}"}],"source_content_type":"text/x-python","patch_set":15,"id":"07e8fe47_611314db","line":343,"range":{"start_line":343,"start_character":48,"end_line":343,"end_character":66},"in_reply_to":"3a7a7228_d88cab1f","updated":"2021-03-18 18:28:02.000000000","message":"Done","commit_id":"1aec77b9c1ab8b8c9bdd669cc462e5a70c71937a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"70a5d9b4f2b149c93aa37ae296f920f64e08d6f1","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                                (volume[\u0027display_name\u0027] \u003d\u003d cinder_name),"},{"line_number":341,"context_line":"                                all_vpsa_volumes)))"},{"line_number":342,"context_line":"            for volume in volumes:"},{"line_number":343,"context_line":"                existing_vols[volume[\u0027name\u0027]] \u003d cinder_vol.name_id"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        # Filter out all volumes already attached to any server"},{"line_number":346,"context_line":"        volumes_in_use \u003d {}"}],"source_content_type":"text/x-python","patch_set":15,"id":"23ae1009_f1126990","line":343,"range":{"start_line":343,"start_character":48,"end_line":343,"end_character":66},"in_reply_to":"3a7a7228_d88cab1f","updated":"2021-03-18 18:25:30.000000000","message":"Done","commit_id":"1aec77b9c1ab8b8c9bdd669cc462e5a70c71937a"}],"cinder/volume/manager.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b1026a12fa93939def2fd37d9334e1999533497c","unresolved":true,"context_lines":[{"line_number":166,"context_line":"# driver is renamed, add a mapping here from the old name (the dict key) to the"},{"line_number":167,"context_line":"# new name (the dict value) for at least a cycle to allow time for deployments"},{"line_number":168,"context_line":"# to transition."},{"line_number":169,"context_line":"MAPPING \u003d {"},{"line_number":170,"context_line":"    \u0027cinder.volume.drivers.dell_emc.vmax.iscsi.VMAXISCSIDriver\u0027:"},{"line_number":171,"context_line":"        \u0027cinder.volume.drivers.dell_emc.powermax.iscsi.PowerMaxISCSIDriver\u0027,"},{"line_number":172,"context_line":"    \u0027cinder.volume.drivers.dell_emc.vmax.fc.VMAXFCDriver\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"6717e91a_d6fa2208","line":169,"updated":"2021-02-08 14:27:01.000000000","message":"MAPPING","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"de3405a9feee9f3f95b690b8696f3ec292e50aee","unresolved":true,"context_lines":[{"line_number":166,"context_line":"# driver is renamed, add a mapping here from the old name (the dict key) to the"},{"line_number":167,"context_line":"# new name (the dict value) for at least a cycle to allow time for deployments"},{"line_number":168,"context_line":"# to transition."},{"line_number":169,"context_line":"MAPPING \u003d {"},{"line_number":170,"context_line":"    \u0027cinder.volume.drivers.dell_emc.vmax.iscsi.VMAXISCSIDriver\u0027:"},{"line_number":171,"context_line":"        \u0027cinder.volume.drivers.dell_emc.powermax.iscsi.PowerMaxISCSIDriver\u0027,"},{"line_number":172,"context_line":"    \u0027cinder.volume.drivers.dell_emc.vmax.fc.VMAXFCDriver\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da995412_efe3d709","line":169,"in_reply_to":"09d2a857_663b83c6","updated":"2021-02-12 17:33:59.000000000","message":"I have added the mapping here. If that doesn\u0027t help, could you please elaborate and help me to understand here? Thanks.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"7433bbdba4de56e97d8101a503fb2ec7146fa49b","unresolved":true,"context_lines":[{"line_number":166,"context_line":"# driver is renamed, add a mapping here from the old name (the dict key) to the"},{"line_number":167,"context_line":"# new name (the dict value) for at least a cycle to allow time for deployments"},{"line_number":168,"context_line":"# to transition."},{"line_number":169,"context_line":"MAPPING \u003d {"},{"line_number":170,"context_line":"    \u0027cinder.volume.drivers.dell_emc.vmax.iscsi.VMAXISCSIDriver\u0027:"},{"line_number":171,"context_line":"        \u0027cinder.volume.drivers.dell_emc.powermax.iscsi.PowerMaxISCSIDriver\u0027,"},{"line_number":172,"context_line":"    \u0027cinder.volume.drivers.dell_emc.vmax.fc.VMAXFCDriver\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"09d2a857_663b83c6","line":169,"in_reply_to":"6717e91a_d6fa2208","updated":"2021-02-08 17:52:10.000000000","message":"-1: Like Eric said you need to add a mapping here, otherwise you\u0027ll break ALL existing deployments when they upgrade, because the new driver code has changed locations and old configuration is pointing to the old driver location. \n\nAlternatively you could add a variable in the newly created __init__.py file and assign it the Zadara driver class, but that\u0027s not how we usually do it.","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d930fd0538a7389bb3acd407b16b10feb303393","unresolved":false,"context_lines":[{"line_number":166,"context_line":"# driver is renamed, add a mapping here from the old name (the dict key) to the"},{"line_number":167,"context_line":"# new name (the dict value) for at least a cycle to allow time for deployments"},{"line_number":168,"context_line":"# to transition."},{"line_number":169,"context_line":"MAPPING \u003d {"},{"line_number":170,"context_line":"    \u0027cinder.volume.drivers.dell_emc.vmax.iscsi.VMAXISCSIDriver\u0027:"},{"line_number":171,"context_line":"        \u0027cinder.volume.drivers.dell_emc.powermax.iscsi.PowerMaxISCSIDriver\u0027,"},{"line_number":172,"context_line":"    \u0027cinder.volume.drivers.dell_emc.vmax.fc.VMAXFCDriver\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"11ab0134_42fe39c0","line":169,"in_reply_to":"da995412_efe3d709","updated":"2021-03-17 15:17:04.000000000","message":"Done","commit_id":"a0af643c670b49c22e225db09df7079d1fcef36e"}],"doc/source/configuration/block-storage/drivers/zadara-volume-driver.rst":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"7755e6f8f200891cd884601d3adbfe645509278b","unresolved":true,"context_lines":[{"line_number":76,"context_line":".. config-table::"},{"line_number":77,"context_line":"   :config-target: Zadara"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"   cinder.volume.drivers.zadara"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":".. note::"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"679fa8a1_65c5bbb0","line":79,"range":{"start_line":79,"start_character":3,"end_line":79,"end_character":31},"updated":"2021-02-24 23:04:43.000000000","message":"This is causing the docs job to fail.  You need to change this to:\n\n  cinder.volume.drivers.zadara.common\n  cinder.volume.drivers.zadara.zadara","commit_id":"aff92dfb8509c5d46c5afaddef69e4f29a4f5684"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1c2306f618449f2f606384d08d1e40b0f221e47a","unresolved":false,"context_lines":[{"line_number":76,"context_line":".. config-table::"},{"line_number":77,"context_line":"   :config-target: Zadara"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"   cinder.volume.drivers.zadara"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":".. note::"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"03a79689_f87dee2d","line":79,"range":{"start_line":79,"start_character":3,"end_line":79,"end_character":31},"in_reply_to":"679fa8a1_65c5bbb0","updated":"2021-03-18 11:59:56.000000000","message":"Done","commit_id":"aff92dfb8509c5d46c5afaddef69e4f29a4f5684"}],"doc/source/reference/support-matrix.ini":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"afbdeabf40c9330a987363872acf5354d9029967","unresolved":true,"context_lines":[{"line_number":832,"context_line":"driver.vmware\u003dmissing"},{"line_number":833,"context_line":"driver.win_iscsi\u003dmissing"},{"line_number":834,"context_line":"driver.win_smb\u003dmissing"},{"line_number":835,"context_line":"driver.zadara\u003dmissing"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"[operation.revert_to_snapshot_assisted]"},{"line_number":838,"context_line":"title\u003dRevert to Snapshot"}],"source_content_type":"text/x-properties","patch_set":10,"id":"dc35adf6_c45ee277","line":835,"range":{"start_line":835,"start_character":14,"end_line":835,"end_character":21},"updated":"2021-03-11 02:58:49.000000000","message":"You need to update this to \u0027complete\u0027.","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"f55a5f9c48a70065f5a9bcd0bb87404400f32bef","unresolved":false,"context_lines":[{"line_number":832,"context_line":"driver.vmware\u003dmissing"},{"line_number":833,"context_line":"driver.win_iscsi\u003dmissing"},{"line_number":834,"context_line":"driver.win_smb\u003dmissing"},{"line_number":835,"context_line":"driver.zadara\u003dmissing"},{"line_number":836,"context_line":""},{"line_number":837,"context_line":"[operation.revert_to_snapshot_assisted]"},{"line_number":838,"context_line":"title\u003dRevert to Snapshot"}],"source_content_type":"text/x-properties","patch_set":10,"id":"8355942b_6030e80e","line":835,"range":{"start_line":835,"start_character":14,"end_line":835,"end_character":21},"in_reply_to":"dc35adf6_c45ee277","updated":"2021-03-14 17:23:30.000000000","message":"Done","commit_id":"01e7f032848048c8881d44531ca71b28c45295a0"}],"releasenotes/notes/Zadara-newlayout-support-features-ffa20694c008ba86.yaml":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"43cf8ab3175714f1959279a739b617dd05eb7832","unresolved":true,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    The Zadara VPSA Driver has been udapted to support json format"},{"line_number":11,"context_line":"    and reorganized with new code layout. The module path"},{"line_number":12,"context_line":"    ``cinder.volume.drivers.zadara.ZadaraVPSAISCSIDriver`` should now be"},{"line_number":13,"context_line":"    updated to ``cinder.volume.drivers.zadara.zadara.ZadaraVPSAISCSIDriver``"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"c8480a31_9d6cca36","line":10,"range":{"start_line":10,"start_character":36,"end_line":10,"end_character":43},"updated":"2021-03-18 18:08:01.000000000","message":"updated","commit_id":"1aec77b9c1ab8b8c9bdd669cc462e5a70c71937a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"70a5d9b4f2b149c93aa37ae296f920f64e08d6f1","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    The Zadara VPSA Driver has been udapted to support json format"},{"line_number":11,"context_line":"    and reorganized with new code layout. The module path"},{"line_number":12,"context_line":"    ``cinder.volume.drivers.zadara.ZadaraVPSAISCSIDriver`` should now be"},{"line_number":13,"context_line":"    updated to ``cinder.volume.drivers.zadara.zadara.ZadaraVPSAISCSIDriver``"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"11fae6c1_175ef8df","line":10,"range":{"start_line":10,"start_character":36,"end_line":10,"end_character":43},"in_reply_to":"c8480a31_9d6cca36","updated":"2021-03-18 18:25:30.000000000","message":"Done","commit_id":"1aec77b9c1ab8b8c9bdd669cc462e5a70c71937a"},{"author":{"_account_id":32880,"name":"Ratnakaram Rajesh","email":"rajesh.r@zadara.com","username":"rratnaka"},"change_message_id":"1fccd4cabd4f86069325d6d1a11d7b381078f46e","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    The Zadara VPSA Driver has been udapted to support json format"},{"line_number":11,"context_line":"    and reorganized with new code layout. The module path"},{"line_number":12,"context_line":"    ``cinder.volume.drivers.zadara.ZadaraVPSAISCSIDriver`` should now be"},{"line_number":13,"context_line":"    updated to ``cinder.volume.drivers.zadara.zadara.ZadaraVPSAISCSIDriver``"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"52372d44_014f8fb9","line":10,"range":{"start_line":10,"start_character":36,"end_line":10,"end_character":43},"in_reply_to":"c8480a31_9d6cca36","updated":"2021-03-18 18:28:02.000000000","message":"Done","commit_id":"1aec77b9c1ab8b8c9bdd669cc462e5a70c71937a"}]}
