)]}'
{"cinder/volume/drivers/huawei/huawei_driver.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e656a0ec4ea55b9733ea3bbe01692d85bcdbfcd6","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    cfg.StrOpt(\u0027hypermetro_devices\u0027,"},{"line_number":53,"context_line":"               default\u003dNone,"},{"line_number":54,"context_line":"               help\u003d\u0027The remote device hypermetro will use.\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027metro_san_user\u0027,"},{"line_number":56,"context_line":"               default\u003dNone,"},{"line_number":57,"context_line":"               help\u003d\u0027The remote metro device san user.\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027metro_san_password\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_13747acd","side":"PARENT","line":55,"range":{"start_line":55,"start_character":16,"end_line":55,"end_character":30},"updated":"2017-03-16 13:07:20.000000000","message":"What are the upgrade implications of removing this? Typically we require deprecating config options for a release before they can be removed. This allows deployers time to make the necessary changes with a window before it just stops working.","commit_id":"356cd7ff7632f168a484d34fe821967f43fed9b0"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"01a4cbbad63019b0f94468925c4c098c03cf2e31","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    cfg.StrOpt(\u0027hypermetro_devices\u0027,"},{"line_number":53,"context_line":"               default\u003dNone,"},{"line_number":54,"context_line":"               help\u003d\u0027The remote device hypermetro will use.\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027metro_san_user\u0027,"},{"line_number":56,"context_line":"               default\u003dNone,"},{"line_number":57,"context_line":"               help\u003d\u0027The remote metro device san user.\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027metro_san_password\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_cfcfe3b1","side":"PARENT","line":55,"range":{"start_line":55,"start_character":16,"end_line":55,"end_character":30},"in_reply_to":"3a1ff146_13747acd","updated":"2017-03-17 05:57:25.000000000","message":"we just move the hypermetro config into hypermetro_device. Make it simple and keep consistent with replica.","commit_id":"356cd7ff7632f168a484d34fe821967f43fed9b0"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e656a0ec4ea55b9733ea3bbe01692d85bcdbfcd6","unresolved":false,"context_lines":[{"line_number":1616,"context_line":""},{"line_number":1617,"context_line":"        if (opts.get(\u0027hypermetro\u0027) \u003d\u003d \u0027true\u0027):"},{"line_number":1618,"context_line":"            if not self.check_func_support(\"HyperMetro_ConsistentGroup\"):"},{"line_number":1619,"context_line":"                msg \u003d (_LE(\"Can\u0027t create consistency group, array not \""},{"line_number":1620,"context_line":"                           \"support hypermetro consistentgroup, \""},{"line_number":1621,"context_line":"                           \"group id: %(group_id)s.\")"},{"line_number":1622,"context_line":"                       % {\"group_id\": group.id})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_93086a93","line":1619,"range":{"start_line":1619,"start_character":23,"end_line":1619,"end_character":26},"updated":"2017-03-16 13:07:20.000000000","message":"Should be _() for exception messages.","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"01a4cbbad63019b0f94468925c4c098c03cf2e31","unresolved":false,"context_lines":[{"line_number":1616,"context_line":""},{"line_number":1617,"context_line":"        if (opts.get(\u0027hypermetro\u0027) \u003d\u003d \u0027true\u0027):"},{"line_number":1618,"context_line":"            if not self.check_func_support(\"HyperMetro_ConsistentGroup\"):"},{"line_number":1619,"context_line":"                msg \u003d (_LE(\"Can\u0027t create consistency group, array not \""},{"line_number":1620,"context_line":"                           \"support hypermetro consistentgroup, \""},{"line_number":1621,"context_line":"                           \"group id: %(group_id)s.\")"},{"line_number":1622,"context_line":"                       % {\"group_id\": group.id})"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_2faa37d5","line":1619,"range":{"start_line":1619,"start_character":23,"end_line":1619,"end_character":26},"in_reply_to":"3a1ff146_93086a93","updated":"2017-03-17 05:57:25.000000000","message":"Done","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e656a0ec4ea55b9733ea3bbe01692d85bcdbfcd6","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1625,"context_line":""},{"line_number":1626,"context_line":"            if not self.check_rmt_func_support(\"HyperMetro_ConsistentGroup\"):"},{"line_number":1627,"context_line":"                msg \u003d (_LE(\"Can\u0027t create consistency group, remote array \""},{"line_number":1628,"context_line":"                           \"not support hypermetro consistentgroup, \""},{"line_number":1629,"context_line":"                           \"group id: %(group_id)s.\")"},{"line_number":1630,"context_line":"                       % {\"group_id\": group.id})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_f3f99e81","line":1627,"range":{"start_line":1627,"start_character":23,"end_line":1627,"end_character":26},"updated":"2017-03-16 13:07:20.000000000","message":"Same.","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"01a4cbbad63019b0f94468925c4c098c03cf2e31","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":1625,"context_line":""},{"line_number":1626,"context_line":"            if not self.check_rmt_func_support(\"HyperMetro_ConsistentGroup\"):"},{"line_number":1627,"context_line":"                msg \u003d (_LE(\"Can\u0027t create consistency group, remote array \""},{"line_number":1628,"context_line":"                           \"not support hypermetro consistentgroup, \""},{"line_number":1629,"context_line":"                           \"group id: %(group_id)s.\")"},{"line_number":1630,"context_line":"                       % {\"group_id\": group.id})"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_4faf73e3","line":1627,"range":{"start_line":1627,"start_character":23,"end_line":1627,"end_character":26},"in_reply_to":"3a1ff146_f3f99e81","updated":"2017-03-17 05:57:25.000000000","message":"Done","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e656a0ec4ea55b9733ea3bbe01692d85bcdbfcd6","unresolved":false,"context_lines":[{"line_number":1869,"context_line":"        \"\"\"Map a snapshot to a host and return target iSCSI information.\"\"\""},{"line_number":1870,"context_line":"        LOG.info(_LI(\u0027initialize_connection_snapshot for snapshot: \u0027"},{"line_number":1871,"context_line":"                     \u0027%(snapshot_id)s.\u0027)"},{"line_number":1872,"context_line":"                 % {\u0027snapshot_id\u0027: snapshot.id})"},{"line_number":1873,"context_line":""},{"line_number":1874,"context_line":"        # From the volume structure."},{"line_number":1875,"context_line":"        volume \u003d Volume(id\u003dsnapshot.id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_932f8af5","line":1872,"range":{"start_line":1872,"start_character":17,"end_line":1872,"end_character":18},"updated":"2017-03-16 13:07:20.000000000","message":"Change to ,","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e656a0ec4ea55b9733ea3bbe01692d85bcdbfcd6","unresolved":false,"context_lines":[{"line_number":1883,"context_line":"        \"\"\"Delete map between a snapshot and a host.\"\"\""},{"line_number":1884,"context_line":"        LOG.info(_LI(\u0027terminate_connection_snapshot for snapshot: \u0027"},{"line_number":1885,"context_line":"                     \u0027%(snapshot_id)s.\u0027)"},{"line_number":1886,"context_line":"                 % {\u0027snapshot_id\u0027: snapshot.id})"},{"line_number":1887,"context_line":""},{"line_number":1888,"context_line":"        # From the volume structure."},{"line_number":1889,"context_line":"        volume \u003d Volume(id\u003dsnapshot.id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_334b36cb","line":1886,"range":{"start_line":1886,"start_character":17,"end_line":1886,"end_character":18},"updated":"2017-03-16 13:07:20.000000000","message":"Same.","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"01a4cbbad63019b0f94468925c4c098c03cf2e31","unresolved":false,"context_lines":[{"line_number":1883,"context_line":"        \"\"\"Delete map between a snapshot and a host.\"\"\""},{"line_number":1884,"context_line":"        LOG.info(_LI(\u0027terminate_connection_snapshot for snapshot: \u0027"},{"line_number":1885,"context_line":"                     \u0027%(snapshot_id)s.\u0027)"},{"line_number":1886,"context_line":"                 % {\u0027snapshot_id\u0027: snapshot.id})"},{"line_number":1887,"context_line":""},{"line_number":1888,"context_line":"        # From the volume structure."},{"line_number":1889,"context_line":"        volume \u003d Volume(id\u003dsnapshot.id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_8fb96b31","line":1886,"range":{"start_line":1886,"start_character":17,"end_line":1886,"end_character":18},"in_reply_to":"3a1ff146_334b36cb","updated":"2017-03-17 05:57:25.000000000","message":"Done","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e656a0ec4ea55b9733ea3bbe01692d85bcdbfcd6","unresolved":false,"context_lines":[{"line_number":1899,"context_line":"            lun_type \u003d constants.SNAPSHOT_TYPE"},{"line_number":1900,"context_line":"            sp_info \u003d self.client.get_snapshot_info(lun_id)"},{"line_number":1901,"context_line":"            if not self.client.check_snapshot_exist(lun_id):"},{"line_number":1902,"context_line":"                msg \u003d (_LE(\"Snapshot %s does not exist on the array.\")"},{"line_number":1903,"context_line":"                       % volume.id)"},{"line_number":1904,"context_line":"                LOG.error(msg)"},{"line_number":1905,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_7313eeb8","line":1902,"range":{"start_line":1902,"start_character":23,"end_line":1902,"end_character":26},"updated":"2017-03-16 13:07:20.000000000","message":"_()","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"01a4cbbad63019b0f94468925c4c098c03cf2e31","unresolved":false,"context_lines":[{"line_number":1899,"context_line":"            lun_type \u003d constants.SNAPSHOT_TYPE"},{"line_number":1900,"context_line":"            sp_info \u003d self.client.get_snapshot_info(lun_id)"},{"line_number":1901,"context_line":"            if not self.client.check_snapshot_exist(lun_id):"},{"line_number":1902,"context_line":"                msg \u003d (_LE(\"Snapshot %s does not exist on the array.\")"},{"line_number":1903,"context_line":"                       % volume.id)"},{"line_number":1904,"context_line":"                LOG.error(msg)"},{"line_number":1905,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_afb6273b","line":1902,"range":{"start_line":1902,"start_character":23,"end_line":1902,"end_character":26},"in_reply_to":"3a1ff146_7313eeb8","updated":"2017-03-17 05:57:25.000000000","message":"Done","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e656a0ec4ea55b9733ea3bbe01692d85bcdbfcd6","unresolved":false,"context_lines":[{"line_number":1906,"context_line":""},{"line_number":1907,"context_line":"            if (sp_info.get(\u0027HEALTHSTATUS\u0027) !\u003d constants.STATUS_HEALTH or"},{"line_number":1908,"context_line":"                    sp_info.get(\u0027RUNNINGSTATUS\u0027) !\u003d constants.STATUS_ACTIVE):"},{"line_number":1909,"context_line":"                msg \u003d (_LE(\"Snapshot %s status is not normal \""},{"line_number":1910,"context_line":"                           \"or running status is not online.\") % lun_id)"},{"line_number":1911,"context_line":"                LOG.error(msg)"},{"line_number":1912,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_b30d6692","line":1909,"range":{"start_line":1909,"start_character":23,"end_line":1909,"end_character":26},"updated":"2017-03-16 13:07:20.000000000","message":"_()","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"01a4cbbad63019b0f94468925c4c098c03cf2e31","unresolved":false,"context_lines":[{"line_number":1906,"context_line":""},{"line_number":1907,"context_line":"            if (sp_info.get(\u0027HEALTHSTATUS\u0027) !\u003d constants.STATUS_HEALTH or"},{"line_number":1908,"context_line":"                    sp_info.get(\u0027RUNNINGSTATUS\u0027) !\u003d constants.STATUS_ACTIVE):"},{"line_number":1909,"context_line":"                msg \u003d (_LE(\"Snapshot %s status is not normal \""},{"line_number":1910,"context_line":"                           \"or running status is not online.\") % lun_id)"},{"line_number":1911,"context_line":"                LOG.error(msg)"},{"line_number":1912,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_0f7c9b71","line":1909,"range":{"start_line":1909,"start_character":23,"end_line":1909,"end_character":26},"in_reply_to":"3a1ff146_b30d6692","updated":"2017-03-17 05:57:25.000000000","message":"Done","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e656a0ec4ea55b9733ea3bbe01692d85bcdbfcd6","unresolved":false,"context_lines":[{"line_number":2032,"context_line":"                iscsi_info[\u0027data\u0027][\u0027target_portals\u0027] \u003d target_portal"},{"line_number":2033,"context_line":"                iscsi_info[\u0027data\u0027][\u0027target_luns\u0027] \u003d [same_host_id]"},{"line_number":2034,"context_line":"            else:"},{"line_number":2035,"context_line":"                msg \u003d (_(\"Hypermetro must use multipath or ultrapath.\"))"},{"line_number":2036,"context_line":"                LOG.error(msg)"},{"line_number":2037,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2038,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_b38486d4","line":2035,"range":{"start_line":2035,"start_character":21,"end_line":2035,"end_character":23},"updated":"2017-03-16 13:07:20.000000000","message":"nit: Outer () not needed.","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"01a4cbbad63019b0f94468925c4c098c03cf2e31","unresolved":false,"context_lines":[{"line_number":2032,"context_line":"                iscsi_info[\u0027data\u0027][\u0027target_portals\u0027] \u003d target_portal"},{"line_number":2033,"context_line":"                iscsi_info[\u0027data\u0027][\u0027target_luns\u0027] \u003d [same_host_id]"},{"line_number":2034,"context_line":"            else:"},{"line_number":2035,"context_line":"                msg \u003d (_(\"Hypermetro must use multipath or ultrapath.\"))"},{"line_number":2036,"context_line":"                LOG.error(msg)"},{"line_number":2037,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":2038,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_2f81574b","line":2035,"range":{"start_line":2035,"start_character":21,"end_line":2035,"end_character":23},"in_reply_to":"3a1ff146_b38486d4","updated":"2017-03-17 05:57:25.000000000","message":"Done","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e656a0ec4ea55b9733ea3bbe01692d85bcdbfcd6","unresolved":false,"context_lines":[{"line_number":2364,"context_line":"                       client.is_host_associated_to_hostgroup(host_id)):"},{"line_number":2365,"context_line":"                        client.remove_host(host_id)"},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"                    msg \u003d ((\"Can\u0027t add FC initiator %(wwn)s to host %(host)s,\""},{"line_number":2368,"context_line":"                            \" please check if this initiator has been added \""},{"line_number":2369,"context_line":"                            \"to other host or isn\u0027t present on array.\")"},{"line_number":2370,"context_line":"                           % {\"wwn\": wwn, \"host\": host_id})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_d3d582b9","line":2367,"range":{"start_line":2367,"start_character":27,"end_line":2367,"end_character":28},"updated":"2017-03-16 13:07:20.000000000","message":"_()","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"01a4cbbad63019b0f94468925c4c098c03cf2e31","unresolved":false,"context_lines":[{"line_number":2364,"context_line":"                       client.is_host_associated_to_hostgroup(host_id)):"},{"line_number":2365,"context_line":"                        client.remove_host(host_id)"},{"line_number":2366,"context_line":""},{"line_number":2367,"context_line":"                    msg \u003d ((\"Can\u0027t add FC initiator %(wwn)s to host %(host)s,\""},{"line_number":2368,"context_line":"                            \" please check if this initiator has been added \""},{"line_number":2369,"context_line":"                            \"to other host or isn\u0027t present on array.\")"},{"line_number":2370,"context_line":"                           % {\"wwn\": wwn, \"host\": host_id})"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_6f934fa4","line":2367,"range":{"start_line":2367,"start_character":27,"end_line":2367,"end_character":28},"in_reply_to":"3a1ff146_d3d582b9","updated":"2017-03-17 05:57:25.000000000","message":"Done","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"111f8afb398077882dcae3015a5b762cded78381","unresolved":false,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":"        return model_update"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def _check_volume_exist_on_array(self, volume, action, local\u003dTrue):"},{"line_number":805,"context_line":"        \"\"\"Check whether the volume exists on the array."},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"        If the volume exists on the array, return the LUN ID."}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_8a865811","line":804,"range":{"start_line":804,"start_character":50,"end_line":804,"end_character":57},"updated":"2017-03-21 01:45:31.000000000","message":"nit: we can add default value fot this \u0027action\u0027 parameter","commit_id":"06aca33b7448c9ad86f0cb658b6c87ab8e3be21b"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"b6f79eed5e29697e8932ae5fb8435914cd92c7f8","unresolved":false,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":"        return model_update"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def _check_volume_exist_on_array(self, volume, action, local\u003dTrue):"},{"line_number":805,"context_line":"        \"\"\"Check whether the volume exists on the array."},{"line_number":806,"context_line":""},{"line_number":807,"context_line":"        If the volume exists on the array, return the LUN ID."}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_5d0c773a","line":804,"range":{"start_line":804,"start_character":50,"end_line":804,"end_character":57},"in_reply_to":"1a1ced50_8a865811","updated":"2017-03-25 07:49:06.000000000","message":"Maybe this should be specified by function call.","commit_id":"06aca33b7448c9ad86f0cb658b6c87ab8e3be21b"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"111f8afb398077882dcae3015a5b762cded78381","unresolved":false,"context_lines":[{"line_number":1923,"context_line":"        rmt_aval_luns \u003d json.loads(rmt_aval_luns)"},{"line_number":1924,"context_line":"        same_host_id \u003d None"},{"line_number":1925,"context_line":""},{"line_number":1926,"context_line":"        for i in range(1, 512):"},{"line_number":1927,"context_line":"            if i in rmt_aval_luns and i in loc_aval_luns:"},{"line_number":1928,"context_line":"                same_host_id \u003d i"},{"line_number":1929,"context_line":"                break"},{"line_number":1930,"context_line":""},{"line_number":1931,"context_line":"        LOG.info(\"The same hostid is: %s.\", same_host_id)"},{"line_number":1932,"context_line":"        if not same_host_id:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_8a165853","line":1929,"range":{"start_line":1926,"start_character":7,"end_line":1929,"end_character":21},"updated":"2017-03-21 01:45:31.000000000","message":"nit: use \u0027set()\u0027 and \u0027\u0026\u0027 operator could be another choice ?. something like that:\n\nintersection \u003d list(set(a) \u0026 set(b))\nsame_host_id \u003d intersection[0] if (len(interection) \u003e\u003d 1 and 1 \u003c\u003d intersection[0] \u003c 512) else None","commit_id":"06aca33b7448c9ad86f0cb658b6c87ab8e3be21b"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"b6f79eed5e29697e8932ae5fb8435914cd92c7f8","unresolved":false,"context_lines":[{"line_number":1923,"context_line":"        rmt_aval_luns \u003d json.loads(rmt_aval_luns)"},{"line_number":1924,"context_line":"        same_host_id \u003d None"},{"line_number":1925,"context_line":""},{"line_number":1926,"context_line":"        for i in range(1, 512):"},{"line_number":1927,"context_line":"            if i in rmt_aval_luns and i in loc_aval_luns:"},{"line_number":1928,"context_line":"                same_host_id \u003d i"},{"line_number":1929,"context_line":"                break"},{"line_number":1930,"context_line":""},{"line_number":1931,"context_line":"        LOG.info(\"The same hostid is: %s.\", same_host_id)"},{"line_number":1932,"context_line":"        if not same_host_id:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_7df3bb0b","line":1929,"range":{"start_line":1926,"start_character":7,"end_line":1929,"end_character":21},"in_reply_to":"1a1ced50_8a165853","updated":"2017-03-25 07:49:06.000000000","message":"Done","commit_id":"06aca33b7448c9ad86f0cb658b6c87ab8e3be21b"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"111f8afb398077882dcae3015a5b762cded78381","unresolved":false,"context_lines":[{"line_number":2009,"context_line":""},{"line_number":2010,"context_line":"            multipath \u003d connector.get(\u0027multipath\u0027, False)"},{"line_number":2011,"context_line":"            if multipath:"},{"line_number":2012,"context_line":"                target_iqn \u003d []"},{"line_number":2013,"context_line":"                target_iqn.extend(iscsi_info[\u0027data\u0027][\u0027target_iqns\u0027])"},{"line_number":2014,"context_line":"                target_iqn.extend(rmt_iscsi_info[\u0027data\u0027][\u0027target_iqns\u0027])"},{"line_number":2015,"context_line":"                iscsi_info[\u0027data\u0027][\u0027target_iqns\u0027] \u003d target_iqn"},{"line_number":2016,"context_line":""},{"line_number":2017,"context_line":"                target_portal \u003d []"},{"line_number":2018,"context_line":"                target_portal.extend(iscsi_info[\u0027data\u0027][\u0027target_portals\u0027])"},{"line_number":2019,"context_line":"                target_portal.extend(rmt_iscsi_info[\u0027data\u0027][\u0027target_portals\u0027])"},{"line_number":2020,"context_line":"                iscsi_info[\u0027data\u0027][\u0027target_portals\u0027] \u003d target_portal"},{"line_number":2021,"context_line":"                iscsi_info[\u0027data\u0027][\u0027target_luns\u0027] \u003d [same_host_id]"},{"line_number":2022,"context_line":"            elif self.use_ultrapath:"},{"line_number":2023,"context_line":"                target_iqn \u003d []"},{"line_number":2024,"context_line":"                target_iqn.extend(iscsi_info[\u0027data\u0027][\u0027target_iqns\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_ed3526da","line":2021,"range":{"start_line":2012,"start_character":15,"end_line":2021,"end_character":66},"updated":"2017-03-21 01:45:31.000000000","message":"This is not related to if/elif condition? the code looks identical.","commit_id":"06aca33b7448c9ad86f0cb658b6c87ab8e3be21b"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"b6f79eed5e29697e8932ae5fb8435914cd92c7f8","unresolved":false,"context_lines":[{"line_number":2009,"context_line":""},{"line_number":2010,"context_line":"            multipath \u003d connector.get(\u0027multipath\u0027, False)"},{"line_number":2011,"context_line":"            if multipath:"},{"line_number":2012,"context_line":"                target_iqn \u003d []"},{"line_number":2013,"context_line":"                target_iqn.extend(iscsi_info[\u0027data\u0027][\u0027target_iqns\u0027])"},{"line_number":2014,"context_line":"                target_iqn.extend(rmt_iscsi_info[\u0027data\u0027][\u0027target_iqns\u0027])"},{"line_number":2015,"context_line":"                iscsi_info[\u0027data\u0027][\u0027target_iqns\u0027] \u003d target_iqn"},{"line_number":2016,"context_line":""},{"line_number":2017,"context_line":"                target_portal \u003d []"},{"line_number":2018,"context_line":"                target_portal.extend(iscsi_info[\u0027data\u0027][\u0027target_portals\u0027])"},{"line_number":2019,"context_line":"                target_portal.extend(rmt_iscsi_info[\u0027data\u0027][\u0027target_portals\u0027])"},{"line_number":2020,"context_line":"                iscsi_info[\u0027data\u0027][\u0027target_portals\u0027] \u003d target_portal"},{"line_number":2021,"context_line":"                iscsi_info[\u0027data\u0027][\u0027target_luns\u0027] \u003d [same_host_id]"},{"line_number":2022,"context_line":"            elif self.use_ultrapath:"},{"line_number":2023,"context_line":"                target_iqn \u003d []"},{"line_number":2024,"context_line":"                target_iqn.extend(iscsi_info[\u0027data\u0027][\u0027target_iqns\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_5d44771b","line":2021,"range":{"start_line":2012,"start_character":15,"end_line":2021,"end_character":66},"in_reply_to":"1a1ced50_ed3526da","updated":"2017-03-25 07:49:06.000000000","message":"Done","commit_id":"06aca33b7448c9ad86f0cb658b6c87ab8e3be21b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"20b728fcb6ef898edd3479d4d6007b380470dcd5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                      \u0027key1:value1,key2:value2...\u0027),"},{"line_number":62,"context_line":"    cfg.BoolOpt(\u0027libvirt_iscsi_use_ultrapath\u0027,"},{"line_number":63,"context_line":"                default\u003dFalse,"},{"line_number":64,"context_line":"                help\u003d\u0027use ultrapath connection of the iSCSI volume\u0027),"},{"line_number":65,"context_line":"]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_fd00c469","line":64,"range":{"start_line":64,"start_character":22,"end_line":64,"end_character":23},"updated":"2017-03-27 12:25:34.000000000","message":"If you do another update, please capitalize the first character.","commit_id":"509a018367da8e6f2a5aab4ddc03b33c9808377b"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"a3ad663d7eea2fa618d88092fcc52dbbdfba7310","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                      \u0027key1:value1,key2:value2...\u0027),"},{"line_number":62,"context_line":"    cfg.BoolOpt(\u0027libvirt_iscsi_use_ultrapath\u0027,"},{"line_number":63,"context_line":"                default\u003dFalse,"},{"line_number":64,"context_line":"                help\u003d\u0027use ultrapath connection of the iSCSI volume\u0027),"},{"line_number":65,"context_line":"]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_a0468f20","line":64,"range":{"start_line":64,"start_character":22,"end_line":64,"end_character":23},"in_reply_to":"ffe62b97_fd00c469","updated":"2017-03-27 12:35:17.000000000","message":"Done","commit_id":"509a018367da8e6f2a5aab4ddc03b33c9808377b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"9d8a2e7e1225f5261c7cf394155c1507d9f253c7","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def check_func_support(self, obj_name):"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            self.client._get_object_count(obj_name)"},{"line_number":101,"context_line":"            return True"},{"line_number":102,"context_line":"        except Exception:"},{"line_number":103,"context_line":"            return False"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_40ea230f","line":101,"updated":"2017-03-27 12:32:06.000000000","message":"It could be useful to add debug logs if func  is not supported","commit_id":"509a018367da8e6f2a5aab4ddc03b33c9808377b"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"1020bb00c7ee4895fc5ac68dd5c2bd692415abdc","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def check_func_support(self, obj_name):"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            self.client._get_object_count(obj_name)"},{"line_number":101,"context_line":"            return True"},{"line_number":102,"context_line":"        except Exception:"},{"line_number":103,"context_line":"            return False"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_200a7f89","line":101,"in_reply_to":"ffe62b97_40ea230f","updated":"2017-03-27 12:39:27.000000000","message":"Thanks Ivan. We didn\u0027t add debug log here because update_support_capability will call the func every one minute. So there will be a lot of debug logs and it maybe not very useful.","commit_id":"509a018367da8e6f2a5aab4ddc03b33c9808377b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"20b728fcb6ef898edd3479d4d6007b380470dcd5","unresolved":false,"context_lines":[{"line_number":2082,"context_line":"        chapinfo \u003d client.find_chap_info(client.iscsi_info, initiator_name)"},{"line_number":2083,"context_line":"        if (not chapinfo"},{"line_number":2084,"context_line":"                and client.is_initiator_used_chap(initiator_name)):"},{"line_number":2085,"context_line":"            msg \u003d (_(\"Chap is not configed but initiator %s used chap on \""},{"line_number":2086,"context_line":"                     \"array, please check and remove chap for this initiator.\")"},{"line_number":2087,"context_line":"                   % initiator_name)"},{"line_number":2088,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_fd8324cb","line":2085,"range":{"start_line":2085,"start_character":34,"end_line":2085,"end_character":42},"updated":"2017-03-27 12:25:34.000000000","message":"configured","commit_id":"509a018367da8e6f2a5aab4ddc03b33c9808377b"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"a3ad663d7eea2fa618d88092fcc52dbbdfba7310","unresolved":false,"context_lines":[{"line_number":2082,"context_line":"        chapinfo \u003d client.find_chap_info(client.iscsi_info, initiator_name)"},{"line_number":2083,"context_line":"        if (not chapinfo"},{"line_number":2084,"context_line":"                and client.is_initiator_used_chap(initiator_name)):"},{"line_number":2085,"context_line":"            msg \u003d (_(\"Chap is not configed but initiator %s used chap on \""},{"line_number":2086,"context_line":"                     \"array, please check and remove chap for this initiator.\")"},{"line_number":2087,"context_line":"                   % initiator_name)"},{"line_number":2088,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_406103a9","line":2085,"range":{"start_line":2085,"start_character":34,"end_line":2085,"end_character":42},"in_reply_to":"ffe62b97_fd8324cb","updated":"2017-03-27 12:35:17.000000000","message":"Done","commit_id":"509a018367da8e6f2a5aab4ddc03b33c9808377b"}],"cinder/volume/drivers/huawei/hypermetro.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"e656a0ec4ea55b9733ea3bbe01692d85bcdbfcd6","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                        self.client.remove_metro_from_metrogroup(metrogroup_id,"},{"line_number":139,"context_line":"                                                                 metro_id)"},{"line_number":140,"context_line":"                else:"},{"line_number":141,"context_line":"                    err \u003d (_(\"Hypermetro pair %(id)s doesn\u0027t exist on array.\")"},{"line_number":142,"context_line":"                           % {\u0027id\u0027: metro_id})"},{"line_number":143,"context_line":"                    LOG.warning(err)"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a1ff146_73320e12","line":141,"range":{"start_line":141,"start_character":27,"end_line":141,"end_character":28},"updated":"2017-03-16 13:07:20.000000000","message":"Change to _LW(), change \"%\" to \",\", and move this right into the LOG.warning call rather than formatting into a variable to pass in.","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"01a4cbbad63019b0f94468925c4c098c03cf2e31","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                        self.client.remove_metro_from_metrogroup(metrogroup_id,"},{"line_number":139,"context_line":"                                                                 metro_id)"},{"line_number":140,"context_line":"                else:"},{"line_number":141,"context_line":"                    err \u003d (_(\"Hypermetro pair %(id)s doesn\u0027t exist on array.\")"},{"line_number":142,"context_line":"                           % {\u0027id\u0027: metro_id})"},{"line_number":143,"context_line":"                    LOG.warning(err)"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_af48e75c","line":141,"range":{"start_line":141,"start_character":27,"end_line":141,"end_character":28},"in_reply_to":"3a1ff146_73320e12","updated":"2017-03-17 05:57:25.000000000","message":"Done","commit_id":"4fe2d6f96eba31a7a73633d4796f58eb6eb1f73a"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"111f8afb398077882dcae3015a5b762cded78381","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            # Get hypermetro domain."},{"line_number":56,"context_line":"            try:"},{"line_number":57,"context_line":"                self._wait_volume_ready(local_lun_id, True)"},{"line_number":58,"context_line":"                self._wait_volume_ready(remote_lun_id, False)"},{"line_number":59,"context_line":"                hypermetro \u003d self._create_hypermetro_pair(domain_id,"},{"line_number":60,"context_line":"                                                          local_lun_id,"},{"line_number":61,"context_line":"                                                          remote_lun_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a1ced50_2d83be57","line":58,"range":{"start_line":58,"start_character":40,"end_line":58,"end_character":53},"updated":"2017-03-21 01:45:31.000000000","message":"nit:\nself._wait_volume_ready(local_lun_id)\nself._wait_volume_ready(remote_lun_id, local\u003dFalse)","commit_id":"06aca33b7448c9ad86f0cb658b6c87ab8e3be21b"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"b6f79eed5e29697e8932ae5fb8435914cd92c7f8","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            # Get hypermetro domain."},{"line_number":56,"context_line":"            try:"},{"line_number":57,"context_line":"                self._wait_volume_ready(local_lun_id, True)"},{"line_number":58,"context_line":"                self._wait_volume_ready(remote_lun_id, False)"},{"line_number":59,"context_line":"                hypermetro \u003d self._create_hypermetro_pair(domain_id,"},{"line_number":60,"context_line":"                                                          local_lun_id,"},{"line_number":61,"context_line":"                                                          remote_lun_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ffe62b97_1a095530","line":58,"range":{"start_line":58,"start_character":40,"end_line":58,"end_character":53},"in_reply_to":"1a1ced50_2d83be57","updated":"2017-03-25 07:49:06.000000000","message":"Done","commit_id":"06aca33b7448c9ad86f0cb658b6c87ab8e3be21b"}]}
