)]}'
{"cinder/tests/test_ibm_flashsystem.py":[{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"750fb2c492e3a6de274010c832b5ceeaead3d1ea","unresolved":false,"context_lines":[{"line_number":924,"context_line":"        self._set_flag(\u0027flashsystem_connection_protocol\u0027, \u0027iSCSI\u0027)"},{"line_number":925,"context_line":"        self.driver.do_setup(None)"},{"line_number":926,"context_line":"        self.driver.initialize_connection(vol1, self.connector)"},{"line_number":927,"context_line":"        self.driver.terminate_connection(vol1, self.connector)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        # clear environment"},{"line_number":930,"context_line":"        self.driver.delete_volume(vol1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_8f987ec1","line":927,"updated":"2015-01-26 03:13:24.000000000","message":"Is case 4 really testing something? Does anything  need to be verified?","commit_id":"1571cf97a46f699aa76c41cef6487b068885a171"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"5b3be7c999a0627fc43caedba7c5fec28114c717","unresolved":false,"context_lines":[{"line_number":924,"context_line":"        self._set_flag(\u0027flashsystem_connection_protocol\u0027, \u0027iSCSI\u0027)"},{"line_number":925,"context_line":"        self.driver.do_setup(None)"},{"line_number":926,"context_line":"        self.driver.initialize_connection(vol1, self.connector)"},{"line_number":927,"context_line":"        self.driver.terminate_connection(vol1, self.connector)"},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"        # clear environment"},{"line_number":930,"context_line":"        self.driver.delete_volume(vol1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_ce15ec9c","line":927,"in_reply_to":"1a930d6b_8f987ec1","updated":"2015-01-27 11:54:47.000000000","message":"This test_flashsystem_connection function is only to verify initialize and terminate connection. Other function will be verified in other functions. Thanks!","commit_id":"1571cf97a46f699aa76c41cef6487b068885a171"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"750fb2c492e3a6de274010c832b5ceeaead3d1ea","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"            \u0027wwnns\u0027: [\u00270123456789abcdef\u0027, \u00270123456789abcdeg\u0027],"},{"line_number":1180,"context_line":"            \u0027wwpns\u0027: [\u0027abcd000000000001\u0027, \u0027abcd000000000002\u0027],"},{"line_number":1181,"context_line":"            \u0027initiator\u0027: \u0027iqn.123456\u0027}"},{"line_number":1182,"context_line":"        host \u003d self.driver._create_host(conn)"},{"line_number":1183,"context_line":""},{"line_number":1184,"context_line":"        # clear environment"},{"line_number":1185,"context_line":"        self.driver._delete_host(host)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_2ff14a02","line":1182,"updated":"2015-01-26 03:13:24.000000000","message":"The same to the previous comment.\nIt simply calls _create_host, any results? Any method is supposed to be called with certain parameters? Are there any exceptions?","commit_id":"1571cf97a46f699aa76c41cef6487b068885a171"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"5b3be7c999a0627fc43caedba7c5fec28114c717","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"            \u0027wwnns\u0027: [\u00270123456789abcdef\u0027, \u00270123456789abcdeg\u0027],"},{"line_number":1180,"context_line":"            \u0027wwpns\u0027: [\u0027abcd000000000001\u0027, \u0027abcd000000000002\u0027],"},{"line_number":1181,"context_line":"            \u0027initiator\u0027: \u0027iqn.123456\u0027}"},{"line_number":1182,"context_line":"        host \u003d self.driver._create_host(conn)"},{"line_number":1183,"context_line":""},{"line_number":1184,"context_line":"        # clear environment"},{"line_number":1185,"context_line":"        self.driver._delete_host(host)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_317fb167","line":1182,"in_reply_to":"1a930d6b_2ff14a02","updated":"2015-01-27 11:54:47.000000000","message":"This test_flashsystem_create_host function is only to verify create_host. Other function will be verified in other functions. Thanks!","commit_id":"1571cf97a46f699aa76c41cef6487b068885a171"}],"cinder/volume/drivers/ibm/flashsystem.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d649f32a879fededabb102f7b3d05a69c65d7a08","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                default\u003dTrue,"},{"line_number":64,"context_line":"                help\u003d\u0027Allows vdisk to multi host mapping.\u0027),"},{"line_number":65,"context_line":"    cfg.StrOpt(\u0027flashsystem_iscsi_ip\u0027,"},{"line_number":66,"context_line":"               default\u003d\u0027192.168.1.10\u0027,"},{"line_number":67,"context_line":"               help\u003d\u0027Default iSCSI IPv4 of FlashSystem.\u0027),"},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027flashsystem_iscsi_portid\u0027,"},{"line_number":69,"context_line":"               default\u003d0,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_a2707fa5","line":66,"updated":"2015-01-09 21:40:04.000000000","message":"There is no way of knowing what the default iSCSI IP address really might be.  Right?  I think this is better set to \u0027None\u0027 and then catch that somewhere to produce a sensible error.\n\nAlso, why are we adding an option for this instead of using the existing iscsi_ip_address option that is already in /etc/cinder/cinder.conf ?","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":13846,"name":"Xiaolei Hu","email":"xlhu@cn.ibm.com","username":"xiaolei"},"change_message_id":"b5debfcc982ad81a1c96131862302241ad0f852c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                default\u003dTrue,"},{"line_number":64,"context_line":"                help\u003d\u0027Allows vdisk to multi host mapping.\u0027),"},{"line_number":65,"context_line":"    cfg.StrOpt(\u0027flashsystem_iscsi_ip\u0027,"},{"line_number":66,"context_line":"               default\u003d\u0027192.168.1.10\u0027,"},{"line_number":67,"context_line":"               help\u003d\u0027Default iSCSI IPv4 of FlashSystem.\u0027),"},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027flashsystem_iscsi_portid\u0027,"},{"line_number":69,"context_line":"               default\u003d0,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_56758f95","line":66,"in_reply_to":"3a961159_a2707fa5","updated":"2015-01-13 15:40:29.000000000","message":"Done. There are some difference, to avoid potential conflicts, we use flashsystem_iscsi_ip.","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d649f32a879fededabb102f7b3d05a69c65d7a08","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    \"\"\"IBM FlashSystem 840 iSCSI/FC volume driver."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    Version history:"},{"line_number":81,"context_line":"    1.0.0 - Initial driver"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    \"\"\""},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_6284d75d","line":81,"updated":"2015-01-09 21:40:04.000000000","message":"We should incremented the driver version here to 1.1.0 I would say.","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":13846,"name":"Xiaolei Hu","email":"xlhu@cn.ibm.com","username":"xiaolei"},"change_message_id":"b5debfcc982ad81a1c96131862302241ad0f852c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    \"\"\"IBM FlashSystem 840 iSCSI/FC volume driver."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    Version history:"},{"line_number":81,"context_line":"    1.0.0 - Initial driver"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    \"\"\""},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_9642970d","line":81,"in_reply_to":"3a961159_6284d75d","updated":"2015-01-13 15:40:29.000000000","message":"Done","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d649f32a879fededabb102f7b3d05a69c65d7a08","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    \"\"\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    VERSION \u003d \"1.0.0\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":88,"context_line":"        super(FlashSystemDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_a27ebf68","line":85,"updated":"2015-01-09 21:40:04.000000000","message":"Same comment here.","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":13846,"name":"Xiaolei Hu","email":"xlhu@cn.ibm.com","username":"xiaolei"},"change_message_id":"b5debfcc982ad81a1c96131862302241ad0f852c","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    \"\"\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    VERSION \u003d \"1.0.0\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":88,"context_line":"        super(FlashSystemDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_d6433f0f","line":85,"in_reply_to":"3a961159_a27ebf68","updated":"2015-01-13 15:40:29.000000000","message":"Done","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d649f32a879fededabb102f7b3d05a69c65d7a08","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        protocol \u003d self.configuration.flashsystem_connection_protocol"},{"line_number":130,"context_line":"        multipath \u003d self.configuration.flashsystem_multipath_enabled"},{"line_number":131,"context_line":"        iscsi_ip \u003d self.configuration.flashsystem_iscsi_ip"},{"line_number":132,"context_line":"        iscsi_portid \u003d self.configuration.flashsystem_iscsi_portid"},{"line_number":133,"context_line":"        if protocol.lower() \u003d\u003d \u0027fc\u0027:"},{"line_number":134,"context_line":"            protocol \u003d \u0027FC\u0027"},{"line_number":135,"context_line":"        elif protocol.lower() \u003d\u003d \u0027iscsi\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_c2d90b86","line":132,"updated":"2015-01-09 21:40:04.000000000","message":"Seems like we should be doing some validation of these values here to go alone with my comment on the config options above.","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":13846,"name":"Xiaolei Hu","email":"xlhu@cn.ibm.com","username":"xiaolei"},"change_message_id":"b5debfcc982ad81a1c96131862302241ad0f852c","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        protocol \u003d self.configuration.flashsystem_connection_protocol"},{"line_number":130,"context_line":"        multipath \u003d self.configuration.flashsystem_multipath_enabled"},{"line_number":131,"context_line":"        iscsi_ip \u003d self.configuration.flashsystem_iscsi_ip"},{"line_number":132,"context_line":"        iscsi_portid \u003d self.configuration.flashsystem_iscsi_portid"},{"line_number":133,"context_line":"        if protocol.lower() \u003d\u003d \u0027fc\u0027:"},{"line_number":134,"context_line":"            protocol \u003d \u0027FC\u0027"},{"line_number":135,"context_line":"        elif protocol.lower() \u003d\u003d \u0027iscsi\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_164ea738","line":132,"in_reply_to":"3a961159_c2d90b86","updated":"2015-01-13 15:40:29.000000000","message":"Done. Add check in _check_vdisk_params.","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d649f32a879fededabb102f7b3d05a69c65d7a08","unresolved":false,"context_lines":[{"line_number":688,"context_line":"            if \"zvm_fcp\" in connector:"},{"line_number":689,"context_line":"                properties[\u0027zvm_fcp\u0027] \u003d connector[\u0027zvm_fcp\u0027]"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"            properties[\u0027initiator_target_map\u0027] \u003d\\"},{"line_number":692,"context_line":"                self._build_initiator_target_map(connector[\u0027wwpns\u0027],"},{"line_number":693,"context_line":"                                                 conn_wwpns)"},{"line_number":694,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_a2ccffbc","line":691,"updated":"2015-01-09 21:40:04.000000000","message":"Please don\u0027t use \u0027\\\u0027 for line continuation.","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":13846,"name":"Xiaolei Hu","email":"xlhu@cn.ibm.com","username":"xiaolei"},"change_message_id":"b5debfcc982ad81a1c96131862302241ad0f852c","unresolved":false,"context_lines":[{"line_number":688,"context_line":"            if \"zvm_fcp\" in connector:"},{"line_number":689,"context_line":"                properties[\u0027zvm_fcp\u0027] \u003d connector[\u0027zvm_fcp\u0027]"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"            properties[\u0027initiator_target_map\u0027] \u003d\\"},{"line_number":692,"context_line":"                self._build_initiator_target_map(connector[\u0027wwpns\u0027],"},{"line_number":693,"context_line":"                                                 conn_wwpns)"},{"line_number":694,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_d6dfbf36","line":691,"in_reply_to":"3a961159_a2ccffbc","updated":"2015-01-13 15:40:29.000000000","message":"Done","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"d649f32a879fededabb102f7b3d05a69c65d7a08","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"        # Make sure we have only one protocol"},{"line_number":1176,"context_line":"        self._driver_assert("},{"line_number":1177,"context_line":"            (len(enabled_protocols) \u003d\u003d 1),"},{"line_number":1178,"context_line":"            (_(\u0027do_setup: Enabled protocols should only be one\u0027)))"},{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":"        self._protocol \u003d node[\u0027protocol\u0027] \u003d list(enabled_protocols)[0]"},{"line_number":1181,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_025233de","line":1178,"updated":"2015-01-09 21:40:04.000000000","message":"Add \u0027.\u0027 here please.","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":13846,"name":"Xiaolei Hu","email":"xlhu@cn.ibm.com","username":"xiaolei"},"change_message_id":"b5debfcc982ad81a1c96131862302241ad0f852c","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"        # Make sure we have only one protocol"},{"line_number":1176,"context_line":"        self._driver_assert("},{"line_number":1177,"context_line":"            (len(enabled_protocols) \u003d\u003d 1),"},{"line_number":1178,"context_line":"            (_(\u0027do_setup: Enabled protocols should only be one\u0027)))"},{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":"        self._protocol \u003d node[\u0027protocol\u0027] \u003d list(enabled_protocols)[0]"},{"line_number":1181,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_96b537ef","line":1178,"in_reply_to":"3a961159_025233de","updated":"2015-01-13 15:40:29.000000000","message":"Done","commit_id":"f3dca11156d44f9e559c7d3df369034fffae37af"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"99b6e05fffcbef5d5db37b3393767c6c2dd114e9","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        if protocol.lower() \u003d\u003d \u0027fc\u0027:"},{"line_number":135,"context_line":"            protocol \u003d \u0027FC\u0027"},{"line_number":136,"context_line":"        elif protocol.lower() \u003d\u003d \u0027iscsi\u0027:"},{"line_number":137,"context_line":"            protocol \u003d \u0027iSCSI\u0027"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        return {\u0027protocol\u0027: protocol, \u0027multipath\u0027: multipath,"},{"line_number":140,"context_line":"                \u0027iscsi_ip\u0027: iscsi_ip, \u0027iscsi_portid\u0027: iscsi_portid}"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_03c0c77a","line":137,"updated":"2015-01-15 20:31:20.000000000","message":"Is\nelse:\n    raise exception.InvalidInput\nneeded here?","commit_id":"d4c723ef13ffdcdddbfad39d592c758fbed6ae8b"},{"author":{"_account_id":13846,"name":"Xiaolei Hu","email":"xlhu@cn.ibm.com","username":"xiaolei"},"change_message_id":"fe501e92ac271ecc47c61a8ec07f1b87edddaac8","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        if protocol.lower() \u003d\u003d \u0027fc\u0027:"},{"line_number":135,"context_line":"            protocol \u003d \u0027FC\u0027"},{"line_number":136,"context_line":"        elif protocol.lower() \u003d\u003d \u0027iscsi\u0027:"},{"line_number":137,"context_line":"            protocol \u003d \u0027iSCSI\u0027"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        return {\u0027protocol\u0027: protocol, \u0027multipath\u0027: multipath,"},{"line_number":140,"context_line":"                \u0027iscsi_ip\u0027: iscsi_ip, \u0027iscsi_portid\u0027: iscsi_portid}"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_a7a6d10d","line":137,"in_reply_to":"3a961159_03c0c77a","updated":"2015-01-19 15:48:22.000000000","message":"Thanks for your comments. Here it just wants to translate format to \u0027FC\u0027 and \u0027iSCSI\u0027. The protocol check will be completed in func _check_vdisk_params. However, it may be more clear if add \"else\" here.","commit_id":"d4c723ef13ffdcdddbfad39d592c758fbed6ae8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"99b6e05fffcbef5d5db37b3393767c6c2dd114e9","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        if params[\u0027protocol\u0027] \u003d\u003d \u0027iSCSI\u0027 and params[\u0027iscsi_ip\u0027] \u003d\u003d \u0027None\u0027:"},{"line_number":163,"context_line":"            msg \u003d (_(\"Illegal value \u0027%(iscsi_ip)s\u0027 specified for \""},{"line_number":164,"context_line":"                     \"flashsystem_iscsi_ip.\")"},{"line_number":165,"context_line":"                   % {\u0027iscsi_ip\u0027: params[\u0027iscsi_ip\u0027]})"},{"line_number":166,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _connector_to_hostname_prefix(self, connector):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_e349fb32","line":165,"updated":"2015-01-15 20:31:20.000000000","message":"According to a logging guidelines, please, replace\n% \u003d\u003e ,","commit_id":"d4c723ef13ffdcdddbfad39d592c758fbed6ae8b"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"3c21aa3e2fc8eb03ef4e2e0da810c0ae48558632","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            return self._run_ssh(ssh_cmd, check_exit_code)"},{"line_number":100,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":101,"context_line":"            msg \u003d (_(\u0027CLI Exception output:\\n command: %(cmd)s\\n \u0027"},{"line_number":102,"context_line":"                     \u0027stdout: %(out)s\\n stderr: %(err)s\u0027),"},{"line_number":103,"context_line":"                   {\u0027cmd\u0027: ssh_cmd, \u0027out\u0027: e.stdout,"},{"line_number":104,"context_line":"                    \u0027err\u0027: e.stderr})"},{"line_number":105,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_1d4e11c2","line":102,"updated":"2015-01-21 09:12:59.000000000","message":"This shouldn\u0027t be changed from \u0027%\u0027 to \u0027,\u0027 because even if the message isn\u0027t going to be logged it will still be raised as part of an exception.\n\nThe \u0027,\u0027 is used to delay the interpolation and so if the exception wasn\u0027t going to be raised with the message, it would be correct as long as you also unpacked the arguments:\n\nLOG.error(*msg)","commit_id":"a2336573dfecd1413adc5d59cfff1751c2f66142"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"3c21aa3e2fc8eb03ef4e2e0da810c0ae48558632","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        for key in self._storage_nodes:"},{"line_number":584,"context_line":"            if self._storage_nodes[key][\u0027config_node\u0027] \u003d\u003d \u0027yes\u0027:"},{"line_number":585,"context_line":"                node \u003d self._storage_nodes[key]"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        for port_data in generator:"},{"line_number":588,"context_line":"            try:"},{"line_number":589,"context_line":"                port_ipv4 \u003d port_data[\u0027IP_address\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_1dfc513e","line":586,"updated":"2015-01-21 09:12:59.000000000","message":"I assume that there will only ever be on match of \u0027yes\u0027? You could have \u0027break\u0027 after the node assignment to escape the for loop and prevent any further iterating.","commit_id":"a2336573dfecd1413adc5d59cfff1751c2f66142"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"3c21aa3e2fc8eb03ef4e2e0da810c0ae48558632","unresolved":false,"context_lines":[{"line_number":597,"context_line":"                        six.text_type("},{"line_number":598,"context_line":"                            self.configuration.flashsystem_iscsi_portid))):"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"                if state \u003d\u003d \u0027configured\u0027 or state \u003d\u003d \u0027online\u0027 and ("},{"line_number":601,"context_line":"                        speed !\u003d \u0027NONE\u0027):"},{"line_number":602,"context_line":"                    if len(port_ipv4):"},{"line_number":603,"context_line":"                        node[\u0027ipv4\u0027].append(port_ipv4)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_bdedfd8d","line":600,"updated":"2015-01-21 09:12:59.000000000","message":"It might look cleaner to write:\n\nif state in (\u0027configured\u0027, \u0027online\u0027) and speed !\u003d \u0027NONE\u0027:","commit_id":"a2336573dfecd1413adc5d59cfff1751c2f66142"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"3c21aa3e2fc8eb03ef4e2e0da810c0ae48558632","unresolved":false,"context_lines":[{"line_number":599,"context_line":""},{"line_number":600,"context_line":"                if state \u003d\u003d \u0027configured\u0027 or state \u003d\u003d \u0027online\u0027 and ("},{"line_number":601,"context_line":"                        speed !\u003d \u0027NONE\u0027):"},{"line_number":602,"context_line":"                    if len(port_ipv4):"},{"line_number":603,"context_line":"                        node[\u0027ipv4\u0027].append(port_ipv4)"},{"line_number":604,"context_line":"                    if len(port_ipv6):"},{"line_number":605,"context_line":"                        node[\u0027ipv6\u0027].append(port_ipv6)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_9de8417e","line":602,"updated":"2015-01-21 09:12:59.000000000","message":"Can you not just do:\n\nif port_ipv4:\n\nGenerally it\u0027s considered more pythonic, unless there\u0027s some specific reason why it doesn\u0027t work for you here. It looks like you\u0027ve done this in a few places in the code, so the same comment applies to them.","commit_id":"a2336573dfecd1413adc5d59cfff1751c2f66142"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"3c21aa3e2fc8eb03ef4e2e0da810c0ae48558632","unresolved":false,"context_lines":[{"line_number":748,"context_line":"        return params"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def _handle_keyerror(self, function, header):"},{"line_number":751,"context_line":"        msg \u003d (_(\u0027Did not find expected column in %(fun)s: %(hdr)s.\u0027),"},{"line_number":752,"context_line":"               {\u0027fun\u0027: function, \u0027hdr\u0027: header})"},{"line_number":753,"context_line":"        LOG.error(msg)"},{"line_number":754,"context_line":"        raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_1de531a8","line":751,"updated":"2015-01-21 09:12:59.000000000","message":"This shouldn\u0027t be changed from \u0027%\u0027 to \u0027,\u0027 because even if the message isn\u0027t going to be logged it will still be raised as part of an exception.\n\nThe \u0027,\u0027 is used to delay the interpolation and so if the exception wasn\u0027t going to be raised with the message, it would be correct as long as you also unpacked the arguments:\n\nLOG.error(*msg)","commit_id":"a2336573dfecd1413adc5d59cfff1751c2f66142"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"3c21aa3e2fc8eb03ef4e2e0da810c0ae48558632","unresolved":false,"context_lines":[{"line_number":1185,"context_line":"            (len(enabled_protocols) \u003d\u003d 1),"},{"line_number":1186,"context_line":"            (_(\u0027do_setup: Enabled protocols should only be one.\u0027)))"},{"line_number":1187,"context_line":""},{"line_number":1188,"context_line":"        self._protocol \u003d node[\u0027protocol\u0027] \u003d list(enabled_protocols)[0]"},{"line_number":1189,"context_line":""},{"line_number":1190,"context_line":"        # Set for vdisk synchronization"},{"line_number":1191,"context_line":"        self._vdisk_copy_in_progress \u003d set()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a930d6b_5deed98c","line":1188,"updated":"2015-01-21 09:12:59.000000000","message":"Arbitrary items can be removed from a set with pop:\n\nenabled_protocols.pop()","commit_id":"a2336573dfecd1413adc5d59cfff1751c2f66142"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"7a44e088f5b05e546ae94d37c33158bba1cb03b6","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            return self._run_ssh(ssh_cmd, check_exit_code)"},{"line_number":100,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":101,"context_line":"            msg \u003d (_(\u0027CLI Exception output:\\n command: %(cmd)s\\n \u0027"},{"line_number":102,"context_line":"                     \u0027stdout: %(out)s\\n stderr: %(err)s\u0027),"},{"line_number":103,"context_line":"                   {\u0027cmd\u0027: ssh_cmd, \u0027out\u0027: e.stdout,"},{"line_number":104,"context_line":"                    \u0027err\u0027: e.stderr})"},{"line_number":105,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_d602560a","line":102,"updated":"2015-01-23 08:16:22.000000000","message":"The should not be changed. The data kwarg supplied to the exception needs to be a string which means the interpolation needs to happen on this line.","commit_id":"84849811b6f17fc2be9ba5296da0881210caff69"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"7a44e088f5b05e546ae94d37c33158bba1cb03b6","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        if params[\u0027protocol\u0027] !\u003d self._protocol:"},{"line_number":154,"context_line":"            msg \u003d (_(\"Illegal value \u0027%(prot)s\u0027 specified for \""},{"line_number":155,"context_line":"                     \"flashsystem_connection_protocol: \""},{"line_number":156,"context_line":"                     \"valid value(s) are %(enabled)s.\"),"},{"line_number":157,"context_line":"                   {\u0027prot\u0027: params[\u0027protocol\u0027],"},{"line_number":158,"context_line":"                    \u0027enabled\u0027: self._protocol})"},{"line_number":159,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_e1306eea","line":156,"updated":"2015-01-23 08:16:22.000000000","message":"The should not be changed. The kwarg supplied to the exception needs to be a string which means the interpolation needs to happen on this line.","commit_id":"84849811b6f17fc2be9ba5296da0881210caff69"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"7a44e088f5b05e546ae94d37c33158bba1cb03b6","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        # Check if iscsi_ip is set when protocol is iSCSI"},{"line_number":162,"context_line":"        if params[\u0027protocol\u0027] \u003d\u003d \u0027iSCSI\u0027 and params[\u0027iscsi_ip\u0027] \u003d\u003d \u0027None\u0027:"},{"line_number":163,"context_line":"            msg \u003d (_(\"Illegal value \u0027%(iscsi_ip)s\u0027 specified for \""},{"line_number":164,"context_line":"                     \"flashsystem_iscsi_ip.\"),"},{"line_number":165,"context_line":"                   {\u0027iscsi_ip\u0027: params[\u0027iscsi_ip\u0027]})"},{"line_number":166,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_615c7e26","line":164,"updated":"2015-01-23 08:16:22.000000000","message":"The should not be changed. The kwarg supplied to the exception needs to be a string which means the interpolation needs to happen on this line.","commit_id":"84849811b6f17fc2be9ba5296da0881210caff69"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"7a44e088f5b05e546ae94d37c33158bba1cb03b6","unresolved":false,"context_lines":[{"line_number":748,"context_line":"        return params"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"    def _handle_keyerror(self, function, header):"},{"line_number":751,"context_line":"        msg \u003d (_(\u0027Did not find expected column in %(fun)s: %(hdr)s.\u0027),"},{"line_number":752,"context_line":"               {\u0027fun\u0027: function, \u0027hdr\u0027: header})"},{"line_number":753,"context_line":"        LOG.error(msg)"},{"line_number":754,"context_line":"        raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_81b08a44","line":751,"updated":"2015-01-23 08:16:22.000000000","message":"The should not be changed. The kwarg supplied to the exception needs to be a string which means the interpolation needs to happen on this line.","commit_id":"84849811b6f17fc2be9ba5296da0881210caff69"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"7a44e088f5b05e546ae94d37c33158bba1cb03b6","unresolved":false,"context_lines":[{"line_number":947,"context_line":""},{"line_number":948,"context_line":"        if not connector.check_valid_device(host_device):"},{"line_number":949,"context_line":"            msg \u003d (_(\u0027Unable to access the backend storage \u0027"},{"line_number":950,"context_line":"                     \u0027via the path %(path)s.\u0027), {\u0027path\u0027: host_device})"},{"line_number":951,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        return device"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_a1abc6d4","line":950,"updated":"2015-01-23 08:16:22.000000000","message":"The should not be changed. The kwarg supplied to the exception needs to be a string which means the interpolation needs to happen on this line.","commit_id":"84849811b6f17fc2be9ba5296da0881210caff69"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"7a44e088f5b05e546ae94d37c33158bba1cb03b6","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"        required_flags \u003d [\u0027san_ip\u0027, \u0027san_ssh_port\u0027, \u0027san_login\u0027]"},{"line_number":1211,"context_line":"        for flag in required_flags:"},{"line_number":1212,"context_line":"            if not self.configuration.safe_get(flag):"},{"line_number":1213,"context_line":"                msg \u003d (_(\u0027%s is not set.\u0027), flag)"},{"line_number":1214,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":1215,"context_line":""},{"line_number":1216,"context_line":"        # Ensure that either password or keyfile were set"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_01849a5c","line":1213,"updated":"2015-01-23 08:16:22.000000000","message":"The should not be changed. The kwarg supplied to the exception needs to be a string which means the interpolation needs to happen on this line.","commit_id":"84849811b6f17fc2be9ba5296da0881210caff69"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"7a44e088f5b05e546ae94d37c33158bba1cb03b6","unresolved":false,"context_lines":[{"line_number":1371,"context_line":"        if status not in [\u0027available\u0027, \u0027in-use\u0027]:"},{"line_number":1372,"context_line":"            msg \u003d (_("},{"line_number":1373,"context_line":"                \u0027create_snapshot: Volume status must be \"available\" or \u0027"},{"line_number":1374,"context_line":"                \u0027\"in-use\" for snapshot. The invalid status is %s.\u0027), status)"},{"line_number":1375,"context_line":"            raise exception.InvalidVolume(msg)"},{"line_number":1376,"context_line":""},{"line_number":1377,"context_line":"        self._create_and_copy_vdisk_data(snapshot[\u0027volume\u0027][\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_417ea26c","line":1374,"updated":"2015-01-23 08:16:22.000000000","message":"The should not be changed. The kwarg supplied to the exception needs to be a string which means the interpolation needs to happen on this line.","commit_id":"84849811b6f17fc2be9ba5296da0881210caff69"},{"author":{"_account_id":7219,"name":"git-harry","email":"git-harry@live.co.uk","username":"git-harry"},"change_message_id":"7a44e088f5b05e546ae94d37c33158bba1cb03b6","unresolved":false,"context_lines":[{"line_number":1415,"context_line":"        if status !\u003d \u0027available\u0027:"},{"line_number":1416,"context_line":"            msg \u003d (_(\u0027create_volume_from_snapshot: Snapshot status \u0027"},{"line_number":1417,"context_line":"                     \u0027must be \"available\" for creating volume. \u0027"},{"line_number":1418,"context_line":"                     \u0027The invalid status is: %s.\u0027), status)"},{"line_number":1419,"context_line":"            raise exception.InvalidSnapshot(msg)"},{"line_number":1420,"context_line":""},{"line_number":1421,"context_line":"        self._create_and_copy_vdisk_data(snapshot[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_6181de49","line":1418,"updated":"2015-01-23 08:16:22.000000000","message":"The should not be changed. The kwarg supplied to the exception needs to be a string which means the interpolation needs to happen on this line.","commit_id":"84849811b6f17fc2be9ba5296da0881210caff69"},{"author":{"_account_id":2861,"name":"Vincent Hou","email":"shou@us.ibm.com","username":"houshengbo"},"change_message_id":"750fb2c492e3a6de274010c832b5ceeaead3d1ea","unresolved":false,"context_lines":[{"line_number":1325,"context_line":""},{"line_number":1326,"context_line":"    @fczm_utils.RemoveFCZone"},{"line_number":1327,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":1328,"context_line":"        \"\"\"Cleanup after an iSCSI connection has been terminated."},{"line_number":1329,"context_line":""},{"line_number":1330,"context_line":"        When we clean up a terminated connection between a given connector"},{"line_number":1331,"context_line":"        and volume, we:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_ef46624e","line":1328,"updated":"2015-01-26 03:13:24.000000000","message":"This function is a bit miss leading.\nThe comment said \"Cleanup after an iSCSI connection...\", but the code did connection for FC \"if self.configuration.flashsystem_connection_protocol \u003d\u003d \u0027FC\u0027:\".\nIs this function for iscsi? for fc? or for both? Please make it consistent from the comment to the code.","commit_id":"1571cf97a46f699aa76c41cef6487b068885a171"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"8bc92927dd32d41479abda64cb0357f3a07b9af7","unresolved":false,"context_lines":[{"line_number":1325,"context_line":""},{"line_number":1326,"context_line":"    @fczm_utils.RemoveFCZone"},{"line_number":1327,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":1328,"context_line":"        \"\"\"Cleanup after an iSCSI connection has been terminated."},{"line_number":1329,"context_line":""},{"line_number":1330,"context_line":"        When we clean up a terminated connection between a given connector"},{"line_number":1331,"context_line":"        and volume, we:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a930d6b_665b4bf6","line":1328,"in_reply_to":"1a930d6b_ef46624e","updated":"2015-01-27 06:26:54.000000000","message":"This terminate connection is used to clear FC connection after iSCSI termination. So we mark the comments here showed that \"after an iSCSI connection has been terminated\". Thanks!","commit_id":"1571cf97a46f699aa76c41cef6487b068885a171"}]}
