)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This patchset includes the unit tests."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"DocImpact"},{"line_number":23,"context_line":"Implements: blueprint macrosan-cinder-driver"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I4c41f4e029103db4514762c50b21c50619edf5a6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7faddb67_56a759a8","line":22,"updated":"2019-07-12 13:12:48.000000000","message":"Remove this.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This patchset includes the unit tests."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"DocImpact"},{"line_number":23,"context_line":"Implements: blueprint macrosan-cinder-driver"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: I4c41f4e029103db4514762c50b21c50619edf5a6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"7faddb67_860c9ba5","line":22,"in_reply_to":"7faddb67_56a759a8","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"}],"cinder/tests/unit/test_macrosan_drivers.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3ecbde7e49328135ec2d0d91afd4bd8e09164fc3","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"test_volume \u003d ("},{"line_number":34,"context_line":"    UserDict({\u0027name\u0027: \u0027volume-728ec287-bf30-4d2d-98a8-7f1bed3f59ce\u0027,"},{"line_number":35,"context_line":"              \u0027volume_name\u0027: \u0027test\u0027,"},{"line_number":36,"context_line":"              \u0027id\u0027: \u0027728ec287-bf30-4d2d-98a8-7f1bed3f59ce\u0027,"},{"line_number":37,"context_line":"              \u0027volume_id\u0027: \u0027728ec287-bf30-4d2d-98a8-7f1bed3f59ce\u0027,"},{"line_number":38,"context_line":"              \u0027provider_auth\u0027: None,"},{"line_number":39,"context_line":"              \u0027project_id\u0027: \u0027project\u0027,"},{"line_number":40,"context_line":"              \u0027display_name\u0027: \u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_84b157e4","line":37,"range":{"start_line":34,"start_character":14,"end_line":37,"end_character":66},"updated":"2019-07-25 19:10:36.000000000","message":"these seems like some wrong fields, maybe replace\nname -\u003e display_name\nwhy do we have id and volume_id as separate fields here?","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3ecbde7e49328135ec2d0d91afd4bd8e09164fc3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"              \u0027macrosan uuid:0x00b34201-025b0000-46b35ae7-b7deec47\u0027}))"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"test_volume.size \u003d 10"},{"line_number":48,"context_line":"test_volume.volume_type_id \u003d None"},{"line_number":49,"context_line":"test_volume.volume_attachment \u003d []"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"test_migrate_volume \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_a4dfb338","line":48,"range":{"start_line":48,"start_character":29,"end_line":48,"end_character":33},"updated":"2019-07-25 19:10:36.000000000","message":"maybe try to keep this fake UUID","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3ecbde7e49328135ec2d0d91afd4bd8e09164fc3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    \u0027project_id\u0027: \u0027project\u0027,"},{"line_number":59,"context_line":"    \u0027display_name\u0027: \u0027test\u0027,"},{"line_number":60,"context_line":"    \u0027display_description\u0027: \u0027test\u0027,"},{"line_number":61,"context_line":"    \u0027volume_type_id\u0027: None,"},{"line_number":62,"context_line":"    \u0027_name_id\u0027: None,"},{"line_number":63,"context_line":"    \u0027host\u0027: \u0027controller@macrosan#MacroSAN\u0027,"},{"line_number":64,"context_line":"    \u0027provider_location\u0027:"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_04f007c9","line":61,"range":{"start_line":61,"start_character":22,"end_line":61,"end_character":26},"updated":"2019-07-25 19:10:36.000000000","message":"same","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3ecbde7e49328135ec2d0d91afd4bd8e09164fc3","unresolved":false,"context_lines":[{"line_number":73,"context_line":"             \u0027project_id\u0027: \u0027project\u0027,"},{"line_number":74,"context_line":"             \u0027display_name\u0027: \u0027test\u0027,"},{"line_number":75,"context_line":"             \u0027display_description\u0027: \u0027test volume\u0027,"},{"line_number":76,"context_line":"             \u0027volume_type_id\u0027: None,"},{"line_number":77,"context_line":"             \u0027provider_location\u0027: \u0027pointid: 1\u0027,"},{"line_number":78,"context_line":"             \u0027volume_size\u0027: 10,"},{"line_number":79,"context_line":"             \u0027volume\u0027: test_volume}"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_24ebc3dc","line":76,"range":{"start_line":76,"start_character":31,"end_line":76,"end_character":35},"updated":"2019-07-25 19:10:36.000000000","message":"same","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3ecbde7e49328135ec2d0d91afd4bd8e09164fc3","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        return super(FakeMacroSANISCSIDriver, self)._attach_volume("},{"line_number":194,"context_line":"            context, volume, properties, remote)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @utils.synchronized(\u0027MacroSAN-Attach\u0027, external\u003dTrue)"},{"line_number":197,"context_line":"    def _detach_volume(self, context, attach_info, volume,"},{"line_number":198,"context_line":"                       properties, force\u003dFalse, remote\u003dFalse,"},{"line_number":199,"context_line":"                       ignore_errors\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_4494bf44","line":196,"range":{"start_line":196,"start_character":34,"end_line":196,"end_character":40},"updated":"2019-07-25 19:10:36.000000000","message":"is it supposed to keep synchronization with attach_vol then change this to something like \u0027MacroSAN-Attach-Detach\u0027\nelse this could be changed to MacroSAN-Detach","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3ecbde7e49328135ec2d0d91afd4bd8e09164fc3","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        self.configuration.macrosan_snapshot_resource_ratio \u003d 0.3"},{"line_number":399,"context_line":"        self.configuration.macrosan_log_timing \u003d True"},{"line_number":400,"context_line":"        self.configuration.macrosan_client \u003d \\"},{"line_number":401,"context_line":"            [\u0027devstack; decive1; \"eth-1:0:0\"; \"eth-2:0:0\"\u0027]"},{"line_number":402,"context_line":"        self.configuration.macrosan_client_default \u003d \\"},{"line_number":403,"context_line":"            \"eth-1:0:0;eth-2:0:0\""},{"line_number":404,"context_line":"        self.driver \u003d FakeMacroSANISCSIDriver(configuration\u003dself.configuration)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_24998378","line":401,"range":{"start_line":401,"start_character":24,"end_line":401,"end_character":30},"updated":"2019-07-25 19:10:36.000000000","message":"device?","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":513,"context_line":"                                     \u0027extra_specs\u0027: {}})"},{"line_number":514,"context_line":"    @mock.patch.object(qos_specs, \u0027get_qos_specs\u0027,"},{"line_number":515,"context_line":"                       return_value\u003d{\u0027specs\u0027: {\u0027qos-strategy\u0027: \u0027QoS-1\u0027}})"},{"line_number":516,"context_line":"    def test_terminate_connection(self, mock_volume_type, mock_qos):"},{"line_number":517,"context_line":"        self.driver.terminate_connection(test_volume, test_connector)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def test_get_raid_list(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_15eb5bdc","line":516,"updated":"2019-07-25 16:14:31.000000000","message":"This test is pretty weak.  There is no verification that anything happened.","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"}],"cinder/volume/drivers/macrosan/commit.txt":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This patchset includes the unit tests.\r"},{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"DocImpact\r"},{"line_number":17,"context_line":"Implements: blueprint macrosan-cinder-driver\r"}],"source_content_type":"text/plain","patch_set":1,"id":"3f79a3b5_8d4ba0b0","line":17,"updated":"2018-10-23 13:36:15.000000000","message":"This file should be removed.","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This patchset includes the unit tests.\r"},{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"DocImpact\r"},{"line_number":17,"context_line":"Implements: blueprint macrosan-cinder-driver\r"}],"source_content_type":"text/plain","patch_set":1,"id":"3f79a3b5_a5fd8cb9","line":17,"in_reply_to":"3f79a3b5_8d4ba0b0","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"}],"cinder/volume/drivers/macrosan/config.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"de5b7eea386747840da1b5a2d779d3e6b2e52fe8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    cfg.ListOpt(\u0027macrosan_login_ipaddrs\u0027,"},{"line_number":23,"context_line":"                default\u003dNone,"},{"line_number":24,"context_line":"                help\u003d\"MacroSAN device\u0027s ip addresses\"),"},{"line_number":25,"context_line":"    cfg.StrOpt(\u0027macrosan_username\u0027,"},{"line_number":26,"context_line":"               default\u003dNone,"},{"line_number":27,"context_line":"               help\u003d\"MacroSAN devices\u0027 username\"),"},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027macrosan_password\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_ea892326","line":25,"updated":"2019-07-05 12:03:54.000000000","message":"How are these different than the existing san_user and san_password config options? Those should be used unless there is some reason they are different. If they are different, these should better explain the use of these config options.","commit_id":"89246dee4417747f15edb0c2dc73e214bd5a3998"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"de5b7eea386747840da1b5a2d779d3e6b2e52fe8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                sample_default\u003d\"eth-1:0:0, eth-2:0:0\","},{"line_number":58,"context_line":"                help\u003d\"Slave device\"),"},{"line_number":59,"context_line":"    # device_features"},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027macrosan_lun_mode\u0027, quotes\u003dTrue,"},{"line_number":61,"context_line":"               choices\u003d[\u0027normal\u0027, \u0027thick\u0027],"},{"line_number":62,"context_line":"               default\u003d\u0027normal\u0027,"},{"line_number":63,"context_line":"               help\u003d\u0027LUN mode to create volume\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"7faddb67_2a773b3d","line":60,"updated":"2019-07-05 12:03:54.000000000","message":"Should us san_thin_provision.","commit_id":"89246dee4417747f15edb0c2dc73e214bd5a3998"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"macrosan_opts \u003d ["},{"line_number":21,"context_line":"    # sdas login_info"},{"line_number":22,"context_line":"    cfg.ListOpt(\u0027macrosan_sdas_ipaddrs\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_96a15197","line":19,"updated":"2019-07-12 13:12:48.000000000","message":"This still seems like waaay too many config options to me.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"eca2e7b47b20869578c94690236b6209fa839546","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"macrosan_opts \u003d ["},{"line_number":21,"context_line":"    # sdas login_info"},{"line_number":22,"context_line":"    cfg.ListOpt(\u0027macrosan_sdas_ipaddrs\u0027,"},{"line_number":23,"context_line":"                default\u003dNone,"},{"line_number":24,"context_line":"                help\u003d\"MacroSAN sdas devices\u0027 ip addresses\"),"},{"line_number":25,"context_line":"    cfg.StrOpt(\u0027macrosan_sdas_username\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_88e973b8","line":22,"range":{"start_line":22,"start_character":31,"end_line":22,"end_character":38},"updated":"2019-07-25 13:40:59.000000000","message":"Does this driver support hostnames as well, or just IP addresses?","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"eca2e7b47b20869578c94690236b6209fa839546","unresolved":false,"context_lines":[{"line_number":20,"context_line":"macrosan_opts \u003d ["},{"line_number":21,"context_line":"    # sdas login_info"},{"line_number":22,"context_line":"    cfg.ListOpt(\u0027macrosan_sdas_ipaddrs\u0027,"},{"line_number":23,"context_line":"                default\u003dNone,"},{"line_number":24,"context_line":"                help\u003d\"MacroSAN sdas devices\u0027 ip addresses\"),"},{"line_number":25,"context_line":"    cfg.StrOpt(\u0027macrosan_sdas_username\u0027,"},{"line_number":26,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_489dbb55","line":23,"range":{"start_line":23,"start_character":24,"end_line":23,"end_character":28},"updated":"2019-07-25 13:40:59.000000000","message":"Default would be []?\n\nYou don\u0027t really need to set default\u003dNone on all of these options.","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"438174489a4f9b7d1e02be09c224bb174ad45bf5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"               help\u003d\"\"),"},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027macrosan_sdas_password\u0027,"},{"line_number":29,"context_line":"               default\u003dNone,"},{"line_number":30,"context_line":"               help\u003d\"\"),"},{"line_number":31,"context_line":"    # replication login_info"},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027macrosan_replication_ipaddrs\u0027,"},{"line_number":33,"context_line":"                default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_28cf1f80","line":30,"updated":"2019-07-25 13:35:47.000000000","message":"Password options need to have secret\u003dTrue set.","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"eca2e7b47b20869578c94690236b6209fa839546","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               help\u003d\"\"),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027macrosan_replication_password\u0027,"},{"line_number":39,"context_line":"               default\u003dNone,"},{"line_number":40,"context_line":"               help\u003d\"\"),"},{"line_number":41,"context_line":"    cfg.ListOpt(\u0027macrosan_replication_destination_ports\u0027,"},{"line_number":42,"context_line":"                default\u003dNone,"},{"line_number":43,"context_line":"                sample_default\u003d\"eth-1:0/eth-1:1, eth-2:0/eth-2:1\","}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_48cb7b49","line":40,"updated":"2019-07-25 13:40:59.000000000","message":"secret\u003dTrue","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":94,"context_line":"               default\u003dNone,"},{"line_number":95,"context_line":"               help\u003d\"This is the default connection information for iscsi. \""},{"line_number":96,"context_line":"                    \"This default configuration is used \""},{"line_number":97,"context_line":"                    \"when no host related information is obtained.\")"},{"line_number":98,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_c84e8b95","line":97,"updated":"2019-07-25 14:15:09.000000000","message":"what is supposed to be populated here?  It\u0027s completely unclear.","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":24,"context_line":"                help\u003d\"MacroSAN sdas devices\u0027 ip addresses\"),"},{"line_number":25,"context_line":"    cfg.StrOpt(\u0027macrosan_sdas_username\u0027,"},{"line_number":26,"context_line":"               default\u003dNone,"},{"line_number":27,"context_line":"               help\u003d\"\"),"},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027macrosan_sdas_password\u0027,"},{"line_number":29,"context_line":"               default\u003dNone,"},{"line_number":30,"context_line":"               help\u003d\"\","}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_558f932d","line":27,"range":{"start_line":27,"start_character":15,"end_line":27,"end_character":23},"updated":"2019-07-25 16:14:31.000000000","message":"Should have empty help text even if it seems that the option is obvious.  This is what is used to create the documentation for the driver, so everything should be documented.","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # replication login_info"},{"line_number":33,"context_line":"    cfg.ListOpt(\u0027macrosan_replication_ipaddrs\u0027,"},{"line_number":34,"context_line":"                default\u003dNone,"},{"line_number":35,"context_line":"                help\u003d\"MacroSAN replication devices\u0027 ip addresses\"),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027macrosan_replication_username\u0027,"},{"line_number":37,"context_line":"               default\u003dNone,"},{"line_number":38,"context_line":"               help\u003d\"\"),"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_f59d5f66","line":35,"range":{"start_line":35,"start_character":21,"end_line":35,"end_character":65},"updated":"2019-07-25 16:14:31.000000000","message":"What type of list is this?  It should be documented.","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"}],"cinder/volume/drivers/macrosan/devop_client.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        ha \u003d {}"},{"line_number":49,"context_line":"        for sp, ip in iplist:"},{"line_number":50,"context_line":"            try:"},{"line_number":51,"context_line":"                url \u003d \u0027http://\u0027 + ip + \u0027:\u0027 + str(self.port) + \\"},{"line_number":52,"context_line":"                      self.url_prefix + \u0027/ha_status\u0027"},{"line_number":53,"context_line":"                header \u003d {\u0027Authorization\u0027: \u0027Bearer %s\u0027 % self.SECRET_KEY}"},{"line_number":54,"context_line":"                response \u003d requests.get(url\u003durl,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_3675fd32","line":51,"range":{"start_line":51,"start_character":41,"end_line":51,"end_character":49},"updated":"2019-07-12 13:12:48.000000000","message":"Best to avoid string concatenation. It would be better if you just used string formatting to format this string:\n\nurl \u003d \u0027http://%s:%d/%s/ha_status\u0027 % (...)","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        ha \u003d {}"},{"line_number":49,"context_line":"        for sp, ip in iplist:"},{"line_number":50,"context_line":"            try:"},{"line_number":51,"context_line":"                url \u003d \u0027http://\u0027 + ip + \u0027:\u0027 + str(self.port) + \\"},{"line_number":52,"context_line":"                      self.url_prefix + \u0027/ha_status\u0027"},{"line_number":53,"context_line":"                header \u003d {\u0027Authorization\u0027: \u0027Bearer %s\u0027 % self.SECRET_KEY}"},{"line_number":54,"context_line":"                response \u003d requests.get(url\u003durl,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_66071f84","line":51,"range":{"start_line":51,"start_character":41,"end_line":51,"end_character":49},"in_reply_to":"7faddb67_3675fd32","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        except requests.exceptions.ConnectionError:"},{"line_number":87,"context_line":"            msg \u003d \u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Unable to establish connection \u0027 \\"},{"line_number":88,"context_line":"                  \u0027with VolumeBackend %s\u0027 % url"},{"line_number":89,"context_line":"            LOG.error(msg)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def response_processing(self, response):"},{"line_number":92,"context_line":"        if response.status_code !\u003d 200:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_b696cd3d","line":89,"range":{"start_line":89,"start_character":22,"end_line":89,"end_character":25},"updated":"2019-07-12 13:12:48.000000000","message":"Move these messages into the logging call and get rid of the useless variable. String formatting should be done by the logger.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        except requests.exceptions.ConnectionError:"},{"line_number":87,"context_line":"            msg \u003d \u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Unable to establish connection \u0027 \\"},{"line_number":88,"context_line":"                  \u0027with VolumeBackend %s\u0027 % url"},{"line_number":89,"context_line":"            LOG.error(msg)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def response_processing(self, response):"},{"line_number":92,"context_line":"        if response.status_code !\u003d 200:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_a6d757ee","line":89,"range":{"start_line":89,"start_character":22,"end_line":89,"end_character":25},"in_reply_to":"7faddb67_b696cd3d","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3ecbde7e49328135ec2d0d91afd4bd8e09164fc3","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                      \u0027with VolumeBackend %(url)s\u0027, {\u0027url\u0027: url})"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def response_processing(self, response):"},{"line_number":93,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":94,"context_line":"            LOG.error(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Command %(url)s execution error,\u0027"},{"line_number":95,"context_line":"                      \u0027response_conde: %(status)s\u0027,"},{"line_number":96,"context_line":"                      {\u0027url\u0027: response.url, \u0027status\u0027: response.status_code})"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_84563706","line":93,"range":{"start_line":93,"start_character":11,"end_line":93,"end_character":38},"updated":"2019-07-25 19:10:36.000000000","message":"are all the REST calls synchronous?","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3ecbde7e49328135ec2d0d91afd4bd8e09164fc3","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            \u0027attr\u0027: \u0027existence\u0027,"},{"line_number":110,"context_line":"            \u0027name\u0027: name"},{"line_number":111,"context_line":"        }"},{"line_number":112,"context_line":"        return self.send_request(\u0027get\u0027, \u0027/lun\u0027, data\u003ddata)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def snapshot_point_exists(self, lun_name, pointid):"},{"line_number":115,"context_line":"        \"\"\"Whether the snapshot point exists.\"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_64a9bbdb","line":112,"range":{"start_line":112,"start_character":33,"end_line":112,"end_character":57},"updated":"2019-07-25 19:10:36.000000000","message":"we should have all methods consistent,\n(method\u003d\u0027get\u0027, url\u003d\u0027/lun\u0027, ...","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"}],"cinder/volume/drivers/macrosan/driver.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from xml.etree.ElementTree import parse"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":"LOG.info(_(\u0027MacroSANDriver loading...\u0027))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"version \u003d \u00271.0.0\u0027"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0d2f90a6","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":40},"updated":"2018-10-23 13:36:15.000000000","message":"Please remove this, we don\u0027t generally print log messages just on an import.","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from xml.etree.ElementTree import parse"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":42,"context_line":"LOG.info(_(\u0027MacroSANDriver loading...\u0027))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"version \u003d \u00271.0.0\u0027"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_45883824","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":40},"in_reply_to":"3f79a3b5_0d2f90a6","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"version \u003d \u00271.0.0\u0027"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"config_path \u003d \u0027/etc/cinder/cinder_macrosan.xml\u0027"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class MacroSANBaseDriver(driver.VolumeDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_cd43d86a","line":46,"updated":"2018-10-23 13:36:15.000000000","message":"Can this driver not be configured in cinder.conf?  Supporting standard cinder configuration that way will be more supportable in the long run.","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        return []"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _sizestr(self, size_in_g):"},{"line_number":70,"context_line":"        if int(size_in_g) \u003d\u003d 0:"},{"line_number":71,"context_line":"            return 1"},{"line_number":72,"context_line":"        return int(size_in_g)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _volume_name(self, volume_provider):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_4dda68e6","line":71,"range":{"start_line":70,"start_character":0,"end_line":71,"end_character":20},"updated":"2018-10-23 13:36:15.000000000","message":"I don\u0027t think you need this...","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        return []"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _sizestr(self, size_in_g):"},{"line_number":70,"context_line":"        if int(size_in_g) \u003d\u003d 0:"},{"line_number":71,"context_line":"            return 1"},{"line_number":72,"context_line":"        return int(size_in_g)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _volume_name(self, volume_provider):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_258dfc35","line":71,"range":{"start_line":70,"start_character":0,"end_line":71,"end_character":20},"in_reply_to":"3f79a3b5_4dda68e6","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                float(snapshot.get(\u0027resource_ratio\u0027)))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"            node \u003d root.find(\u0027./copy_volume\u0027)"},{"line_number":104,"context_line":"            self.dd_block_size \u003d node.get(\u0027dd_block_size\u0027)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"            node \u003d root.find(\u0027./storage_device\u0027)"},{"line_number":107,"context_line":"            self.sp1_ipaddr \u003d node.get(\u0027sp1\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_2d292c9b","line":104,"updated":"2018-10-23 13:36:15.000000000","message":"No validation of correct values for this?","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                float(snapshot.get(\u0027resource_ratio\u0027)))"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"            node \u003d root.find(\u0027./copy_volume\u0027)"},{"line_number":104,"context_line":"            self.dd_block_size \u003d node.get(\u0027dd_block_size\u0027)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"            node \u003d root.find(\u0027./storage_device\u0027)"},{"line_number":107,"context_line":"            self.sp1_ipaddr \u003d node.get(\u0027sp1\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_c59c4871","line":104,"in_reply_to":"3f79a3b5_2d292c9b","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def _do_setup(self):"},{"line_number":132,"context_line":"        pass"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _get_owner(self):"},{"line_number":135,"context_line":"        owner \u003d self.owners[self.owner_idx % 2]"},{"line_number":136,"context_line":"        self.owner_idx +\u003d 1"},{"line_number":137,"context_line":"        return owner"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e8f9e21b","line":134,"updated":"2018-10-23 13:36:15.000000000","message":"What is this method doing?","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    def _do_setup(self):"},{"line_number":132,"context_line":"        pass"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _get_owner(self):"},{"line_number":135,"context_line":"        owner \u003d self.owners[self.owner_idx % 2]"},{"line_number":136,"context_line":"        self.owner_idx +\u003d 1"},{"line_number":137,"context_line":"        return owner"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8523b057","line":134,"in_reply_to":"3f79a3b5_e8f9e21b","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                   \u0027id: %(volume_id)s, size: %(size)s.\u0027),"},{"line_number":201,"context_line":"                 {\u0027name\u0027: volume[\u0027name\u0027],"},{"line_number":202,"context_line":"                  \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":203,"context_line":"                  \u0027size\u0027: volume[\u0027size\u0027]})"},{"line_number":204,"context_line":"        self.client.select_sshpool()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        name \u003d volume[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0deeb089","line":203,"range":{"start_line":203,"start_character":26,"end_line":203,"end_character":40},"updated":"2018-10-23 13:36:15.000000000","message":"Just use volume.size","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                   \u0027id: %(volume_id)s, size: %(size)s.\u0027),"},{"line_number":201,"context_line":"                 {\u0027name\u0027: volume[\u0027name\u0027],"},{"line_number":202,"context_line":"                  \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":203,"context_line":"                  \u0027size\u0027: volume[\u0027size\u0027]})"},{"line_number":204,"context_line":"        self.client.select_sshpool()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        name \u003d volume[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a5990c81","line":203,"range":{"start_line":203,"start_character":26,"end_line":203,"end_character":40},"in_reply_to":"3f79a3b5_0deeb089","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.client.select_sshpool()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        name \u003d volume[\u0027id\u0027]"},{"line_number":207,"context_line":"        size \u003d self._sizestr(volume[\u0027size\u0027])"},{"line_number":208,"context_line":"        strategy \u003d self._get_qos_strategy(volume[\u0027volume_type_id\u0027])"},{"line_number":209,"context_line":"        return self._create_volume(name, size, strategy)"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_cde758ab","line":207,"range":{"start_line":207,"start_character":29,"end_line":207,"end_character":43},"updated":"2018-10-23 13:36:15.000000000","message":"volume.size","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.client.select_sshpool()"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        name \u003d volume[\u0027id\u0027]"},{"line_number":207,"context_line":"        size \u003d self._sizestr(volume[\u0027size\u0027])"},{"line_number":208,"context_line":"        strategy \u003d self._get_qos_strategy(volume[\u0027volume_type_id\u0027])"},{"line_number":209,"context_line":"        return self._create_volume(name, size, strategy)"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_05bd60d0","line":207,"range":{"start_line":207,"start_character":29,"end_line":207,"end_character":43},"in_reply_to":"3f79a3b5_cde758ab","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                return"},{"line_number":221,"context_line":"            try:"},{"line_number":222,"context_line":"                self.client.rename_lun(migrated_name, name)"},{"line_number":223,"context_line":"            except Exception:"},{"line_number":224,"context_line":"                LOG.info(_(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d failed to rename %(migrated_name)s\u0027"},{"line_number":225,"context_line":"                           \u0027to %(name)s\u0027),"},{"line_number":226,"context_line":"                         {\u0027migrated_name\u0027: migrated_name, \u0027name\u0027: name})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8df96050","line":223,"range":{"start_line":223,"start_character":19,"end_line":223,"end_character":28},"updated":"2018-10-23 13:36:15.000000000","message":"This looks quite broad...","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                return"},{"line_number":221,"context_line":"            try:"},{"line_number":222,"context_line":"                self.client.rename_lun(migrated_name, name)"},{"line_number":223,"context_line":"            except Exception:"},{"line_number":224,"context_line":"                LOG.info(_(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d failed to rename %(migrated_name)s\u0027"},{"line_number":225,"context_line":"                           \u0027to %(name)s\u0027),"},{"line_number":226,"context_line":"                         {\u0027migrated_name\u0027: migrated_name, \u0027name\u0027: name})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_45c3585a","line":223,"range":{"start_line":223,"start_character":19,"end_line":223,"end_character":28},"in_reply_to":"3f79a3b5_8df96050","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    @utils.synchronized(\u0027MacroSAN-Attach\u0027, external\u003dTrue)"},{"line_number":238,"context_line":"    def _attach_volume(self, context, volume, properties, remote\u003dFalse):"},{"line_number":239,"context_line":"        time.sleep(0.5)"},{"line_number":240,"context_line":"        return super(MacroSANBaseDriver, self)._attach_volume(context,"},{"line_number":241,"context_line":"                                                              volume,"},{"line_number":242,"context_line":"                                                              properties,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_ed8fb4d0","line":239,"updated":"2018-10-23 13:36:15.000000000","message":"Why is this sleep here?  It should be removed or have a comment added to explain this.","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    @utils.synchronized(\u0027MacroSAN-Attach\u0027, external\u003dTrue)"},{"line_number":238,"context_line":"    def _attach_volume(self, context, volume, properties, remote\u003dFalse):"},{"line_number":239,"context_line":"        time.sleep(0.5)"},{"line_number":240,"context_line":"        return super(MacroSANBaseDriver, self)._attach_volume(context,"},{"line_number":241,"context_line":"                                                              volume,"},{"line_number":242,"context_line":"                                                              properties,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_05e4800a","line":239,"in_reply_to":"3f79a3b5_ed8fb4d0","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    @utils.synchronized(\u0027MacroSAN-Attach\u0027, external\u003dTrue)"},{"line_number":246,"context_line":"    def _detach_volume(self, context, attach_info, volume,"},{"line_number":247,"context_line":"                       properties, force\u003dFalse, remote\u003dFalse):"},{"line_number":248,"context_line":"        time.sleep(0.5)"},{"line_number":249,"context_line":"        return super(MacroSANBaseDriver, self)._detach_volume(context,"},{"line_number":250,"context_line":"                                                              attach_info,"},{"line_number":251,"context_line":"                                                              volume,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0d931001","line":248,"updated":"2018-10-23 13:36:15.000000000","message":"Same ^","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    @utils.synchronized(\u0027MacroSAN-Attach\u0027, external\u003dTrue)"},{"line_number":246,"context_line":"    def _detach_volume(self, context, attach_info, volume,"},{"line_number":247,"context_line":"                       properties, force\u003dFalse, remote\u003dFalse):"},{"line_number":248,"context_line":"        time.sleep(0.5)"},{"line_number":249,"context_line":"        return super(MacroSANBaseDriver, self)._detach_volume(context,"},{"line_number":250,"context_line":"                                                              attach_info,"},{"line_number":251,"context_line":"                                                              volume,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e5e864e1","line":248,"in_reply_to":"3f79a3b5_0d931001","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"89e056626179c14c0bc4d8aff865e4482de82316","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                   \u0027 size: %(size)s.\u0027),"},{"line_number":296,"context_line":"                 {\u0027snapshot_id\u0027: snapshot[\u0027id\u0027],"},{"line_number":297,"context_line":"                  \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":298,"context_line":"                  \u0027size\u0027: volume[\u0027size\u0027]})"},{"line_number":299,"context_line":"        self.client.select_sshpool()"},{"line_number":300,"context_line":"        snapshot_name \u003d self._snapshot_name(snapshot[\u0027id\u0027])"},{"line_number":301,"context_line":"        volume_name \u003d self._volume_name(volume[\u0027provider_location\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6d83a4ab","line":298,"range":{"start_line":298,"start_character":26,"end_line":298,"end_character":40},"updated":"2018-10-23 13:36:15.000000000","message":"volume.size","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                   \u0027 size: %(size)s.\u0027),"},{"line_number":296,"context_line":"                 {\u0027snapshot_id\u0027: snapshot[\u0027id\u0027],"},{"line_number":297,"context_line":"                  \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":298,"context_line":"                  \u0027size\u0027: volume[\u0027size\u0027]})"},{"line_number":299,"context_line":"        self.client.select_sshpool()"},{"line_number":300,"context_line":"        snapshot_name \u003d self._snapshot_name(snapshot[\u0027id\u0027])"},{"line_number":301,"context_line":"        volume_name \u003d self._volume_name(volume[\u0027provider_location\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_65d5341a","line":298,"range":{"start_line":298,"start_character":26,"end_line":298,"end_character":40},"in_reply_to":"3f79a3b5_6d83a4ab","updated":"2018-11-17 04:47:48.000000000","message":"Done","commit_id":"7d8d5199d0b1fa3d659457f9023a95aa346082bf"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b647555899ad0142c4d83f66f04a7798fdab28e8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"macrosan_opts \u003d ["},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027cinder_macrosan_conf_file\u0027,"},{"line_number":46,"context_line":"               default\u003d\u0027/etc/cinder/cinder_macrosan.xml\u0027,"},{"line_number":47,"context_line":"               help\u003d\u0027The configuration file for the Cinder MacroSAN driver.\u0027),"},{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_bf483b61","line":47,"updated":"2018-11-16 11:29:45.000000000","message":"Why is a separate config file needed?  In most cases, it\u0027s better to just have the options in cinder.conf.","commit_id":"55fafd3a57cda10b848467225c6e5c3a4c39ef2d"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"9dbe26c93f7aaaf063c50a754f22f6c788daab9c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"macrosan_opts \u003d ["},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027cinder_macrosan_conf_file\u0027,"},{"line_number":46,"context_line":"               default\u003d\u0027/etc/cinder/cinder_macrosan.xml\u0027,"},{"line_number":47,"context_line":"               help\u003d\u0027The configuration file for the Cinder MacroSAN driver.\u0027),"},{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_c8b0d4e2","line":47,"in_reply_to":"3f79a3b5_3f1bcbcc","updated":"2018-11-19 01:01:20.000000000","message":"We are referring to the code of HUAWEI.","commit_id":"55fafd3a57cda10b848467225c6e5c3a4c39ef2d"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"068a35171fb1cc4b98c3a9f46f8ac924277c0622","unresolved":false,"context_lines":[{"line_number":44,"context_line":"macrosan_opts \u003d ["},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027cinder_macrosan_conf_file\u0027,"},{"line_number":46,"context_line":"               default\u003d\u0027/etc/cinder/cinder_macrosan.xml\u0027,"},{"line_number":47,"context_line":"               help\u003d\u0027The configuration file for the Cinder MacroSAN driver.\u0027),"},{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_3f1bcbcc","line":47,"in_reply_to":"3f79a3b5_bf483b61","updated":"2018-11-17 04:47:48.000000000","message":"This file is used to record information about the storage device.Such as ip,username,password...","commit_id":"55fafd3a57cda10b848467225c6e5c3a4c39ef2d"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5623c6f76da3bcc70eea463bac3fa93fe59311e4","unresolved":false,"context_lines":[{"line_number":44,"context_line":"macrosan_opts \u003d ["},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027cinder_macrosan_conf_file\u0027,"},{"line_number":46,"context_line":"               default\u003d\u0027/etc/cinder/cinder_macrosan.xml\u0027,"},{"line_number":47,"context_line":"               help\u003d\u0027The configuration file for the Cinder MacroSAN driver.\u0027),"},{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_4b7246e3","line":47,"in_reply_to":"3f79a3b5_c8b0d4e2","updated":"2018-12-05 15:42:35.000000000","message":"Please just add the required options as Cinder options rather than having a separate XML config file.","commit_id":"55fafd3a57cda10b848467225c6e5c3a4c39ef2d"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"816743950722a49b29ef124fa5c55ce2db4c2d5e","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    cfg.StrOpt(\u0027macrosan_sp2_ipaddr\u0027,"},{"line_number":76,"context_line":"               default\u003dNone,"},{"line_number":77,"context_line":"               help\u003d\"MacroSAN device\u0027s SP2 ip address\"),"},{"line_number":78,"context_line":"    cfg.StrOpt(\u0027san_login\u0027,"},{"line_number":79,"context_line":"               default\u003dNone,"},{"line_number":80,"context_line":"               help\u003d\"The remote MacroSAN device domain name.\"),"},{"line_number":81,"context_line":"    cfg.StrOpt(\u0027san_password\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_ddbb300c","line":78,"updated":"2019-06-27 12:35:29.000000000","message":"Should not be defining duplicate new options. Just use the existing ones.","commit_id":"16a84b64dffd18a60b3a903f41b2776524076ef5"},{"author":{"_account_id":29620,"name":"hjy","email":"821328772@qq.com","username":"lol"},"change_message_id":"0ec96f9f2aebc25a0a9c680cee164a2698471b17","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    cfg.StrOpt(\u0027macrosan_sp2_ipaddr\u0027,"},{"line_number":76,"context_line":"               default\u003dNone,"},{"line_number":77,"context_line":"               help\u003d\"MacroSAN device\u0027s SP2 ip address\"),"},{"line_number":78,"context_line":"    cfg.StrOpt(\u0027san_login\u0027,"},{"line_number":79,"context_line":"               default\u003dNone,"},{"line_number":80,"context_line":"               help\u003d\"The remote MacroSAN device domain name.\"),"},{"line_number":81,"context_line":"    cfg.StrOpt(\u0027san_password\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_97a90725","line":78,"in_reply_to":"9fb8cfa7_ddbb300c","updated":"2019-07-05 02:51:29.000000000","message":"get","commit_id":"16a84b64dffd18a60b3a903f41b2776524076ef5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"816743950722a49b29ef124fa5c55ce2db4c2d5e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    cfg.StrOpt(\u0027macrosan_iscsi_target_sp2_ipaddr\u0027,"},{"line_number":88,"context_line":"               default\u003dNone,"},{"line_number":89,"context_line":"               help\u003d\"MacroSAN iscsi target\u0027s SP2 ip address\"),"},{"line_number":90,"context_line":"    cfg.StrOpt(\u0027cinder_macrosan_conf\u0027,"},{"line_number":91,"context_line":"               default\u003d\u0027/etc/cinder/cinder_macrosan.xml\u0027,"},{"line_number":92,"context_line":"               help\u003d\u0027The configuration file for the Cinder MacroSAN Driver\u0027)"},{"line_number":93,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_5d3d008c","line":90,"updated":"2019-06-27 12:35:29.000000000","message":"This still needs to be removed. Config should be through cinder.conf, not through a separate XML file.","commit_id":"16a84b64dffd18a60b3a903f41b2776524076ef5"},{"author":{"_account_id":29620,"name":"hjy","email":"821328772@qq.com","username":"lol"},"change_message_id":"0ec96f9f2aebc25a0a9c680cee164a2698471b17","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    cfg.StrOpt(\u0027macrosan_iscsi_target_sp2_ipaddr\u0027,"},{"line_number":88,"context_line":"               default\u003dNone,"},{"line_number":89,"context_line":"               help\u003d\"MacroSAN iscsi target\u0027s SP2 ip address\"),"},{"line_number":90,"context_line":"    cfg.StrOpt(\u0027cinder_macrosan_conf\u0027,"},{"line_number":91,"context_line":"               default\u003d\u0027/etc/cinder/cinder_macrosan.xml\u0027,"},{"line_number":92,"context_line":"               help\u003d\u0027The configuration file for the Cinder MacroSAN Driver\u0027)"},{"line_number":93,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9fb8cfa7_b7276bc7","line":90,"in_reply_to":"9fb8cfa7_5d3d008c","updated":"2019-07-05 02:51:29.000000000","message":"We are refferring to huawei:)I see they set it in tha same way","commit_id":"16a84b64dffd18a60b3a903f41b2776524076ef5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        pass"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def _synchronized(f):"},{"line_number":67,"context_line":"    def inner(*args, **kwargs):"},{"line_number":68,"context_line":"        t1 \u003d time.time()"},{"line_number":69,"context_line":"        t2 \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_565e7912","line":66,"updated":"2019-07-12 13:12:48.000000000","message":"Use the cinder.coordination.synchronized decorator:\n\nhttps://opendev.org/openstack/cinder/src/branch/master/cinder/coordination.py#L94\n\nThat handles distributed locking if the operator configures services for active/active.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        pass"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def _synchronized(f):"},{"line_number":67,"context_line":"    def inner(*args, **kwargs):"},{"line_number":68,"context_line":"        t1 \u003d time.time()"},{"line_number":69,"context_line":"        t2 \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_46b463d1","line":66,"in_reply_to":"7faddb67_565e7912","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    return __timing"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def record_request_id(fn):"},{"line_number":110,"context_line":"    def _record_request_id(*vargs, **kv):"},{"line_number":111,"context_line":"        ctx \u003d context.context.get_current()"},{"line_number":112,"context_line":"        devop_client.context_request_id \u003d ctx.request_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_56b3d94d","line":109,"updated":"2019-07-12 13:12:48.000000000","message":"The request ID is included in the log messages, so not sure you need to be doing anything extra to get that.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    return __timing"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def record_request_id(fn):"},{"line_number":110,"context_line":"    def _record_request_id(*vargs, **kv):"},{"line_number":111,"context_line":"        ctx \u003d context.context.get_current()"},{"line_number":112,"context_line":"        devop_client.context_request_id \u003d ctx.request_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_e6cc6f6b","line":109,"in_reply_to":"7faddb67_56b3d94d","updated":"2019-07-16 01:44:39.000000000","message":"Need to confirm which operation of the driver is in the debug mode, so that the error is clear when the error occurs.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        self.use_multipath \u003d True"},{"line_number":143,"context_line":"        self.owners \u003d [\u0027SP1\u0027, \u0027SP2\u0027]"},{"line_number":144,"context_line":"        self.owner_idx \u003d 0"},{"line_number":145,"context_line":"        self.volume_backend_name \u003d \\"},{"line_number":146,"context_line":"            self.configuration.safe_get(\u0027volume_backend_name\u0027) or \u0027MacroSAN\u0027"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        self.username \u003d self.configuration.san_login"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_f6ea050d","line":145,"range":{"start_line":145,"start_character":35,"end_line":145,"end_character":36},"updated":"2019-07-12 13:12:48.000000000","message":"Avoid using \\ to span multiple lines. Wrap in () if needed.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        self.use_multipath \u003d True"},{"line_number":143,"context_line":"        self.owners \u003d [\u0027SP1\u0027, \u0027SP2\u0027]"},{"line_number":144,"context_line":"        self.owner_idx \u003d 0"},{"line_number":145,"context_line":"        self.volume_backend_name \u003d \\"},{"line_number":146,"context_line":"            self.configuration.safe_get(\u0027volume_backend_name\u0027) or \u0027MacroSAN\u0027"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        self.username \u003d self.configuration.san_login"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_06caeb4c","line":145,"range":{"start_line":145,"start_character":35,"end_line":145,"end_character":36},"in_reply_to":"7faddb67_f6ea050d","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def _volume_name(self, volume):"},{"line_number":223,"context_line":"        try:"},{"line_number":224,"context_line":"            lun_uuid \u003d re.search(\u0027macrosan uuid:(.+)\u0027,"},{"line_number":225,"context_line":"                                 volume[\u0027provider_location\u0027]).group(1)"},{"line_number":226,"context_line":"            return self.client.get_lun_name(lun_uuid)"},{"line_number":227,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_16d9e17d","line":224,"range":{"start_line":224,"start_character":33,"end_line":224,"end_character":34},"updated":"2019-07-12 13:12:48.000000000","message":"Make this a raw string:\n\nr\u0027macroson uuid:(.+)\u0027","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def _volume_name(self, volume):"},{"line_number":223,"context_line":"        try:"},{"line_number":224,"context_line":"            lun_uuid \u003d re.search(\u0027macrosan uuid:(.+)\u0027,"},{"line_number":225,"context_line":"                                 volume[\u0027provider_location\u0027]).group(1)"},{"line_number":226,"context_line":"            return self.client.get_lun_name(lun_uuid)"},{"line_number":227,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_a6c2f732","line":224,"range":{"start_line":224,"start_character":33,"end_line":224,"end_character":34},"in_reply_to":"7faddb67_16d9e17d","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def _snapshot_name(self, snapshotid):"},{"line_number":231,"context_line":"        return snapshotid.replace(\u0027-\u0027, \u0027\u0027)[:31]"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def inilize_iscsi_info(self):"},{"line_number":234,"context_line":"        sp1_port, sp2_port \u003d \\"},{"line_number":235,"context_line":"            self.configuration.macrosan_client_default.split(\u0027;\u0027)"},{"line_number":236,"context_line":"        host \u003d socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_56baf909","line":233,"range":{"start_line":233,"start_character":8,"end_line":233,"end_character":15},"updated":"2019-07-12 13:12:48.000000000","message":"Since I know someone will come along later and feel the need to correct this, probably good to fix the spelling of initialize.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def _snapshot_name(self, snapshotid):"},{"line_number":231,"context_line":"        return snapshotid.replace(\u0027-\u0027, \u0027\u0027)[:31]"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def inilize_iscsi_info(self):"},{"line_number":234,"context_line":"        sp1_port, sp2_port \u003d \\"},{"line_number":235,"context_line":"            self.configuration.macrosan_client_default.split(\u0027;\u0027)"},{"line_number":236,"context_line":"        host \u003d socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_c6bff3a7","line":233,"range":{"start_line":233,"start_character":8,"end_line":233,"end_character":15},"in_reply_to":"7faddb67_56baf909","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":551,"context_line":"    def _detach_volume(self, context, attach_info, volume,"},{"line_number":552,"context_line":"                       properties, force\u003dFalse, remote\u003dFalse,"},{"line_number":553,"context_line":"                       ignore_errors\u003dTrue):"},{"line_number":554,"context_line":"        time.sleep(0.5)"},{"line_number":555,"context_line":"        return super(MacroSANBaseDriver, self)._detach_volume(context,"},{"line_number":556,"context_line":"                                                              attach_info,"},{"line_number":557,"context_line":"                                                              volume,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_5668b985","line":554,"updated":"2019-07-12 13:12:48.000000000","message":"Why is this needed? Sleep calls in the code should be avoided. If there is some need for it, make sure unit tests are properly mocking them out to make sure there are not unnecessary delays when running them.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":551,"context_line":"    def _detach_volume(self, context, attach_info, volume,"},{"line_number":552,"context_line":"                       properties, force\u003dFalse, remote\u003dFalse,"},{"line_number":553,"context_line":"                       ignore_errors\u003dTrue):"},{"line_number":554,"context_line":"        time.sleep(0.5)"},{"line_number":555,"context_line":"        return super(MacroSANBaseDriver, self)._detach_volume(context,"},{"line_number":556,"context_line":"                                                              attach_info,"},{"line_number":557,"context_line":"                                                              volume,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_66de3f12","line":554,"in_reply_to":"7faddb67_5668b985","updated":"2019-07-16 01:44:39.000000000","message":"done in the unit tests","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            with ignored(Exception):"},{"line_number":587,"context_line":"                self.client.disable_snapshot(volume_name)"},{"line_number":588,"context_line":"                self.client.delete_snapshot_resource(volume_name)"},{"line_number":589,"context_line":"            raise e"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        return int(pointid)"},{"line_number":592,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_b60c8dec","line":589,"range":{"start_line":589,"start_character":12,"end_line":589,"end_character":19},"updated":"2019-07-12 13:12:48.000000000","message":"Proper use is just \"raise\", not \"raise e\".","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            with ignored(Exception):"},{"line_number":587,"context_line":"                self.client.disable_snapshot(volume_name)"},{"line_number":588,"context_line":"                self.client.delete_snapshot_resource(volume_name)"},{"line_number":589,"context_line":"            raise e"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        return int(pointid)"},{"line_number":592,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_86e33bd9","line":589,"range":{"start_line":589,"start_character":12,"end_line":589,"end_character":19},"in_reply_to":"7faddb67_b60c8dec","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":922,"context_line":""},{"line_number":923,"context_line":"    @record_request_id"},{"line_number":924,"context_line":"    def manage_existing_get_size(self, volume, external_ref):"},{"line_number":925,"context_line":"        _, info, _ \u003d self._get_existing_lun_info(external_ref)"},{"line_number":926,"context_line":"        size \u003d int(math.ceil(info[\u0027size\u0027]))"},{"line_number":927,"context_line":"        return size"},{"line_number":928,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_1635618f","line":925,"range":{"start_line":925,"start_character":16,"end_line":925,"end_character":18},"updated":"2019-07-12 13:12:48.000000000","message":"Since the i18n stuff uses _() to mark translatable strings, these need to be changed to __ or something similar so it does not hide the _ import.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":922,"context_line":""},{"line_number":923,"context_line":"    @record_request_id"},{"line_number":924,"context_line":"    def manage_existing_get_size(self, volume, external_ref):"},{"line_number":925,"context_line":"        _, info, _ \u003d self._get_existing_lun_info(external_ref)"},{"line_number":926,"context_line":"        size \u003d int(math.ceil(info[\u0027size\u0027]))"},{"line_number":927,"context_line":"        return size"},{"line_number":928,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_26e4c7df","line":925,"range":{"start_line":925,"start_character":16,"end_line":925,"end_character":18},"in_reply_to":"7faddb67_1635618f","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":939,"context_line":"        pool \u003d volume_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":940,"context_line":"        name, info, params \u003d self._get_existing_lun_info(external_ref)"},{"line_number":941,"context_line":"        if pool !\u003d info[\u0027pool\u0027]:"},{"line_number":942,"context_line":"            msg \u003d (\"LUN %s does not belong to the pool: %s.\" % (name, pool))"},{"line_number":943,"context_line":"            raise exception.ManageExistingInvalidReference("},{"line_number":944,"context_line":"                existing_ref\u003dexternal_ref, reason\u003dmsg)"},{"line_number":945,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_9620714a","line":942,"range":{"start_line":942,"start_character":18,"end_line":942,"end_character":19},"updated":"2019-07-12 13:12:48.000000000","message":"Mark exception strings for translation with _().","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":939,"context_line":"        pool \u003d volume_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":940,"context_line":"        name, info, params \u003d self._get_existing_lun_info(external_ref)"},{"line_number":941,"context_line":"        if pool !\u003d info[\u0027pool\u0027]:"},{"line_number":942,"context_line":"            msg \u003d (\"LUN %s does not belong to the pool: %s.\" % (name, pool))"},{"line_number":943,"context_line":"            raise exception.ManageExistingInvalidReference("},{"line_number":944,"context_line":"                existing_ref\u003dexternal_ref, reason\u003dmsg)"},{"line_number":945,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_46e9c3b4","line":942,"range":{"start_line":942,"start_character":18,"end_line":942,"end_character":19},"in_reply_to":"7faddb67_9620714a","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":1491,"context_line":"    def _initialize_connection(self, name, vol_params, host, wwns):"},{"line_number":1492,"context_line":"        client_name \u003d self._get_client_name(host)"},{"line_number":1493,"context_line":""},{"line_number":1494,"context_line":"        LOG.info(\u0027initialize_connection, initiator: %(wwpns)s,\u0027"},{"line_number":1495,"context_line":"                 \u0027volume name: %(volume)s.\u0027,"},{"line_number":1496,"context_line":"                 {\u0027wwpns\u0027: wwns, \u0027volume\u0027: name})"},{"line_number":1497,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_76e855e1","line":1494,"range":{"start_line":1494,"start_character":62,"end_line":1494,"end_character":63},"updated":"2019-07-12 13:12:48.000000000","message":"Missing space at end.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":1491,"context_line":"    def _initialize_connection(self, name, vol_params, host, wwns):"},{"line_number":1492,"context_line":"        client_name \u003d self._get_client_name(host)"},{"line_number":1493,"context_line":""},{"line_number":1494,"context_line":"        LOG.info(\u0027initialize_connection, initiator: %(wwpns)s,\u0027"},{"line_number":1495,"context_line":"                 \u0027volume name: %(volume)s.\u0027,"},{"line_number":1496,"context_line":"                 {\u0027wwpns\u0027: wwns, \u0027volume\u0027: name})"},{"line_number":1497,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_e6d1cffc","line":1494,"range":{"start_line":1494,"start_character":62,"end_line":1494,"end_character":63},"in_reply_to":"7faddb67_76e855e1","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":1497,"context_line":""},{"line_number":1498,"context_line":"        has_port_not_mapped, initr_port_map \u003d ("},{"line_number":1499,"context_line":"            self._map_initr_tgt(self.client, client_name, wwns))"},{"line_number":1500,"context_line":"        msg \u003d \u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003dinitr_port_map %s\u0027 % initr_port_map"},{"line_number":1501,"context_line":"        LOG.info(msg)"},{"line_number":1502,"context_line":""},{"line_number":1503,"context_line":"        if vol_params and vol_params[\u0027sdas\u0027]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_96ce3180","line":1500,"range":{"start_line":1500,"start_character":53,"end_line":1500,"end_character":55},"updated":"2019-07-12 13:12:48.000000000","message":"Don\u0027t preformat strings into a variable just to pass into a logging call. Put the message directly in the LOG.info call and pass the formatting values as args to the call so the logging code can handle the string formatting when it\u0027s actually needed.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":29014,"name":"wuchongyao","email":"wuchongyao@outlook.com","username":"wuchongyao"},"change_message_id":"1d2f8cf824b7139df1c55dfdd1b20da641d97446","unresolved":false,"context_lines":[{"line_number":1497,"context_line":""},{"line_number":1498,"context_line":"        has_port_not_mapped, initr_port_map \u003d ("},{"line_number":1499,"context_line":"            self._map_initr_tgt(self.client, client_name, wwns))"},{"line_number":1500,"context_line":"        msg \u003d \u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003dinitr_port_map %s\u0027 % initr_port_map"},{"line_number":1501,"context_line":"        LOG.info(msg)"},{"line_number":1502,"context_line":""},{"line_number":1503,"context_line":"        if vol_params and vol_params[\u0027sdas\u0027]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_06cf4b56","line":1500,"range":{"start_line":1500,"start_character":53,"end_line":1500,"end_character":55},"in_reply_to":"7faddb67_96ce3180","updated":"2019-07-16 01:44:39.000000000","message":"done","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f969e1617b80582eeebf1de92d19cbeaff1f9042","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    def _self_node_wwns(self):"},{"line_number":187,"context_line":"        return []"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def _sizestr(self, size_in_g):"},{"line_number":190,"context_line":"        if int(size_in_g) \u003d\u003d 0:"},{"line_number":191,"context_line":"            return 1"},{"line_number":192,"context_line":"        return int(size_in_g)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _volume_name(self, volume):"},{"line_number":195,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7faddb67_3dfc9c6e","line":192,"range":{"start_line":189,"start_character":0,"end_line":192,"end_character":29},"updated":"2019-07-23 08:13:07.000000000","message":"the name seems like it is converting int value of size to string but the functionality is opposite (or for floating values)\ncould you provide reason for the need of this method?\nand if needed should be renamed to something like size_str_to_int","commit_id":"b0fb21e5ed1268bfc58d98b8af0bace37a47d26c"},{"author":{"_account_id":29620,"name":"hjy","email":"821328772@qq.com","username":"lol"},"change_message_id":"2cfef713b9d19f573de9af5ce6f8b563aa8aaca8","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    def _self_node_wwns(self):"},{"line_number":187,"context_line":"        return []"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def _sizestr(self, size_in_g):"},{"line_number":190,"context_line":"        if int(size_in_g) \u003d\u003d 0:"},{"line_number":191,"context_line":"            return 1"},{"line_number":192,"context_line":"        return int(size_in_g)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _volume_name(self, volume):"},{"line_number":195,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7faddb67_6ead279a","line":192,"range":{"start_line":189,"start_character":0,"end_line":192,"end_character":29},"in_reply_to":"7faddb67_3dfc9c6e","updated":"2019-07-25 06:25:20.000000000","message":"done","commit_id":"b0fb21e5ed1268bfc58d98b8af0bace37a47d26c"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f969e1617b80582eeebf1de92d19cbeaff1f9042","unresolved":false,"context_lines":[{"line_number":426,"context_line":"            k \u003d ks[-1]"},{"line_number":427,"context_line":"            if k not in params:"},{"line_number":428,"context_line":"                continue"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            if k in params:"},{"line_number":431,"context_line":"                v \u003d val.split()[-1]"},{"line_number":432,"context_line":"                val_type \u003d type(params[k]).__name__"},{"line_number":433,"context_line":"                if val_type \u003d\u003d \u0027int\u0027:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7faddb67_fd74c4ff","line":430,"range":{"start_line":429,"start_character":0,"end_line":430,"end_character":27},"updated":"2019-07-23 08:13:07.000000000","message":"else:","commit_id":"b0fb21e5ed1268bfc58d98b8af0bace37a47d26c"},{"author":{"_account_id":29620,"name":"hjy","email":"821328772@qq.com","username":"lol"},"change_message_id":"2cfef713b9d19f573de9af5ce6f8b563aa8aaca8","unresolved":false,"context_lines":[{"line_number":426,"context_line":"            k \u003d ks[-1]"},{"line_number":427,"context_line":"            if k not in params:"},{"line_number":428,"context_line":"                continue"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            if k in params:"},{"line_number":431,"context_line":"                v \u003d val.split()[-1]"},{"line_number":432,"context_line":"                val_type \u003d type(params[k]).__name__"},{"line_number":433,"context_line":"                if val_type \u003d\u003d \u0027int\u0027:"}],"source_content_type":"text/x-python","patch_set":17,"id":"7faddb67_0e94b343","line":430,"range":{"start_line":429,"start_character":0,"end_line":430,"end_character":27},"in_reply_to":"7faddb67_fd74c4ff","updated":"2019-07-25 06:25:20.000000000","message":"done","commit_id":"b0fb21e5ed1268bfc58d98b8af0bace37a47d26c"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f969e1617b80582eeebf1de92d19cbeaff1f9042","unresolved":false,"context_lines":[{"line_number":809,"context_line":"        pool[\u0027max_over_subscription_ratio\u0027] \u003d self.configuration.safe_get("},{"line_number":810,"context_line":"            \u0027max_over_subscription_ratio\u0027)"},{"line_number":811,"context_line":"        pool[\u0027QoS_support\u0027] \u003d True"},{"line_number":812,"context_line":"        pool[\u0027multiattach\u0027] \u003d \u0027True\u0027"},{"line_number":813,"context_line":"        pool[\u0027lun_mode\u0027] \u003d True"},{"line_number":814,"context_line":"        pool[\u0027replication_mode\u0027] \u003d []"},{"line_number":815,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7faddb67_f38f1372","line":812,"range":{"start_line":812,"start_character":30,"end_line":812,"end_character":36},"updated":"2019-07-23 08:13:07.000000000","message":"why is this set as a string?","commit_id":"b0fb21e5ed1268bfc58d98b8af0bace37a47d26c"},{"author":{"_account_id":29620,"name":"hjy","email":"821328772@qq.com","username":"lol"},"change_message_id":"2cfef713b9d19f573de9af5ce6f8b563aa8aaca8","unresolved":false,"context_lines":[{"line_number":809,"context_line":"        pool[\u0027max_over_subscription_ratio\u0027] \u003d self.configuration.safe_get("},{"line_number":810,"context_line":"            \u0027max_over_subscription_ratio\u0027)"},{"line_number":811,"context_line":"        pool[\u0027QoS_support\u0027] \u003d True"},{"line_number":812,"context_line":"        pool[\u0027multiattach\u0027] \u003d \u0027True\u0027"},{"line_number":813,"context_line":"        pool[\u0027lun_mode\u0027] \u003d True"},{"line_number":814,"context_line":"        pool[\u0027replication_mode\u0027] \u003d []"},{"line_number":815,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7faddb67_ee983776","line":812,"range":{"start_line":812,"start_character":30,"end_line":812,"end_character":36},"in_reply_to":"7faddb67_f38f1372","updated":"2019-07-25 06:25:20.000000000","message":"done","commit_id":"b0fb21e5ed1268bfc58d98b8af0bace37a47d26c"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f969e1617b80582eeebf1de92d19cbeaff1f9042","unresolved":false,"context_lines":[{"line_number":847,"context_line":"            self.client.backup_lun_name_to_rename_file(cur_name, original_name)"},{"line_number":848,"context_line":"        else:"},{"line_number":849,"context_line":"            try:"},{"line_number":850,"context_line":"                self.client.rename_lun(cur_name, original_name)"},{"line_number":851,"context_line":"            except Exception:"},{"line_number":852,"context_line":"                LOG.warning(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d failed to rename \u0027"},{"line_number":853,"context_line":"                            \u0027%(cur_name)s to %(original_name)s\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7faddb67_a9a4a3ba","line":850,"range":{"start_line":850,"start_character":16,"end_line":850,"end_character":63},"updated":"2019-07-23 08:13:07.000000000","message":"the renaming should be done if original_volume_status is available, could you explain why we haven\u0027t added a check here?","commit_id":"b0fb21e5ed1268bfc58d98b8af0bace37a47d26c"},{"author":{"_account_id":29620,"name":"hjy","email":"821328772@qq.com","username":"lol"},"change_message_id":"2cfef713b9d19f573de9af5ce6f8b563aa8aaca8","unresolved":false,"context_lines":[{"line_number":847,"context_line":"            self.client.backup_lun_name_to_rename_file(cur_name, original_name)"},{"line_number":848,"context_line":"        else:"},{"line_number":849,"context_line":"            try:"},{"line_number":850,"context_line":"                self.client.rename_lun(cur_name, original_name)"},{"line_number":851,"context_line":"            except Exception:"},{"line_number":852,"context_line":"                LOG.warning(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d failed to rename \u0027"},{"line_number":853,"context_line":"                            \u0027%(cur_name)s to %(original_name)s\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7faddb67_2e8f2f2f","line":850,"range":{"start_line":850,"start_character":16,"end_line":850,"end_character":63},"in_reply_to":"7faddb67_a9a4a3ba","updated":"2019-07-25 06:25:20.000000000","message":"done","commit_id":"b0fb21e5ed1268bfc58d98b8af0bace37a47d26c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"eca2e7b47b20869578c94690236b6209fa839546","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def __timing(*vargs, **kv):"},{"line_number":68,"context_line":"        start \u003d time.time()"},{"line_number":69,"context_line":"        if timing_on:"},{"line_number":70,"context_line":"            LOG.info(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d start %s\u0027, fn.__name__)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        result \u003d fn(*vargs, **kv)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_68ff5767","line":70,"range":{"start_line":70,"start_character":16,"end_line":70,"end_character":20},"updated":"2019-07-25 13:40:59.000000000","message":"This is debug output, not info.","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"eca2e7b47b20869578c94690236b6209fa839546","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if timing_on:"},{"line_number":75,"context_line":"            end \u003d time.time()"},{"line_number":76,"context_line":"            LOG.info(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d end %(fname)s, cost: %(cost).2f secs\u0027,"},{"line_number":77,"context_line":"                     {\u0027fname\u0027: fn.__name__, \u0027cost\u0027: end - start})"},{"line_number":78,"context_line":"        return result"},{"line_number":79,"context_line":"    return __timing"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_28f95f7f","line":76,"range":{"start_line":76,"start_character":16,"end_line":76,"end_character":20},"updated":"2019-07-25 13:40:59.000000000","message":"same","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"def b64encode(s):"},{"line_number":97,"context_line":"    return base64.b64encode(six.b(s)).decode()"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"def b64decode(s):"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_c3018c06","line":97,"updated":"2019-07-25 14:15:09.000000000","message":"this doesn\u0027t look like an encode call, and this is exactly the same as b64decode()","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":104,"context_line":"class MacroSANBaseDriver(driver.VolumeDriver):"},{"line_number":105,"context_line":"    \"\"\"Base driver for MacroSAN SAN.\"\"\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    CI_WIKI_NAME \u003d \u0027MacroSAN Volume CI\u0027"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":110,"context_line":"        \"\"\"Initialize the driver.\"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_6321b89f","line":107,"updated":"2019-07-25 14:15:09.000000000","message":"need a VERSION \u003d \u00271.0.0\u0027 here as well as a Version history docstring that other drivers do.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/hpe/hpe_3par_iscsi.py#L62-L132","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                                    self.replica_login_info))"},{"line_number":250,"context_line":"        self.device_uuid \u003d self.client.get_device_uuid()"},{"line_number":251,"context_line":"        self._do_setup()"},{"line_number":252,"context_line":"        LOG.info(\u0027MacroSAN Cinder Driver setup complete.\u0027)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def _do_setup(self):"},{"line_number":255,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_03456443","line":252,"updated":"2019-07-25 14:15:09.000000000","message":"this should probably be debug too.","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        LOG.debug((\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d create volume, name: %(name)s,\u0027"},{"line_number":450,"context_line":"                   \u0027id: %(volume_id)s, size: %(size)s.\u0027),"},{"line_number":451,"context_line":"                  {\u0027name\u0027: volume[\u0027name\u0027], \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":452,"context_line":"                   \u0027size\u0027: volume[\u0027size\u0027]})"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        name \u003d volume[\u0027name\u0027]"},{"line_number":455,"context_line":"        size \u003d self._size_str_to_int(volume[\u0027size\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_038c847d","line":452,"updated":"2019-07-25 14:15:09.000000000","message":"Cinder as a trace facility that does this already\n@utils.trace as a function decorator.","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":506,"context_line":"    @_timing"},{"line_number":507,"context_line":"    def delete_volume(self, volume):"},{"line_number":508,"context_line":"        \"\"\"Delete a volume.\"\"\""},{"line_number":509,"context_line":"        LOG.debug(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d delete volume, id: %s.\u0027, volume[\u0027id\u0027])"},{"line_number":510,"context_line":"        name \u003d self._volume_name(volume)"},{"line_number":511,"context_line":"        params \u003d self._parse_volume_params(volume)"},{"line_number":512,"context_line":"        self._delete_volume(name, params)"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_83f5d4ef","line":509,"updated":"2019-07-25 14:15:09.000000000","message":"@utils.trace","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":570,"context_line":"        LOG.debug((\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d create snapshot, snapshot id: %(snapshot_id)s,\u0027"},{"line_number":571,"context_line":"                   \u0027 volume id: %(volume_id)s, size: %(size)s.\u0027),"},{"line_number":572,"context_line":"                  {\u0027snapshot_id\u0027: snapshot[\u0027id\u0027], \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":573,"context_line":"                   \u0027size\u0027: volume[\u0027size\u0027]})"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"        snapshot_name \u003d self._snapshot_name(snapshot[\u0027name\u0027])"},{"line_number":576,"context_line":"        volume_name \u003d self._volume_name(volume)"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_e3e5a839","line":573,"updated":"2019-07-25 14:15:09.000000000","message":"@utils.trace","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        LOG.debug((\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d delete snapshot, snapshot id: %(snapshot_id)s,\u0027"},{"line_number":611,"context_line":"                   \u0027 pointid: %(point_id)s, volume id: %(volume_id)s.\u0027),"},{"line_number":612,"context_line":"                  {\u0027snapshot_id\u0027: snapshot[\u0027id\u0027], \u0027point_id\u0027: m[0],"},{"line_number":613,"context_line":"                   \u0027volume_id\u0027: volume[\u0027id\u0027]})"},{"line_number":614,"context_line":"        snapshot_name \u003d self._snapshot_name(snapshot[\u0027id\u0027])"},{"line_number":615,"context_line":"        volume_name \u003d self._volume_name(volume)"},{"line_number":616,"context_line":"        self._delete_snapshot(snapshot_name, volume_name, m[0])"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_23c5008f","line":613,"updated":"2019-07-25 14:15:09.000000000","message":"@utils.trace","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"5b419bc257034774fe6295572df9b569a837b430","unresolved":false,"context_lines":[{"line_number":621,"context_line":"    def _terminate_connection(self, name, host, wwns):"},{"line_number":622,"context_line":"        raise NotImplementedError"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    def _connect(self, name):"},{"line_number":625,"context_line":"        host \u003d socket.gethostname()"},{"line_number":626,"context_line":"        conn \u003d self._initialize_connection(name, host,"},{"line_number":627,"context_line":"                                           self._self_node_wwns)"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_43acbc34","line":624,"updated":"2019-07-25 14:26:47.000000000","message":"I don\u0027t see this used anywhere?","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"5b419bc257034774fe6295572df9b569a837b430","unresolved":false,"context_lines":[{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        return {\u0027conn\u0027: conn, \u0027device\u0027: device, \u0027connector\u0027: connector}"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"    def _disconnect(self, conn, name):"},{"line_number":646,"context_line":"        connector \u003d conn[\u0027connector\u0027]"},{"line_number":647,"context_line":"        connector.disconnect_volume(conn[\u0027conn\u0027][\u0027data\u0027],"},{"line_number":648,"context_line":"                                    conn[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_03a6c454","line":645,"updated":"2019-07-25 14:26:47.000000000","message":"I don\u0027t see this used anywhere either?","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":683,"context_line":"    @_timing"},{"line_number":684,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":685,"context_line":"        \"\"\"Create a volume from a snapshot.\"\"\""},{"line_number":686,"context_line":"        LOG.debug(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d create volume from snapshot.\u0027)"},{"line_number":687,"context_line":"        snapshot_volume \u003d snapshot[\u0027volume\u0027]"},{"line_number":688,"context_line":"        provider \u003d snapshot[\u0027provider_location\u0027]"},{"line_number":689,"context_line":"        m \u003d re.findall(r\u0027pointid: (\\d+)\u0027, provider)"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_43c03c7d","line":686,"updated":"2019-07-25 14:15:09.000000000","message":"@utils.trace","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":725,"context_line":"    @_timing"},{"line_number":726,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":727,"context_line":"        \"\"\"Create a clone of the specified volume.\"\"\""},{"line_number":728,"context_line":"        LOG.debug(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d create cloned volume.\u0027)"},{"line_number":729,"context_line":"        vol_name \u003d volume[\u0027id\u0027]"},{"line_number":730,"context_line":"        src_vol_name \u003d self._volume_name(src_vref)"},{"line_number":731,"context_line":"        snapshotid \u003d\\"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_c3398ca3","line":728,"updated":"2019-07-25 14:15:09.000000000","message":"@utils.trace","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":768,"context_line":"        \"\"\"Extend a volume.\"\"\""},{"line_number":769,"context_line":"        LOG.debug((\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d extend volume, id: %(volume_id)s,\u0027"},{"line_number":770,"context_line":"                   \u0027size: %(size)s.\u0027),"},{"line_number":771,"context_line":"                  {\u0027volume_id\u0027: volume[\u0027id\u0027], \u0027size\u0027: new_size})"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        name \u003d self._volume_name(volume)"},{"line_number":774,"context_line":"        moresize \u003d self._size_str_to_int(new_size - int(volume[\u0027size\u0027]))"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_83439413","line":771,"updated":"2019-07-25 14:15:09.000000000","message":"@utils.trace","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":1195,"context_line":""},{"line_number":1196,"context_line":"    @property"},{"line_number":1197,"context_line":"    def _self_node_wwns(self):"},{"line_number":1198,"context_line":"        connector \u003d cn.ISCSIConnector(utils.get_root_helper())"},{"line_number":1199,"context_line":"        return [connector.get_initiator()]"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":"    def _initialize_connection(self, name, vol_params, host, wwns):"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_439d9c55","line":1198,"updated":"2019-07-25 14:15:09.000000000","message":"Why are you manually getting an os-brick connector to get the initiator information on the cinder host?   This information won\u0027t be valid for a VM attachment.  Also, The connector information for the cinder volume host is passed in during initialize_connection time for local attaches.","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":1331,"context_line":"    @property"},{"line_number":1332,"context_line":"    def _self_node_wwns(self):"},{"line_number":1333,"context_line":"        fc \u003d linuxfc.LinuxFibreChannel(utils.get_root_helper())"},{"line_number":1334,"context_line":"        return [self._format_wwn_with_colon(wwn) for wwn in fc.get_fc_wwpns()]"},{"line_number":1335,"context_line":""},{"line_number":1336,"context_line":"    def _strip_wwn_colon(self, wwn_str):"},{"line_number":1337,"context_line":"        return wwn_str.replace(\u0027:\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"7faddb67_03d564e5","line":1334,"updated":"2019-07-25 14:15:09.000000000","message":"Why are you calling os-brick connectors to get this information?  cinder drivers are called with connector information about the host that is doing the attachment.","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def __timing(*vargs, **kv):"},{"line_number":68,"context_line":"        start \u003d time.time()"},{"line_number":69,"context_line":"        if timing_on:"},{"line_number":70,"context_line":"            LOG.info(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d start %s\u0027, fn.__name__)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        result \u003d fn(*vargs, **kv)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_78e646eb","line":70,"updated":"2019-07-25 16:14:31.000000000","message":"This should be Debug Level","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if timing_on:"},{"line_number":75,"context_line":"            end \u003d time.time()"},{"line_number":76,"context_line":"            LOG.info(\u0027\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d end %(fname)s, cost: %(cost).2f secs\u0027,"},{"line_number":77,"context_line":"                     {\u0027fname\u0027: fn.__name__, \u0027cost\u0027: end - start})"},{"line_number":78,"context_line":"        return result"},{"line_number":79,"context_line":"    return __timing"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_f8d9d621","line":76,"updated":"2019-07-25 16:14:31.000000000","message":"same here.","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        self.initialize_iscsi_info()"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    @property"},{"line_number":186,"context_line":"    def _self_node_wwns(self):"},{"line_number":187,"context_line":"        return []"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def _size_str_to_int(self, size_in_g):"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_b82a7ee4","line":186,"updated":"2019-07-25 16:14:31.000000000","message":"What is the point of this function?","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"5b419bc257034774fe6295572df9b569a837b430","unresolved":false,"context_lines":[{"line_number":621,"context_line":"    def _terminate_connection(self, name, host, wwns):"},{"line_number":622,"context_line":"        raise NotImplementedError"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    def _connect(self, name):"},{"line_number":625,"context_line":"        host \u003d socket.gethostname()"},{"line_number":626,"context_line":"        conn \u003d self._initialize_connection(name, host,"},{"line_number":627,"context_line":"                                           self._self_node_wwns)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_c34e6c95","line":624,"updated":"2019-07-25 14:26:47.000000000","message":"I don\u0027t see this being used anywhere?","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"5b419bc257034774fe6295572df9b569a837b430","unresolved":false,"context_lines":[{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        return {\u0027conn\u0027: conn, \u0027device\u0027: device, \u0027connector\u0027: connector}"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"    def _disconnect(self, conn, name):"},{"line_number":646,"context_line":"        connector \u003d conn[\u0027connector\u0027]"},{"line_number":647,"context_line":"        connector.disconnect_volume(conn[\u0027conn\u0027][\u0027data\u0027],"},{"line_number":648,"context_line":"                                    conn[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_235f4042","line":645,"updated":"2019-07-25 14:26:47.000000000","message":"same","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":906,"context_line":"        self._check_volume_params(vol_params)"},{"line_number":907,"context_line":"        if vol_params[\u0027qos-strategy\u0027]:"},{"line_number":908,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":909,"context_line":"                data\u003d_(\u0027Not support to import qos-strategy\u0027))"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"        pool \u003d volume_utils.extract_host(volume.host, \u0027pool\u0027)"},{"line_number":912,"context_line":"        name, info, params \u003d self._get_existing_lun_info(external_ref)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_b894bee9","line":909,"updated":"2019-07-25 16:14:31.000000000","message":"Import qos-strategy not supported.","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"        owner \u003d self.client.get_lun_sp(src_name)"},{"line_number":1050,"context_line":"        pool \u003d host[\u0027capabilities\u0027].get(\u0027pool_name\u0027, self.pool)"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"        LOG.info(\u0027host: %(host)s, backend: %(volume_backend_name)s\u0027,"},{"line_number":1053,"context_line":"                 {\u0027host\u0027: host,"},{"line_number":1054,"context_line":"                  \u0027volume_backend_name\u0027: self.volume_backend_name})"},{"line_number":1055,"context_line":"        self._create_volume(name, size, params, owner, pool)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_f8aa3617","line":1052,"updated":"2019-07-25 16:14:31.000000000","message":"This message as an info message needs some context on it.  For instance \u0027Migrating volume:","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"            lun_id \u003d self._get_unused_lun_id(self.client, initr_port_map,"},{"line_number":1484,"context_line":"                                             self.sdas_client,"},{"line_number":1485,"context_line":"                                             sdas_initr_port_map)"},{"line_number":1486,"context_line":"            LOG.info(\u0027%(fr)sdas_initr_port_map %(sdas_initr_port_map)s\u0027,"},{"line_number":1487,"context_line":"                     {\u0027fr\u0027: \u0027\u003d\u0027 * 10,"},{"line_number":1488,"context_line":"                      \u0027sdas_initr_port_map\u0027: sdas_initr_port_map})"},{"line_number":1489,"context_line":"            self._map_itl(self.sdas_client, sdas_initr_port_map, name, lun_id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7faddb67_f82d56a8","line":1486,"updated":"2019-07-25 16:14:31.000000000","message":"This should probably be LOG.debug .","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"}],"doc/source/configuration/block-storage/drivers/MacroSAN-storage-driver.rst":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":297,"context_line":"This section describes mandatory and optional configuration file parameters"},{"line_number":298,"context_line":"of the MacroSAN volume driver."},{"line_number":299,"context_line":""},{"line_number":300,"context_line":".. list-table:: **Mandatory parameters**"},{"line_number":301,"context_line":"   :widths: 10 10 50 10"},{"line_number":302,"context_line":"   :header-rows: 1"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"7faddb67_f600c503","line":300,"updated":"2019-07-12 13:12:48.000000000","message":"I would recommend using the \"config-table\" directive. An example can be found at the bottom of here:\n\nhttps://opendev.org/openstack/cinder/raw/branch/master/doc/source/configuration/block-storage/drivers/ceph-rbd-volume-driver.rst","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"f969e1617b80582eeebf1de92d19cbeaff1f9042","unresolved":false,"context_lines":[{"line_number":59,"context_line":"- Volume Migration (Storage Assisted)."},{"line_number":60,"context_line":"- Retype a volume."},{"line_number":61,"context_line":"- Manage and unmanage a volume."},{"line_number":62,"context_line":"- Manage and unmanage a shanpshot."},{"line_number":63,"context_line":"- Volume Replication"},{"line_number":64,"context_line":"- Thin Provisioning"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"7faddb67_7b12f264","line":62,"range":{"start_line":62,"start_character":24,"end_line":62,"end_character":33},"updated":"2019-07-23 08:13:07.000000000","message":"snapshot","commit_id":"b0fb21e5ed1268bfc58d98b8af0bace37a47d26c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        devnode \"^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*\""},{"line_number":39,"context_line":"        devnode \"^hd[a-z]\""},{"line_number":40,"context_line":"        devnode \"^nbd*\""},{"line_number":41,"context_line":"    }"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Need to set user_friendly_names to no in the multipath.conf file."},{"line_number":44,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"7faddb67_2321804e","line":41,"updated":"2019-07-25 14:15:09.000000000","message":"Does this driver not work without creating this blacklist?\nThis will have to be done on ALL cinder and nova hosts?","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ba5819ad9564fa53a2e7a3b6e2459aeef4c9aca3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        devnode \"^nbd*\""},{"line_number":41,"context_line":"    }"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Need to set user_friendly_names to no in the multipath.conf file."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"In addition, you need to delete the getuid_callout parameter in"},{"line_number":46,"context_line":"the centos7 system."}],"source_content_type":"text/x-rst","patch_set":19,"id":"7faddb67_03fd64b0","line":43,"updated":"2019-07-25 14:15:09.000000000","message":"Why is this a requirement?  Many sys admins need this set to yes to help them keep track of the attachments.","commit_id":"dfe08e423030087e0a5126d5ce24f0cb183183f8"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"- MacroSAN Storage arrays with:"},{"line_number":15,"context_line":"  - iSCSI or FC host interfaces"},{"line_number":16,"context_line":"  - Enable RESTful service on the MacroSAN Storage Appliance."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"- Network connectivity between the OpenStack host and the array management"},{"line_number":19,"context_line":"  interfaces"}],"source_content_type":"text/x-rst","patch_set":20,"id":"7faddb67_8b240ab1","line":16,"updated":"2019-07-25 16:14:31.000000000","message":"Would be good to include the steps for doing this.","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"3ecbde7e49328135ec2d0d91afd4bd8e09164fc3","unresolved":false,"context_lines":[{"line_number":121,"context_line":"      # Storage user password."},{"line_number":122,"context_line":"      san_password \u003d openstack"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"      #Chose using thin-lun or thick lun.When set san_thin_provision to True,you must set"},{"line_number":125,"context_line":"      #macrosan_thin_lun_extent_size, macrosan_thin_lun_low_watermark, macrosan_thin_lun_high_watermark."},{"line_number":126,"context_line":"      san_thin_provision \u003d False"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"7faddb67_6e40bc08","line":124,"range":{"start_line":124,"start_character":7,"end_line":124,"end_character":12},"updated":"2019-07-25 19:10:36.000000000","message":"Choose","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":121,"context_line":"      # Storage user password."},{"line_number":122,"context_line":"      san_password \u003d openstack"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"      #Chose using thin-lun or thick lun.When set san_thin_provision to True,you must set"},{"line_number":125,"context_line":"      #macrosan_thin_lun_extent_size, macrosan_thin_lun_low_watermark, macrosan_thin_lun_high_watermark."},{"line_number":126,"context_line":"      san_thin_provision \u003d False"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"7faddb67_6b6f4ec5","line":124,"range":{"start_line":124,"start_character":37,"end_line":124,"end_character":45},"updated":"2019-07-25 16:14:31.000000000","message":"Missing space after \u0027.\u0027","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":129,"context_line":"      macrosan_pool \u003d Pool-a"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"      #The default ports used for initializing connection."},{"line_number":132,"context_line":"      #Separate the controller by semicolons (``;``)"},{"line_number":133,"context_line":"      #Separate the ports by semicolons (``,``)"},{"line_number":134,"context_line":"      macrosan_client_default \u003d eth-1:0:0, eth-1:0:1; eth-2:0:0, eth-2:0:1"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"      #The switch to force detach volume when deleting"}],"source_content_type":"text/x-rst","patch_set":20,"id":"7faddb67_4ba932db","line":133,"range":{"start_line":132,"start_character":0,"end_line":133,"end_character":46},"updated":"2019-07-25 16:14:31.000000000","message":"This doesn\u0027t look right.  You say Separate the port by semicolons and show a comma.  Which is right?","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b3b1572699bb636ce1dd753a169dba25658b6be4","unresolved":false,"context_lines":[{"line_number":158,"context_line":"      macrosan_sdas_username \u003d openstack"},{"line_number":159,"context_line":"      macrosan_sdas_password \u003d openstack"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"      #The setting of Replication Storage.When you set ip, you must set"},{"line_number":162,"context_line":"      #the macrosan_replication_destination_ports parameter."},{"line_number":163,"context_line":"      macrosan_replication_ipaddrs \u003d 172.17.251.142, 172.17.251.143"},{"line_number":164,"context_line":"      macrosan_replication_username \u003d openstack"}],"source_content_type":"text/x-rst","patch_set":20,"id":"7faddb67_0b8c9a7d","line":161,"range":{"start_line":161,"start_character":34,"end_line":161,"end_character":46},"updated":"2019-07-25 16:14:31.000000000","message":"Missing space again.","commit_id":"22a04777995ad92f7afc8fc58c176220ed2a9dd5"}],"releasenotes/notes/MacroSAN-volume-driver-6477e4ec7c38f49d.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"45d9b4e3e03d3a9b4d938062ad84547a58255aac","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added create, delete, attach, and detach volumes support for MacroSAN drivers."},{"line_number":4,"context_line":"  - Added create, list, and delete volume snapshots support for MacroSAN drivers."},{"line_number":5,"context_line":"  - Added create a volume from a snapshot support for MacroSAN drivers."},{"line_number":6,"context_line":"  - Added copy an image to a volume support for MacroSAN drivers."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"7faddb67_5329ab98","line":3,"updated":"2019-07-12 13:12:48.000000000","message":"I saw this was already addressed on IRC, but just so it\u0027s captured in the review, update this to just a line announcing that the MacroSAN driver has been added. It does not need to list every feature of the driver.","commit_id":"5b06353137eff6eeafc37992366f5f426ad1bd1f"}]}
