)]}'
{"cinder/tests/test_ibm_flashsystem_iscsi.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"73d19eda3e2fbfc6257190247f3fb24e63e0621c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\""},{"line_number":18,"context_line":"Tests for the IBM FlashSystem volume driver."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":14,"id":"9aa53dc9_de4f8269","line":18,"updated":"2015-04-09 15:50:03.000000000","message":"Recommend:  \"Tests for the IBM FlashSystem iSCSI volume driver.\"","commit_id":"4eef0931c2d0b7d5e27eaf48640eab2d835e4175"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def _ssh(self, cmd, check_exit_code\u003dTrue):"},{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            LOG.debug(\u0027Run CLI command: %s\u0027 % cmd)"},{"line_number":71,"context_line":"            utils.check_ssh_injection(cmd)"},{"line_number":72,"context_line":"            ret \u003d self.fake_storage.execute_command(cmd, check_exit_code)"},{"line_number":73,"context_line":"            (stdout, stderr) \u003d ret"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_4517b9ed","line":70,"updated":"2015-04-10 20:23:27.000000000","message":"% \u003d\u003e ,","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            ret \u003d self.fake_storage.execute_command(cmd, check_exit_code)"},{"line_number":73,"context_line":"            (stdout, stderr) \u003d ret"},{"line_number":74,"context_line":"            LOG.debug(\u0027CLI output:\\n stdout: %(stdout)s\\n stderr: \u0027"},{"line_number":75,"context_line":"                      \u0027%(stderr)s\u0027 % {\u0027stdout\u0027: stdout, \u0027stderr\u0027: stderr})"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":78,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_25d38d3a","line":75,"updated":"2015-04-10 20:23:27.000000000","message":"% \u003d\u003e ,","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":78,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":79,"context_line":"                LOG.debug(\u0027CLI Exception output:\\n stdout: %(out)s\\n \u0027"},{"line_number":80,"context_line":"                          \u0027stderr: %(err)s\u0027 % {\u0027out\u0027: e.stdout,"},{"line_number":81,"context_line":"                                               \u0027err\u0027: e.stderr})"},{"line_number":82,"context_line":"        return ret"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_a5e79d11","line":80,"updated":"2015-04-10 20:23:27.000000000","message":"% \u003d\u003e ,","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":6601,"name":"James Carey","email":"jecarey@yerac.com","username":"jecarey"},"change_message_id":"237ef4a0ec3509abfc22cff0bdbde663dffe557e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014-2015 IBM Corp."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"5ad0253b_95806448","line":1,"updated":"2015-04-28 15:41:46.000000000","message":"Should be:\n\n    # Copyright 2015 IBM Corp.","commit_id":"4fde9cec0919e8ad90f399be72ce50498e08e1d1"}],"cinder/tests/unit/test_ibm_flashsystem_iscsi.py":[{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"63747745adbfa96c13816803ca8dc65347818d65","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                LOG.debug(\u0027CLI Exception output:\\n stdout: %(out)s\\n \u0027"},{"line_number":80,"context_line":"                          \u0027stderr: %(err)s\u0027, {\u0027out\u0027: e.stdout,"},{"line_number":81,"context_line":"                                              \u0027err\u0027: e.stderr})"},{"line_number":82,"context_line":"        return ret"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class FlashSystemISCSIDriverTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_5ab7093a","line":82,"updated":"2015-05-20 09:10:54.000000000","message":"The `ret` may be returned before it is assigned.","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"514db4dac9f371bc56a073b8ba9233ebb5b0c059","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                LOG.debug(\u0027CLI Exception output:\\n stdout: %(out)s\\n \u0027"},{"line_number":80,"context_line":"                          \u0027stderr: %(err)s\u0027, {\u0027out\u0027: e.stdout,"},{"line_number":81,"context_line":"                                              \u0027err\u0027: e.stderr})"},{"line_number":82,"context_line":"        return ret"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class FlashSystemISCSIDriverTestCase(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_eee945e7","line":82,"in_reply_to":"7a016987_5ab7093a","updated":"2015-05-20 22:49:51.000000000","message":"Done","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2a62fc045bb4f7f97f197d329b1e2511571bb382","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        # clear environment"},{"line_number":172,"context_line":"        self.sim.set_protocol(\u0027iSCSI\u0027)"},{"line_number":173,"context_line":"        self._reset_flags()"},{"line_number":174,"context_line":"        self.driver.do_setup(None)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_flashsystem_validate_connector(self):"},{"line_number":177,"context_line":"        conn_neither \u003d {\u0027host\u0027: \u0027host\u0027}"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_2d55d5c5","line":174,"updated":"2015-06-04 20:29:02.000000000","message":"Do we need this once more? Line #168 do the same","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"d73451886c7182f0575fc31257b28d0a3b74a35b","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        # clear environment"},{"line_number":172,"context_line":"        self.sim.set_protocol(\u0027iSCSI\u0027)"},{"line_number":173,"context_line":"        self._reset_flags()"},{"line_number":174,"context_line":"        self.driver.do_setup(None)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_flashsystem_validate_connector(self):"},{"line_number":177,"context_line":"        conn_neither \u003d {\u0027host\u0027: \u0027host\u0027}"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_e16221ad","line":174,"in_reply_to":"3afb71cf_2d55d5c5","updated":"2015-06-05 00:45:14.000000000","message":"To unset all flags and clear do_setup().","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"62a9edc22f5d6688ab906546dd647e354591bf9b","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        # clear environment"},{"line_number":172,"context_line":"        self.sim.set_protocol(\u0027iSCSI\u0027)"},{"line_number":173,"context_line":"        self._reset_flags()"},{"line_number":174,"context_line":"        self.driver.do_setup(None)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_flashsystem_validate_connector(self):"},{"line_number":177,"context_line":"        conn_neither \u003d {\u0027host\u0027: \u0027host\u0027}"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_a22beeea","line":174,"in_reply_to":"3afb71cf_71870662","updated":"2015-06-05 17:35:37.000000000","message":"Verified and removed it.","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"98bced1d72e1730823df13297dc0d21c259524cd","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        # clear environment"},{"line_number":172,"context_line":"        self.sim.set_protocol(\u0027iSCSI\u0027)"},{"line_number":173,"context_line":"        self._reset_flags()"},{"line_number":174,"context_line":"        self.driver.do_setup(None)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_flashsystem_validate_connector(self):"},{"line_number":177,"context_line":"        conn_neither \u003d {\u0027host\u0027: \u0027host\u0027}"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_71870662","line":174,"in_reply_to":"3afb71cf_e16221ad","updated":"2015-06-05 15:23:57.000000000","message":"I won\u0027t -1 for it but IMO it\u0027s not a good design to do such things in a such way","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2a62fc045bb4f7f97f197d329b1e2511571bb382","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self.driver._protocol \u003d protocol"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_flashsystem_connection(self):"},{"line_number":194,"context_line":"        # case 1: initialize_connection/terminate_connection with iSCSI"},{"line_number":195,"context_line":"        self.sim.set_protocol(\u0027iSCSI\u0027)"},{"line_number":196,"context_line":"        self._set_flag(\u0027flashsystem_connection_protocol\u0027, \u0027iSCSI\u0027)"},{"line_number":197,"context_line":"        self.driver.do_setup(None)"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_0d69f98b","line":194,"updated":"2015-06-04 20:29:02.000000000","message":"Where is asserts for this and the following test? What do these tests verify?","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"d73451886c7182f0575fc31257b28d0a3b74a35b","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self.driver._protocol \u003d protocol"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_flashsystem_connection(self):"},{"line_number":194,"context_line":"        # case 1: initialize_connection/terminate_connection with iSCSI"},{"line_number":195,"context_line":"        self.sim.set_protocol(\u0027iSCSI\u0027)"},{"line_number":196,"context_line":"        self._set_flag(\u0027flashsystem_connection_protocol\u0027, \u0027iSCSI\u0027)"},{"line_number":197,"context_line":"        self.driver.do_setup(None)"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_e10901df","line":194,"in_reply_to":"3afb71cf_0d69f98b","updated":"2015-06-05 00:45:14.000000000","message":"To verify the whole flow from initialize connection to terminate connection including create volume.","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"62a9edc22f5d6688ab906546dd647e354591bf9b","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self.driver._protocol \u003d protocol"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_flashsystem_connection(self):"},{"line_number":194,"context_line":"        # case 1: initialize_connection/terminate_connection with iSCSI"},{"line_number":195,"context_line":"        self.sim.set_protocol(\u0027iSCSI\u0027)"},{"line_number":196,"context_line":"        self._set_flag(\u0027flashsystem_connection_protocol\u0027, \u0027iSCSI\u0027)"},{"line_number":197,"context_line":"        self.driver.do_setup(None)"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_57263a69","line":194,"in_reply_to":"3afb71cf_11de926d","updated":"2015-06-05 17:35:37.000000000","message":"Will remove create_volume here. The main purpose is to verify initialize/terminate connection with iSCSI protocol.","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"98bced1d72e1730823df13297dc0d21c259524cd","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        self.driver._protocol \u003d protocol"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def test_flashsystem_connection(self):"},{"line_number":194,"context_line":"        # case 1: initialize_connection/terminate_connection with iSCSI"},{"line_number":195,"context_line":"        self.sim.set_protocol(\u0027iSCSI\u0027)"},{"line_number":196,"context_line":"        self._set_flag(\u0027flashsystem_connection_protocol\u0027, \u0027iSCSI\u0027)"},{"line_number":197,"context_line":"        self.driver.do_setup(None)"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_11de926d","line":194,"in_reply_to":"3afb71cf_e10901df","updated":"2015-06-05 15:23:57.000000000","message":"\"To verify the whole flow from .. connection to ...\" - it\u0027s not a unit tests. it\u0027s mostly functional","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"}],"cinder/volume/drivers/ibm/flashsystem_iscsi.py":[{"author":{"_account_id":14271,"name":"Kallebe Monteiro","email":"kallebe.monteiro@lsbd.ufc.br","username":"kallebe"},"change_message_id":"32eac1c7b2610b32ed90fc11e69db44fe90487be","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        for k, node in self._storage_nodes.iteritems():"},{"line_number":324,"context_line":"            if self.configuration.flashsystem_connection_protocol \u003d\u003d \u0027iSCSI\u0027:"},{"line_number":325,"context_line":"                if (len(node[\u0027ipv4\u0027]) or len(node[\u0027ipv6\u0027])"},{"line_number":326,"context_line":"                        and len(node[\u0027iscsi_name\u0027])):"},{"line_number":327,"context_line":"                    node[\u0027protocol\u0027] \u003d \u0027iSCSI\u0027"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        self._protocol \u003d \u0027iSCSI\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba7be1f8_c09c6d6c","line":326,"updated":"2015-02-21 14:10:00.000000000","message":"nitpick: pep8 complains about this \u0027and\u0027 after line break and not before it.\n\u0027and\u0027 should be at the end of previous line\n\nif (len(node[\u0027ipv4\u0027]) or len(node[\u0027ipv6\u0027]) and","commit_id":"a5741f8d34525af035317ad331d58b437166e381"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from cinder import exception"},{"line_number":34,"context_line":"from cinder.i18n import _, _LE, _LW"},{"line_number":35,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":36,"context_line":"import cinder.volume.driver"},{"line_number":37,"context_line":"from cinder.volume.drivers.ibm import flashsystem as fscommon"},{"line_number":38,"context_line":"from cinder.volume.drivers.san import san"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_a885e5cf","line":35,"updated":"2015-02-26 16:28:42.000000000","message":"Note to self:  We will need to move this to oslo_log after we move to the new logging library","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"flashsystem_iscsi_opts \u003d ["},{"line_number":43,"context_line":"    cfg.IntOpt(\u0027flashsystem_iscsi_portid\u0027,"},{"line_number":44,"context_line":"               default\u003d0,"},{"line_number":45,"context_line":"               help\u003d\u0027Default iSCSI Port ID of FlashSystem.\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_284815b2","line":42,"updated":"2015-02-26 16:28:42.000000000","message":"Another note to self:  Will need to add this file to the search path for config options once that change is merged.  (I have a number of oslo changes in flight Edwin)","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    \"\"\"IBM FlashSystem 840 iSCSI volume driver."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    Version history:"},{"line_number":57,"context_line":"    1.0.0 - Initial driver for iSCSI"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_0857d126","line":57,"updated":"2015-02-26 16:28:42.000000000","message":"I think we want this to be 1.0.2.  I think EMC and HP have been doing a single version level for the larger driver in question, not one for iSCSI and one for FC.","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    VERSION \u003d \"1.0.0\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":64,"context_line":"        super(FlashSystemISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_43852a58","line":61,"updated":"2015-02-26 16:28:42.000000000","message":"1.0.2","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _check_vdisk_params(self, params):"},{"line_number":70,"context_line":"        # Check that the requested protocol is enabled"},{"line_number":71,"context_line":"        if params[\u0027protocol\u0027] !\u003d self._protocol:"},{"line_number":72,"context_line":"            msg \u003d (_(\"Illegal value \u0027%(prot)s\u0027 specified for \""},{"line_number":73,"context_line":"                     \"flashsystem_connection_protocol: \""},{"line_number":74,"context_line":"                     \"valid value(s) are %(enabled)s.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_03bdf201","line":71,"updated":"2015-02-26 16:28:42.000000000","message":"Is this right?  Should it be if not params[\u0027protocol\u0027] in self._protocol  ?","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        # Check if iscsi_ip is set when protocol is iSCSI"},{"line_number":80,"context_line":"        if params[\u0027protocol\u0027] \u003d\u003d \u0027iSCSI\u0027 and params[\u0027iscsi_ip\u0027] \u003d\u003d \u0027None\u0027:"},{"line_number":81,"context_line":"            msg \u003d (_(\"Illegal value \u0027%(iscsi_ip)s\u0027 specified for \""},{"line_number":82,"context_line":"                     \"iscsi_ip_address.\")"},{"line_number":83,"context_line":"                   % {\u0027iscsi_ip\u0027: params[\u0027iscsi_ip\u0027]})"},{"line_number":84,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_a35a66ef","line":82,"updated":"2015-02-26 16:28:42.000000000","message":"I would add to his \"iscsi_ip_address must be set when using protocol \u0027iSCSI\u0027 \"","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        We create a host and associate it with the given connection"},{"line_number":90,"context_line":"        information."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        \"\"\""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        LOG.debug(\u0027enter: _create_host: host %s.\u0027, connector[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_43d60a29","line":91,"updated":"2015-02-26 16:28:42.000000000","message":"Shouldn\u0027t have an extra space here.","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        ports \u003d []"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"#        if \u0027FC\u0027 \u003d\u003d self._protocol and \u0027wwpns\u0027 in connector:"},{"line_number":103,"context_line":"        if \u0027iSCSI\u0027 \u003d\u003d self._protocol and \u0027initiator\u0027 in connector:"},{"line_number":104,"context_line":"            ports.append(\u0027-iscsiname %s\u0027 % connector[\u0027initiator\u0027])"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_e3e45e0e","line":102,"updated":"2015-02-26 16:28:42.000000000","message":"Please remove commented line.","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            ipaddr \u003d preferred_node_entry[\u0027ipv4\u0027][0]"},{"line_number":189,"context_line":"        else:"},{"line_number":190,"context_line":"            ipaddr \u003d preferred_node_entry[\u0027ipv6\u0027][0]"},{"line_number":191,"context_line":"        properties[\u0027target_portal\u0027] \u003d \u0027%s:%s\u0027 % (ipaddr, \u00273260\u0027)"},{"line_number":192,"context_line":"        properties[\u0027target_iqn\u0027] \u003d preferred_node_entry[\u0027iscsi_name\u0027]"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_83e642e6","line":191,"updated":"2015-02-26 16:28:42.000000000","message":"Shouldn\u0027t the port be configurable.  There is an iscsi_port option.  We may want to use that to be consistent with other drivers.","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        LOG.debug("},{"line_number":215,"context_line":"            \u0027enter: initialize_connection: volume %(vol)s with \u0027"},{"line_number":216,"context_line":"            \u0027connector %(conn)s.\u0027, {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_03f17294","line":214,"updated":"2015-02-26 16:28:42.000000000","message":"I think we should make this a LOG.info","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        3. Delete the host if it has no more mappings (hosts are created"},{"line_number":260,"context_line":"           automatically by this driver when mappings are created)"},{"line_number":261,"context_line":"        \"\"\""},{"line_number":262,"context_line":"        LOG.debug("},{"line_number":263,"context_line":"            \u0027enter: terminate_connection: volume %(vol)s with \u0027"},{"line_number":264,"context_line":"            \u0027connector %(conn)s.\u0027,"},{"line_number":265,"context_line":"            {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_e3237e02","line":262,"updated":"2015-02-26 16:28:42.000000000","message":"LOG .info here as well","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"97b27a23c86efe4bb199ad597a6615ea64efba3f","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        self._get_node_data()"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        # Get the iSCSI IP addresses and WWPNs of the FlashSystem nodes"},{"line_number":321,"context_line":"        self._get_iscsi_ip_addrs()"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        for k, node in self._storage_nodes.iteritems():"},{"line_number":324,"context_line":"            if self.configuration.flashsystem_connection_protocol \u003d\u003d \u0027iSCSI\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_c3b2fa92","line":321,"updated":"2015-02-26 16:28:42.000000000","message":"What happens if we don\u0027t get any configured or online ports?  Seems like there should be some sort of check and warning or error around this.","commit_id":"0c9ee20bfeb76c1657b7b744bc8833570ec40089"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"73d19eda3e2fbfc6257190247f3fb24e63e0621c","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from cinder import exception"},{"line_number":34,"context_line":"from cinder.i18n import _, _LE, _LW"},{"line_number":35,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":36,"context_line":"import cinder.volume.driver"},{"line_number":37,"context_line":"from cinder.volume.drivers.ibm import flashsystem as fscommon"},{"line_number":38,"context_line":"from cinder.volume.drivers.san import san"}],"source_content_type":"text/x-python","patch_set":14,"id":"9aa53dc9_23fbfb48","line":35,"updated":"2015-04-09 15:50:03.000000000","message":"This should now be \u0027from oslo_log import log as logging\u0027 .","commit_id":"4eef0931c2d0b7d5e27eaf48640eab2d835e4175"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"73d19eda3e2fbfc6257190247f3fb24e63e0621c","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        LOG.debug("},{"line_number":214,"context_line":"            \u0027enter: initialize_connection: volume %(vol)s with \u0027"},{"line_number":215,"context_line":"            \u0027connector %(conn)s.\u0027, {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9aa53dc9_c3ce8f2d","line":213,"updated":"2015-04-09 15:50:03.000000000","message":"Sill think this should be a LOG.info","commit_id":"4eef0931c2d0b7d5e27eaf48640eab2d835e4175"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"73d19eda3e2fbfc6257190247f3fb24e63e0621c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        3. Delete the host if it has no more mappings (hosts are created"},{"line_number":259,"context_line":"           automatically by this driver when mappings are created)"},{"line_number":260,"context_line":"        \"\"\""},{"line_number":261,"context_line":"        LOG.debug("},{"line_number":262,"context_line":"            \u0027enter: terminate_connection: volume %(vol)s with \u0027"},{"line_number":263,"context_line":"            \u0027connector %(conn)s.\u0027,"},{"line_number":264,"context_line":"            {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"}],"source_content_type":"text/x-python","patch_set":14,"id":"9aa53dc9_a3cf0b28","line":261,"updated":"2015-04-09 15:50:03.000000000","message":"Same here.","commit_id":"4eef0931c2d0b7d5e27eaf48640eab2d835e4175"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"73d19eda3e2fbfc6257190247f3fb24e63e0621c","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                break"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        if node is None:"},{"line_number":291,"context_line":"            msg \u003d (_LE(\u0027_get_iscsi_ip_addrs: No config node found.\u0027))"},{"line_number":292,"context_line":"            LOG.error(msg)"},{"line_number":293,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":294,"context_line":"        for port_data in generator:"}],"source_content_type":"text/x-python","patch_set":14,"id":"9aa53dc9_83a2c749","line":291,"updated":"2015-04-09 15:50:03.000000000","message":"This should be _() instead of _LE()","commit_id":"4eef0931c2d0b7d5e27eaf48640eab2d835e4175"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"73d19eda3e2fbfc6257190247f3fb24e63e0621c","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                        six.text_type("},{"line_number":305,"context_line":"                            self.configuration.flashsystem_iscsi_portid))):"},{"line_number":306,"context_line":"                if state not in (\u0027configured\u0027, \u0027online\u0027):"},{"line_number":307,"context_line":"                    msg \u003d (_LE(\u0027_get_iscsi_ip_addrs: State of node is wrong.\u0027))"},{"line_number":308,"context_line":"                    LOG.error(msg)"},{"line_number":309,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":310,"context_line":"                if state in (\u0027configured\u0027, \u0027online\u0027) and speed !\u003d \u0027NONE\u0027:"}],"source_content_type":"text/x-python","patch_set":14,"id":"9aa53dc9_43895fc8","line":307,"updated":"2015-04-09 15:50:03.000000000","message":"Same here.","commit_id":"4eef0931c2d0b7d5e27eaf48640eab2d835e4175"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"73d19eda3e2fbfc6257190247f3fb24e63e0621c","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                        node[\u0027ipv6\u0027].append(port_ipv6)"},{"line_number":315,"context_line":"                    break"},{"line_number":316,"context_line":"        if not (len(node[\u0027ipv4\u0027]) or len(node[\u0027ipv6\u0027])):"},{"line_number":317,"context_line":"            msg \u003d (_LE(\u0027_get_iscsi_ip_addrs: no ip address found.\u0027))"},{"line_number":318,"context_line":"            LOG.error(msg)"},{"line_number":319,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9aa53dc9_c351ef37","line":317,"updated":"2015-04-09 15:50:03.000000000","message":"Same here.","commit_id":"4eef0931c2d0b7d5e27eaf48640eab2d835e4175"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"73d19eda3e2fbfc6257190247f3fb24e63e0621c","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        ssh_cmd \u003d [\u0027svcinfo\u0027, \u0027lssystem\u0027, \u0027-delim\u0027, \u0027!\u0027]"},{"line_number":352,"context_line":"        attributes \u003d self._execute_command_and_parse_attributes(ssh_cmd)"},{"line_number":353,"context_line":"        if not attributes or not (\u0027name\u0027 in attributes):"},{"line_number":354,"context_line":"            msg \u003d (_LE(\u0027_get_node_data: Could not get system name.\u0027))"},{"line_number":355,"context_line":"            LOG.error(msg)"},{"line_number":356,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":357,"context_line":"        self._system_name \u003d attributes[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"9aa53dc9_23577b27","line":354,"updated":"2015-04-09 15:50:03.000000000","message":"Same here.","commit_id":"4eef0931c2d0b7d5e27eaf48640eab2d835e4175"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"73d19eda3e2fbfc6257190247f3fb24e63e0621c","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        # support when open_access_enabled is off"},{"line_number":362,"context_line":"        if not attributes or not (\u0027open_access_enabled\u0027 in attributes) or ("},{"line_number":363,"context_line":"                attributes[\u0027open_access_enabled\u0027] !\u003d \u0027off\u0027):"},{"line_number":364,"context_line":"            msg \u003d (_LE(\u0027_get_node_data: open_access_enabled is not off.\u0027))"},{"line_number":365,"context_line":"            LOG.error(msg)"},{"line_number":366,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":367,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9aa53dc9_630fc337","line":364,"updated":"2015-04-09 15:50:03.000000000","message":"Uh oh, I hope someone hadn\u0027t advised you to do _LE .  In the case you are creating a message that is going to both and error and an exception you are supposed to use _ .  There may have been confusion around that before.","commit_id":"4eef0931c2d0b7d5e27eaf48640eab2d835e4175"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        information."},{"line_number":91,"context_line":"        \"\"\""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        LOG.info(\u0027enter: _create_host: host %s.\u0027, connector[\u0027host\u0027])"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        rand_id \u003d six.text_type(random.randint(0, 99999999)).zfill(8)"},{"line_number":96,"context_line":"        host_name \u003d \u0027%s-%s\u0027 % (self._connector_to_hostname_prefix(connector),"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_c513c90c","line":93,"updated":"2015-04-10 20:23:27.000000000","message":"Needs _LI().\nShould probably just be LOG.debug().","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                (not out.strip()),"},{"line_number":121,"context_line":"                \u0027_create_host\u0027, ssh_cmd, out, err)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        LOG.info("},{"line_number":124,"context_line":"            \u0027leave: _create_host: host %(host)s - %(host_name)s.\u0027,"},{"line_number":125,"context_line":"            {\u0027host\u0027: connector[\u0027host\u0027], \u0027host_name\u0027: host_name})"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_4569f98a","line":123,"updated":"2015-04-10 20:23:27.000000000","message":"Needs _LI().\nShould probably just be LOG.debug().","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            self, connector, lun_id, vdisk_name, vdisk_id, vdisk_params):"},{"line_number":147,"context_line":"        \"\"\"Get the map properties of vdisk.\"\"\""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        LOG.info("},{"line_number":150,"context_line":"            \u0027enter: _get_vdisk_map_properties: vdisk \u0027"},{"line_number":151,"context_line":"            \u0027%(vdisk_name)s.\u0027, {\u0027vdisk_name\u0027: vdisk_name})"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_e557e5c8","line":149,"updated":"2015-04-10 20:23:27.000000000","message":"Needs _LI().\n\nShould probably just be LOG.debug().","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                io_group_nodes.append(node)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        if not io_group_nodes:"},{"line_number":168,"context_line":"            msg \u003d (_LE(\u0027_get_vdisk_map_properties: No node found in \u0027"},{"line_number":169,"context_line":"                       \u0027I/O group %(gid)s for volume %(vol)s.\u0027)"},{"line_number":170,"context_line":"                   % {\u0027gid\u0027: IO_group, \u0027vol\u0027: vdisk_name})"},{"line_number":171,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_255eede9","line":168,"updated":"2015-04-10 20:23:27.000000000","message":"Should be _() since it is being used for the exception.","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        properties[\u0027target_portal\u0027] \u003d \u0027%s:%s\u0027 % (ipaddr, iscsi_port)"},{"line_number":191,"context_line":"        properties[\u0027target_iqn\u0027] \u003d preferred_node_entry[\u0027iscsi_name\u0027]"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        LOG.info("},{"line_number":194,"context_line":"            \u0027leave: _get_vdisk_map_properties: vdisk \u0027"},{"line_number":195,"context_line":"            \u0027%(vdisk_name)s.\u0027, {\u0027vdisk_name\u0027: vdisk_name})"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_8548212f","line":193,"updated":"2015-04-10 20:23:27.000000000","message":"Needs _LI().\n\nShould probably just be LOG.debug().","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        LOG.info("},{"line_number":214,"context_line":"            \u0027enter: initialize_connection: volume %(vol)s with \u0027"},{"line_number":215,"context_line":"            \u0027connector %(conn)s.\u0027, {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        vdisk_name \u003d volume[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_65e75541","line":214,"updated":"2015-04-10 20:23:27.000000000","message":"Needs _LI().","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                          {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        LOG.info("},{"line_number":243,"context_line":"            \u0027leave: initialize_connection:\\n volume: %(vol)s\\n connector \u0027"},{"line_number":244,"context_line":"            \u0027%(conn)s\\n properties: %(prop)s.\u0027,"},{"line_number":245,"context_line":"            {\u0027vol\u0027: volume,"},{"line_number":246,"context_line":"             \u0027conn\u0027: connector,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_a5dd5d72","line":243,"updated":"2015-04-10 20:23:27.000000000","message":"Needs _LI().\n\nBoth of these LOG.info() calls in this method should probably just be LOG.debug().","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":293,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":294,"context_line":"        for port_data in generator:"},{"line_number":295,"context_line":"            try:"},{"line_number":296,"context_line":"                port_ipv4 \u003d port_data[\u0027IP_address\u0027]"},{"line_number":297,"context_line":"                port_ipv6 \u003d port_data[\u0027IP_address_6\u0027]"},{"line_number":298,"context_line":"                state \u003d port_data[\u0027state\u0027]"},{"line_number":299,"context_line":"                speed \u003d port_data[\u0027speed\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_458d797a","line":296,"updated":"2015-04-10 20:23:27.000000000","message":"Could change these to port_data.get(\u0027xxx\u0027) to avoid possibility of getting a KeyError.","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        pool \u003d fscommon.FLASHSYSTEM_VOLPOOL_NAME"},{"line_number":370,"context_line":"        ssh_cmd \u003d [\u0027svcinfo\u0027, \u0027lsmdiskgrp\u0027, \u0027-bytes\u0027, \u0027-delim\u0027, \u0027!\u0027, pool]"},{"line_number":371,"context_line":"        attributes \u003d self._execute_command_and_parse_attributes(ssh_cmd)"},{"line_number":372,"context_line":"        if not attributes or not (\u0027status\u0027 in attributes) or ("},{"line_number":373,"context_line":"                attributes[\u0027status\u0027] \u003d\u003d \u0027offline\u0027):"},{"line_number":374,"context_line":"            msg \u003d _(\u0027_get_node_data: Array does not exist or is offline.\u0027)"},{"line_number":375,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_e56da5cd","line":372,"updated":"2015-04-10 20:23:27.000000000","message":"I would suggest one separate check of attributes up from rather than having it checked in every if statement. Something like:\n\nif not attributes:\n    msg \u003d _(\u0027Unable to parse attributes\u0027)\n    LOG.error(msg)\n    raise exception.InvalidInput(reason\u003dmsg)","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        if \u0027iSCSI\u0027 \u003d\u003d self._protocol and \u0027initiator\u0027 in connector:"},{"line_number":426,"context_line":"            valid \u003d True"},{"line_number":427,"context_line":"        if not valid:"},{"line_number":428,"context_line":"            msg \u003d _(\u0027The connector does not contain the \u0027"},{"line_number":429,"context_line":"                       \u0027required information: initiator is missing\u0027)"},{"line_number":430,"context_line":"            LOG.error(msg)"},{"line_number":431,"context_line":"            raise exception.InvalidConnectorException(missing\u003d("}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_3303da11","line":428,"updated":"2015-04-10 20:23:27.000000000","message":"Should be _LE since msg is only used for the LOG call.","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"08b90a39bf211b7f34e102d0fa9f3607d8098b10","unresolved":false,"context_lines":[{"line_number":426,"context_line":"            valid \u003d True"},{"line_number":427,"context_line":"        if not valid:"},{"line_number":428,"context_line":"            msg \u003d _(\u0027The connector does not contain the \u0027"},{"line_number":429,"context_line":"                       \u0027required information: initiator is missing\u0027)"},{"line_number":430,"context_line":"            LOG.error(msg)"},{"line_number":431,"context_line":"            raise exception.InvalidConnectorException(missing\u003d("},{"line_number":432,"context_line":"                                                      \u0027initiator\u0027))"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aaa499b_73096231","line":429,"updated":"2015-04-10 20:23:27.000000000","message":"Need to remove a few leading spaces here to align above.","commit_id":"1cf560fd7a7c9393e509e6e97e73a5d8b038732b"},{"author":{"_account_id":6601,"name":"James Carey","email":"jecarey@yerac.com","username":"jecarey"},"change_message_id":"237ef4a0ec3509abfc22cff0bdbde663dffe557e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 - 2015 IBM Corporation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":18,"id":"5ad0253b_158d747b","line":1,"updated":"2015-04-28 15:41:46.000000000","message":"Should be:\n\n    # Copyright 2015 IBM Corp.","commit_id":"4fde9cec0919e8ad90f399be72ce50498e08e1d1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"614afed4d10c7e4dd34098eadd9e306edb67b4ac","unresolved":false,"context_lines":[{"line_number":42,"context_line":"flashsystem_iscsi_opts \u003d ["},{"line_number":43,"context_line":"    cfg.IntOpt(\u0027flashsystem_iscsi_portid\u0027,"},{"line_number":44,"context_line":"               default\u003d0,"},{"line_number":45,"context_line":"               help\u003d\u0027Default iSCSI Port ID of FlashSystem.\u0027)"},{"line_number":46,"context_line":"]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ad0253b_fb419e3a","line":45,"updated":"2015-04-29 14:03:55.000000000","message":"Please, specify default value in a help message","commit_id":"f601bac071fa88d81a14d86de8dfc1f25c27f9d0"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"614afed4d10c7e4dd34098eadd9e306edb67b4ac","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        # Get preferred node and other nodes in I/O group"},{"line_number":157,"context_line":"        preferred_node_entry \u003d None"},{"line_number":158,"context_line":"        io_group_nodes \u003d []"},{"line_number":159,"context_line":"        for k, node in self._storage_nodes.iteritems():"},{"line_number":160,"context_line":"            if vdisk_params[\u0027protocol\u0027] !\u003d node[\u0027protocol\u0027]:"},{"line_number":161,"context_line":"                continue"},{"line_number":162,"context_line":"            if node[\u0027id\u0027] \u003d\u003d preferred_node:"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ad0253b_1bf8dae4","line":159,"updated":"2015-04-29 14:03:55.000000000","message":"\u0027iteritems\u0027 is not compatible with python 3.x. It would be good to fix it","commit_id":"f601bac071fa88d81a14d86de8dfc1f25c27f9d0"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"614afed4d10c7e4dd34098eadd9e306edb67b4ac","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            \u0027leave: terminate_connection: volume %(vol)s with \u0027"},{"line_number":272,"context_line":"            \u0027connector %(conn)s.\u0027, {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        return {"},{"line_number":275,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027"},{"line_number":276,"context_line":"        }"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5ad0253b_1b2b3a32","line":274,"updated":"2015-04-29 14:03:55.000000000","message":"IMO, it would be more readable to get it on the same line:\nreturn {\u0027driver_volume_type\u0027: \u0027iscsi\u0027}","commit_id":"f601bac071fa88d81a14d86de8dfc1f25c27f9d0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        if params[\u0027protocol\u0027] \u003d\u003d \u0027iSCSI\u0027 and params[\u0027iscsi_ip\u0027] \u003d\u003d \u0027None\u0027:"},{"line_number":83,"context_line":"            msg \u003d (_(\"iscsi_ip_address must be set when \""},{"line_number":84,"context_line":"                     \"using protocol \u0027iSCSI\u0027.\")"},{"line_number":85,"context_line":"                   % {\u0027iscsi_ip\u0027: params[\u0027iscsi_ip\u0027]})"},{"line_number":86,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _create_host(self, connector):"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_27aede2e","line":85,"updated":"2015-05-15 05:05:39.000000000","message":"% {\u0027iscsi_ip\u0027: params[\u0027iscsi_ip\u0027]} should be removed because params[\u0027iscsi_ip\u0027] is None.  Also you don\u0027t have a %(iscsi_ip)s to substitute the string.","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        information."},{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        LOG.debug(\u0027enter: _create_host: host %s.\u0027, connector[\u0027host\u0027])"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        rand_id \u003d six.text_type(random.randint(0, 99999999)).zfill(8)"},{"line_number":98,"context_line":"        host_name \u003d \u0027%s-%s\u0027 % (self._connector_to_hostname_prefix(connector),"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_07abe21e","line":95,"updated":"2015-05-15 05:05:39.000000000","message":"We are asked not to log \"enter\" and \"exit\" debug messages now.","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        LOG.debug("},{"line_number":126,"context_line":"            \u0027leave: _create_host: host %(host)s - %(host_name)s.\u0027,"},{"line_number":127,"context_line":"            {\u0027host\u0027: connector[\u0027host\u0027], \u0027host_name\u0027: host_name})"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        return host_name"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_876d9206","line":127,"updated":"2015-05-15 05:05:39.000000000","message":"Same here.  Debug message for enter and exit are not encouraged now.","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        LOG.debug("},{"line_number":152,"context_line":"            \u0027enter: _get_vdisk_map_properties: vdisk \u0027"},{"line_number":153,"context_line":"            \u0027%(vdisk_name)s.\u0027, {\u0027vdisk_name\u0027: vdisk_name})"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        preferred_node \u003d \u00270\u0027"},{"line_number":156,"context_line":"        IO_group \u003d \u00270\u0027"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_4778bac4","line":153,"updated":"2015-05-15 05:05:39.000000000","message":"same","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.debug("},{"line_number":196,"context_line":"            \u0027leave: _get_vdisk_map_properties: vdisk \u0027"},{"line_number":197,"context_line":"            \u0027%(vdisk_name)s.\u0027, {\u0027vdisk_name\u0027: vdisk_name})"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        return {\u0027driver_volume_type\u0027: type_str, \u0027data\u0027: properties}"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_0782c294","line":197,"updated":"2015-05-15 05:05:39.000000000","message":"same","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    @utils.synchronized(\u0027flashsystem-init-conn\u0027, external\u003dTrue)"},{"line_number":202,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":203,"context_line":"        \"\"\"Perform the necessary work so that an iSCSI connection can"},{"line_number":204,"context_line":"        be made."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        To be able to create an iSCSI connection from a given host to a"},{"line_number":207,"context_line":"        volume, we must:"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_e77e86ad","line":204,"updated":"2015-05-15 05:05:39.000000000","message":"Multi-line docstring should start with a single line followed by an empty line.","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        LOG.debug("},{"line_number":217,"context_line":"            \u0027enter: initialize_connection: volume %(vol)s with \u0027"},{"line_number":218,"context_line":"            \u0027connector %(conn)s.\u0027, {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        vdisk_name \u003d volume[\u0027name\u0027]"},{"line_number":221,"context_line":"        vdisk_id \u003d volume[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_c74a6a83","line":218,"updated":"2015-05-15 05:05:39.000000000","message":"same","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            \u0027%(conn)s\\n properties: %(prop)s.\u0027,"},{"line_number":248,"context_line":"            {\u0027vol\u0027: volume,"},{"line_number":249,"context_line":"             \u0027conn\u0027: connector,"},{"line_number":250,"context_line":"             \u0027prop\u0027: properties})"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        return properties"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_87447274","line":250,"updated":"2015-05-15 05:05:39.000000000","message":"same","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        3. Delete the host if it has no more mappings (hosts are created"},{"line_number":263,"context_line":"           automatically by this driver when mappings are created)"},{"line_number":264,"context_line":"        \"\"\""},{"line_number":265,"context_line":"        LOG.debug("},{"line_number":266,"context_line":"            \u0027enter: terminate_connection: volume %(vol)s with \u0027"},{"line_number":267,"context_line":"            \u0027connector %(conn)s.\u0027,"},{"line_number":268,"context_line":"            {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_475f9a41","line":265,"updated":"2015-05-15 05:05:39.000000000","message":"same","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        self._wait_vdisk_copy_completed(vdisk_name)"},{"line_number":272,"context_line":"        self._unmap_vdisk_from_host(vdisk_name, connector)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        LOG.debug("},{"line_number":275,"context_line":"            \u0027leave: terminate_connection: volume %(vol)s with \u0027"},{"line_number":276,"context_line":"            \u0027connector %(conn)s.\u0027, {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_275c9e4a","line":274,"updated":"2015-05-15 05:05:39.000000000","message":"same","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    def do_setup(self, ctxt):"},{"line_number":324,"context_line":"        \"\"\"Check that we have all configuration details from the storage.\"\"\""},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        LOG.debug(\u0027enter: do_setup\u0027)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        self._context \u003d ctxt"},{"line_number":329,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_e755661d","line":326,"updated":"2015-05-15 05:05:39.000000000","message":"same","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eaf63427ce2052afbc433bbd78c56e4795ec5f34","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        self._vdisk_copy_lock \u003d threading.Lock()"},{"line_number":347,"context_line":"        self._check_lock_interval \u003d 5"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        LOG.debug(\u0027leave: do_setup\u0027)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def _get_node_data(self):"},{"line_number":352,"context_line":"        # Get storage system name and id"}],"source_content_type":"text/x-python","patch_set":37,"id":"7a016987_a7364e01","line":349,"updated":"2015-05-15 05:05:39.000000000","message":"same","commit_id":"cda2104427c5d261603a426276c735536f082079"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"63747745adbfa96c13816803ca8dc65347818d65","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            preferred_node_entry \u003d io_group_nodes[0]"},{"line_number":169,"context_line":"            LOG.warning(_LW(\u0027_get_vdisk_map_properties: Did not find a \u0027"},{"line_number":170,"context_line":"                            \u0027preferred node for vdisk %s.\u0027), vdisk_name)"},{"line_number":171,"context_line":"        properties \u003d {}"},{"line_number":172,"context_line":"        properties[\u0027target_discovered\u0027] \u003d False"},{"line_number":173,"context_line":"        properties[\u0027target_lun\u0027] \u003d lun_id"},{"line_number":174,"context_line":"        properties[\u0027volume_id\u0027] \u003d vdisk_id"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_b06a9fec","line":171,"updated":"2015-05-20 09:10:54.000000000","message":"Can be rewrite with dict literal.","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"514db4dac9f371bc56a073b8ba9233ebb5b0c059","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            preferred_node_entry \u003d io_group_nodes[0]"},{"line_number":169,"context_line":"            LOG.warning(_LW(\u0027_get_vdisk_map_properties: Did not find a \u0027"},{"line_number":170,"context_line":"                            \u0027preferred node for vdisk %s.\u0027), vdisk_name)"},{"line_number":171,"context_line":"        properties \u003d {}"},{"line_number":172,"context_line":"        properties[\u0027target_discovered\u0027] \u003d False"},{"line_number":173,"context_line":"        properties[\u0027target_lun\u0027] \u003d lun_id"},{"line_number":174,"context_line":"        properties[\u0027volume_id\u0027] \u003d vdisk_id"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_cb6c3b37","line":171,"in_reply_to":"7a016987_b06a9fec","updated":"2015-05-20 22:49:51.000000000","message":"Thanks.","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"63747745adbfa96c13816803ca8dc65347818d65","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                LOG.error(_LE(\u0027initialize_connection: Failed to collect \u0027"},{"line_number":222,"context_line":"                              \u0027return properties for volume %(vol)s and \u0027"},{"line_number":223,"context_line":"                              \u0027connector %(conn)s.\u0027),"},{"line_number":224,"context_line":"                          {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        return properties"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_500feb36","line":224,"updated":"2015-05-20 09:10:54.000000000","message":"It is more common to print vol_id instead of dumping whole volume content. See cinder/volume/targets/cxt.py","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"514db4dac9f371bc56a073b8ba9233ebb5b0c059","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                LOG.error(_LE(\u0027initialize_connection: Failed to collect \u0027"},{"line_number":222,"context_line":"                              \u0027return properties for volume %(vol)s and \u0027"},{"line_number":223,"context_line":"                              \u0027connector %(conn)s.\u0027),"},{"line_number":224,"context_line":"                          {\u0027vol\u0027: volume, \u0027conn\u0027: connector})"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        return properties"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_4b960b40","line":224,"in_reply_to":"7a016987_500feb36","updated":"2015-05-20 22:49:51.000000000","message":"As the error may be occurred on backend storage, it\u0027s hard to be determined in driver. Show the whole content volume can keep more info for debug. Thanks.","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"63747745adbfa96c13816803ca8dc65347818d65","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                        six.text_type("},{"line_number":273,"context_line":"                            self.configuration.flashsystem_iscsi_portid))):"},{"line_number":274,"context_line":"                if state not in (\u0027configured\u0027, \u0027online\u0027):"},{"line_number":275,"context_line":"                    msg \u003d _(\u0027_get_iscsi_ip_addrs: State of node is wrong.\u0027)"},{"line_number":276,"context_line":"                    LOG.error(msg)"},{"line_number":277,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":278,"context_line":"                if state in (\u0027configured\u0027, \u0027online\u0027) and speed !\u003d \u0027NONE\u0027:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_ba0b9d23","line":275,"updated":"2015-05-20 09:10:54.000000000","message":"Add more details to the error message?","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"514db4dac9f371bc56a073b8ba9233ebb5b0c059","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                        six.text_type("},{"line_number":273,"context_line":"                            self.configuration.flashsystem_iscsi_portid))):"},{"line_number":274,"context_line":"                if state not in (\u0027configured\u0027, \u0027online\u0027):"},{"line_number":275,"context_line":"                    msg \u003d _(\u0027_get_iscsi_ip_addrs: State of node is wrong.\u0027)"},{"line_number":276,"context_line":"                    LOG.error(msg)"},{"line_number":277,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":278,"context_line":"                if state in (\u0027configured\u0027, \u0027online\u0027) and speed !\u003d \u0027NONE\u0027:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_0bb373ea","line":275,"in_reply_to":"7a016987_ba0b9d23","updated":"2015-05-20 22:49:51.000000000","message":"Will show current state here. But the error message is absolutely clear.","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"63747745adbfa96c13816803ca8dc65347818d65","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                        node[\u0027ipv6\u0027].append(port_ipv6)"},{"line_number":283,"context_line":"                    break"},{"line_number":284,"context_line":"        if not (len(node[\u0027ipv4\u0027]) or len(node[\u0027ipv6\u0027])):"},{"line_number":285,"context_line":"            msg \u003d _(\u0027_get_iscsi_ip_addrs: no ip address found.\u0027)"},{"line_number":286,"context_line":"            LOG.error(msg)"},{"line_number":287,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_7a12c558","line":285,"updated":"2015-05-20 09:10:54.000000000","message":"Ditto.","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"514db4dac9f371bc56a073b8ba9233ebb5b0c059","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                        node[\u0027ipv6\u0027].append(port_ipv6)"},{"line_number":283,"context_line":"                    break"},{"line_number":284,"context_line":"        if not (len(node[\u0027ipv4\u0027]) or len(node[\u0027ipv6\u0027])):"},{"line_number":285,"context_line":"            msg \u003d _(\u0027_get_iscsi_ip_addrs: no ip address found.\u0027)"},{"line_number":286,"context_line":"            LOG.error(msg)"},{"line_number":287,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_8bbf63a9","line":285,"in_reply_to":"7a016987_7a12c558","updated":"2015-05-20 22:49:51.000000000","message":"Same.","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"63747745adbfa96c13816803ca8dc65347818d65","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        # Set for vdisk synchronization"},{"line_number":309,"context_line":"        self._vdisk_copy_in_progress \u003d set()"},{"line_number":310,"context_line":"        self._vdisk_copy_lock \u003d threading.Lock()"},{"line_number":311,"context_line":"        self._check_lock_interval \u003d 5"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def _get_node_data(self):"},{"line_number":314,"context_line":"        # Get storage system name and id"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_1a7631a4","line":311,"updated":"2015-05-20 09:10:54.000000000","message":"I think this one could be defined in __init__, since it is a constant and may be used elsewhere.","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"514db4dac9f371bc56a073b8ba9233ebb5b0c059","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        # Set for vdisk synchronization"},{"line_number":309,"context_line":"        self._vdisk_copy_in_progress \u003d set()"},{"line_number":310,"context_line":"        self._vdisk_copy_lock \u003d threading.Lock()"},{"line_number":311,"context_line":"        self._check_lock_interval \u003d 5"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def _get_node_data(self):"},{"line_number":314,"context_line":"        # Get storage system name and id"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_4b328b60","line":311,"in_reply_to":"7a016987_1a7631a4","updated":"2015-05-20 22:49:51.000000000","message":"From my perspective, I intend to set it during the storage init and keep __init__ clean. It\u0027s not late.","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"63747745adbfa96c13816803ca8dc65347818d65","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                                               ssh_cmd, out, err)"},{"line_number":362,"context_line":"            node \u003d {}"},{"line_number":363,"context_line":"            try:"},{"line_number":364,"context_line":"                node[\u0027id\u0027] \u003d node_data[\u0027id\u0027]"},{"line_number":365,"context_line":"                node[\u0027name\u0027] \u003d node_data[\u0027name\u0027]"},{"line_number":366,"context_line":"                node[\u0027IO_group\u0027] \u003d node_data[\u0027IO_group_id\u0027]"},{"line_number":367,"context_line":"                node[\u0027WWNN\u0027] \u003d node_data[\u0027WWNN\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_fa7a3587","line":364,"updated":"2015-05-20 09:10:54.000000000","message":"Use dict literals?","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"514db4dac9f371bc56a073b8ba9233ebb5b0c059","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                                               ssh_cmd, out, err)"},{"line_number":362,"context_line":"            node \u003d {}"},{"line_number":363,"context_line":"            try:"},{"line_number":364,"context_line":"                node[\u0027id\u0027] \u003d node_data[\u0027id\u0027]"},{"line_number":365,"context_line":"                node[\u0027name\u0027] \u003d node_data[\u0027name\u0027]"},{"line_number":366,"context_line":"                node[\u0027IO_group\u0027] \u003d node_data[\u0027IO_group_id\u0027]"},{"line_number":367,"context_line":"                node[\u0027WWNN\u0027] \u003d node_data[\u0027WWNN\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_eb6ff728","line":364,"in_reply_to":"7a016987_fa7a3587","updated":"2015-05-20 22:49:51.000000000","message":"Thanks.","commit_id":"59308cce2944de38cd2d3c8508a58c0b92896862"},{"author":{"_account_id":14428,"name":"Bharat Kumar Kobagana","email":"bharath.kobagana@gmail.com","username":"bharatkk"},"change_message_id":"65bf6649cbdfd14a5750c55cb1901df428a7bc0e","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    @utils.synchronized(\u0027flashsystem-init-conn\u0027, external\u003dTrue)"},{"line_number":201,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":202,"context_line":"        \"\"\"Perform the necessary work so that an iSCSI connection can"},{"line_number":203,"context_line":"        be made."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        To be able to create an iSCSI connection from a given host to a"},{"line_number":206,"context_line":"        volume, we must:"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a016987_cce67543","line":203,"updated":"2015-05-22 04:37:26.000000000","message":"A multi line docstring has a one-line summary, less than 80 characters.\n\nhttp://docs.openstack.org/developer/hacking/#docstrings\nhttps://review.openstack.org/184820","commit_id":"bbd9d842573f1f8281f44ea49f9cdc588006de82"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"2f8ad5a6313fcf7e53c2275544f094b5c68e0020","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    @utils.synchronized(\u0027flashsystem-init-conn\u0027, external\u003dTrue)"},{"line_number":201,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":202,"context_line":"        \"\"\"Perform the necessary work so that an iSCSI connection can"},{"line_number":203,"context_line":"        be made."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        To be able to create an iSCSI connection from a given host to a"},{"line_number":206,"context_line":"        volume, we must:"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a016987_ec701174","line":203,"in_reply_to":"7a016987_cce67543","updated":"2015-05-22 04:45:56.000000000","message":"Done","commit_id":"bbd9d842573f1f8281f44ea49f9cdc588006de82"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2a62fc045bb4f7f97f197d329b1e2511571bb382","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                break"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        if node is None:"},{"line_number":291,"context_line":"            msg \u003d _(\u0027_get_iscsi_ip_addrs: No config node found.\u0027)"},{"line_number":292,"context_line":"            LOG.error(msg)"},{"line_number":293,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":294,"context_line":"        for port_data in generator:"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_aa3acbe5","line":291,"updated":"2015-06-04 20:29:02.000000000","message":"Method name should not be added to the exception message. \nThe same comment for the code below","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"62a9edc22f5d6688ab906546dd647e354591bf9b","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                break"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        if node is None:"},{"line_number":291,"context_line":"            msg \u003d _(\u0027_get_iscsi_ip_addrs: No config node found.\u0027)"},{"line_number":292,"context_line":"            LOG.error(msg)"},{"line_number":293,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":294,"context_line":"        for port_data in generator:"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_c2a70a4e","line":291,"in_reply_to":"3afb71cf_717ee6e5","updated":"2015-06-05 17:35:37.000000000","message":"Remove function name in LOG.error message but keep them in LOG.debug within function entry and exit.","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"98bced1d72e1730823df13297dc0d21c259524cd","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                break"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        if node is None:"},{"line_number":291,"context_line":"            msg \u003d _(\u0027_get_iscsi_ip_addrs: No config node found.\u0027)"},{"line_number":292,"context_line":"            LOG.error(msg)"},{"line_number":293,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":294,"context_line":"        for port_data in generator:"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_717ee6e5","line":291,"in_reply_to":"3afb71cf_a1af8993","updated":"2015-06-05 15:23:57.000000000","message":"Edwin, please don\u0027t mix debug/error logging and exception messages.\n\nThere are many cases when users/operators can see exception message and almost they do not know anything about \u0027_get_iscsi_ip_addrs\u0027  method or something else. \n\nYou can do something like:\nLog.debug(\u0027_get_iscsi_ip_addrs: No config node found.\u0027)\n\nraise exception.VolumeBackendAPIException(data\u003d_(\u0027No config node found...\u0027))\n\nOr even configure your logging to log function names (https://docs.python.org/2/library/logging.html#logrecord-attributes).","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"d73451886c7182f0575fc31257b28d0a3b74a35b","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                break"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        if node is None:"},{"line_number":291,"context_line":"            msg \u003d _(\u0027_get_iscsi_ip_addrs: No config node found.\u0027)"},{"line_number":292,"context_line":"            LOG.error(msg)"},{"line_number":293,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":294,"context_line":"        for port_data in generator:"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_a1af8993","line":291,"in_reply_to":"3afb71cf_aa3acbe5","updated":"2015-06-05 00:45:14.000000000","message":"It\u0027s useful for debugging as adding attributes in log. Ivan, please let me know your further concern. Thanks!","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2a62fc045bb4f7f97f197d329b1e2511571bb382","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":312,"context_line":"                if state in (\u0027configured\u0027, \u0027online\u0027) and speed !\u003d \u0027NONE\u0027:"},{"line_number":313,"context_line":"                    if port_ipv4:"},{"line_number":314,"context_line":"                        node[\u0027ipv4\u0027].append(port_ipv4)"},{"line_number":315,"context_line":"                    if port_ipv6:"},{"line_number":316,"context_line":"                        node[\u0027ipv6\u0027].append(port_ipv6)"},{"line_number":317,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_0d1a196f","line":314,"updated":"2015-06-04 20:29:02.000000000","message":"port_ipv4 and port_ipv6 could be un-initialized if exception occurred in lines #296-299","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"d73451886c7182f0575fc31257b28d0a3b74a35b","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                    raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":312,"context_line":"                if state in (\u0027configured\u0027, \u0027online\u0027) and speed !\u003d \u0027NONE\u0027:"},{"line_number":313,"context_line":"                    if port_ipv4:"},{"line_number":314,"context_line":"                        node[\u0027ipv4\u0027].append(port_ipv4)"},{"line_number":315,"context_line":"                    if port_ipv6:"},{"line_number":316,"context_line":"                        node[\u0027ipv6\u0027].append(port_ipv6)"},{"line_number":317,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_e130e1a0","line":314,"in_reply_to":"3afb71cf_0d1a196f","updated":"2015-06-05 00:45:14.000000000","message":"self._handle_keyerror has been inserted for this exception.","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2a62fc045bb4f7f97f197d329b1e2511571bb382","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        ssh_cmd \u003d [\u0027svcinfo\u0027, \u0027lssystem\u0027, \u0027-delim\u0027, \u0027!\u0027]"},{"line_number":354,"context_line":"        attributes \u003d self._execute_command_and_parse_attributes(ssh_cmd)"},{"line_number":355,"context_line":"        if not attributes or not (\u0027name\u0027 in attributes):"},{"line_number":356,"context_line":"            msg \u003d _(\u0027_get_node_data: Could not get system name.\u0027)"},{"line_number":357,"context_line":"            LOG.error(msg)"},{"line_number":358,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":359,"context_line":"        self._system_name \u003d attributes[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_0d48d95a","line":356,"updated":"2015-06-04 20:29:02.000000000","message":"Adding attributes to log could be very useful for troubleshooting","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"d73451886c7182f0575fc31257b28d0a3b74a35b","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        ssh_cmd \u003d [\u0027svcinfo\u0027, \u0027lssystem\u0027, \u0027-delim\u0027, \u0027!\u0027]"},{"line_number":354,"context_line":"        attributes \u003d self._execute_command_and_parse_attributes(ssh_cmd)"},{"line_number":355,"context_line":"        if not attributes or not (\u0027name\u0027 in attributes):"},{"line_number":356,"context_line":"            msg \u003d _(\u0027_get_node_data: Could not get system name.\u0027)"},{"line_number":357,"context_line":"            LOG.error(msg)"},{"line_number":358,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":359,"context_line":"        self._system_name \u003d attributes[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_c18165fd","line":356,"in_reply_to":"3afb71cf_0d48d95a","updated":"2015-06-05 00:45:14.000000000","message":"The message exposes the info exactly that\u0027s why I didn\u0027t add attribute here. Please let me know your further concern.","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"98bced1d72e1730823df13297dc0d21c259524cd","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        ssh_cmd \u003d [\u0027svcinfo\u0027, \u0027lssystem\u0027, \u0027-delim\u0027, \u0027!\u0027]"},{"line_number":354,"context_line":"        attributes \u003d self._execute_command_and_parse_attributes(ssh_cmd)"},{"line_number":355,"context_line":"        if not attributes or not (\u0027name\u0027 in attributes):"},{"line_number":356,"context_line":"            msg \u003d _(\u0027_get_node_data: Could not get system name.\u0027)"},{"line_number":357,"context_line":"            LOG.error(msg)"},{"line_number":358,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":359,"context_line":"        self._system_name \u003d attributes[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_f109b632","line":356,"in_reply_to":"3afb71cf_c18165fd","updated":"2015-06-05 15:23:57.000000000","message":"To troubleshoot if something went wrong it would be better to have something like:\n\n\nLOG.debug(\u0027 lssystem attributes:\u0027, attributes)\nmsg \u003d _(\u0027Could not get system name.\u0027)\nLOG.error(msg)\nraise exception.VolumeBackendAPIException(data\u003dmsg)","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"62a9edc22f5d6688ab906546dd647e354591bf9b","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        ssh_cmd \u003d [\u0027svcinfo\u0027, \u0027lssystem\u0027, \u0027-delim\u0027, \u0027!\u0027]"},{"line_number":354,"context_line":"        attributes \u003d self._execute_command_and_parse_attributes(ssh_cmd)"},{"line_number":355,"context_line":"        if not attributes or not (\u0027name\u0027 in attributes):"},{"line_number":356,"context_line":"            msg \u003d _(\u0027_get_node_data: Could not get system name.\u0027)"},{"line_number":357,"context_line":"            LOG.error(msg)"},{"line_number":358,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":359,"context_line":"        self._system_name \u003d attributes[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_523c0593","line":356,"in_reply_to":"3afb71cf_f109b632","updated":"2015-06-05 17:35:37.000000000","message":"Thanks! Added.","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2a62fc045bb4f7f97f197d329b1e2511571bb382","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        # support when open_access_enabled is off"},{"line_number":364,"context_line":"        if not attributes or not (\u0027open_access_enabled\u0027 in attributes) or ("},{"line_number":365,"context_line":"                attributes[\u0027open_access_enabled\u0027] !\u003d \u0027off\u0027):"},{"line_number":366,"context_line":"            msg \u003d _(\u0027_get_node_data: open_access_enabled is not off.\u0027)"},{"line_number":367,"context_line":"            LOG.error(msg)"},{"line_number":368,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":369,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_2d6275d9","line":366,"updated":"2015-06-04 20:29:02.000000000","message":"The same as above","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"d73451886c7182f0575fc31257b28d0a3b74a35b","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        # support when open_access_enabled is off"},{"line_number":364,"context_line":"        if not attributes or not (\u0027open_access_enabled\u0027 in attributes) or ("},{"line_number":365,"context_line":"                attributes[\u0027open_access_enabled\u0027] !\u003d \u0027off\u0027):"},{"line_number":366,"context_line":"            msg \u003d _(\u0027_get_node_data: open_access_enabled is not off.\u0027)"},{"line_number":367,"context_line":"            LOG.error(msg)"},{"line_number":368,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":369,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_6179912f","line":366,"in_reply_to":"3afb71cf_2d6275d9","updated":"2015-06-05 00:45:14.000000000","message":"See above.","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2a62fc045bb4f7f97f197d329b1e2511571bb382","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        ssh_cmd \u003d [\u0027svcinfo\u0027, \u0027lsmdiskgrp\u0027, \u0027-bytes\u0027, \u0027-delim\u0027, \u0027!\u0027, pool]"},{"line_number":373,"context_line":"        attributes \u003d self._execute_command_and_parse_attributes(ssh_cmd)"},{"line_number":374,"context_line":"        if not attributes:"},{"line_number":375,"context_line":"            msg \u003d _(\u0027_get_node_data: Unable to parse attributes\u0027)"},{"line_number":376,"context_line":"            LOG.error(msg)"},{"line_number":377,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":378,"context_line":"        if not (\u0027status\u0027 in attributes) or ("}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_8d7289ac","line":375,"updated":"2015-06-04 20:29:02.000000000","message":"The same as above","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"d73451886c7182f0575fc31257b28d0a3b74a35b","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        ssh_cmd \u003d [\u0027svcinfo\u0027, \u0027lsmdiskgrp\u0027, \u0027-bytes\u0027, \u0027-delim\u0027, \u0027!\u0027, pool]"},{"line_number":373,"context_line":"        attributes \u003d self._execute_command_and_parse_attributes(ssh_cmd)"},{"line_number":374,"context_line":"        if not attributes:"},{"line_number":375,"context_line":"            msg \u003d _(\u0027_get_node_data: Unable to parse attributes\u0027)"},{"line_number":376,"context_line":"            LOG.error(msg)"},{"line_number":377,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":378,"context_line":"        if not (\u0027status\u0027 in attributes) or ("}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_018f7d24","line":375,"in_reply_to":"3afb71cf_8d7289ac","updated":"2015-06-05 00:45:14.000000000","message":"See above.","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2a62fc045bb4f7f97f197d329b1e2511571bb382","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        if \u0027iSCSI\u0027 \u003d\u003d self._protocol and \u0027initiator\u0027 in connector:"},{"line_number":433,"context_line":"            valid \u003d True"},{"line_number":434,"context_line":"        if not valid:"},{"line_number":435,"context_line":"            msg \u003d (_LE(\u0027The connector does not contain the \u0027"},{"line_number":436,"context_line":"                       \u0027required information: initiator is missing\u0027))"},{"line_number":437,"context_line":"            LOG.error(msg)"},{"line_number":438,"context_line":"            raise exception.InvalidConnectorException(missing\u003d("}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_adf2e504","line":435,"updated":"2015-06-04 20:29:02.000000000","message":"No need \u0027()\u0027 for _LE","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"d73451886c7182f0575fc31257b28d0a3b74a35b","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        if \u0027iSCSI\u0027 \u003d\u003d self._protocol and \u0027initiator\u0027 in connector:"},{"line_number":433,"context_line":"            valid \u003d True"},{"line_number":434,"context_line":"        if not valid:"},{"line_number":435,"context_line":"            msg \u003d (_LE(\u0027The connector does not contain the \u0027"},{"line_number":436,"context_line":"                       \u0027required information: initiator is missing\u0027))"},{"line_number":437,"context_line":"            LOG.error(msg)"},{"line_number":438,"context_line":"            raise exception.InvalidConnectorException(missing\u003d("}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_e1bea1d3","line":435,"in_reply_to":"3afb71cf_adf2e504","updated":"2015-06-05 00:45:14.000000000","message":"I have noted it and will clean it in code cleanup in L-2 for all flashsystem code. https://blueprints.launchpad.net/cinder/+spec/ibm-flashsystem-iscsi-cleanup. Thanks!","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"62a9edc22f5d6688ab906546dd647e354591bf9b","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        if \u0027iSCSI\u0027 \u003d\u003d self._protocol and \u0027initiator\u0027 in connector:"},{"line_number":433,"context_line":"            valid \u003d True"},{"line_number":434,"context_line":"        if not valid:"},{"line_number":435,"context_line":"            msg \u003d (_LE(\u0027The connector does not contain the \u0027"},{"line_number":436,"context_line":"                       \u0027required information: initiator is missing\u0027))"},{"line_number":437,"context_line":"            LOG.error(msg)"},{"line_number":438,"context_line":"            raise exception.InvalidConnectorException(missing\u003d("}],"source_content_type":"text/x-python","patch_set":43,"id":"3afb71cf_c21dcabe","line":435,"in_reply_to":"3afb71cf_e1bea1d3","updated":"2015-06-05 17:35:37.000000000","message":"Done","commit_id":"4d65e6981678f297893cd9ebd7657096c5da0702"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"683a5f21ab114c36999ff0650651f6019bc45855","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        return {\u0027driver_volume_type\u0027: type_str, \u0027data\u0027: properties}"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @utils.synchronized(\u0027flashsystem-init-conn\u0027, external\u003dTrue)"},{"line_number":200,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":201,"context_line":"        \"\"\"Perform work so that an iSCSI connection can be made."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3afb71cf_4fde936e","line":199,"updated":"2015-06-06 04:20:58.000000000","message":"Do we really need the local file locks?","commit_id":"f220f6092485fa2b534c7a46bc38ae606f54cccd"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"c65c1eda92ceb5eec840fc38c376e277e0b9f678","unresolved":false,"context_lines":[{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        return {\u0027driver_volume_type\u0027: type_str, \u0027data\u0027: properties}"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @utils.synchronized(\u0027flashsystem-init-conn\u0027, external\u003dTrue)"},{"line_number":200,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":201,"context_line":"        \"\"\"Perform work so that an iSCSI connection can be made."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"3afb71cf_b760b936","line":199,"in_reply_to":"3afb71cf_4fde936e","updated":"2015-06-06 15:49:18.000000000","message":"Done","commit_id":"f220f6092485fa2b534c7a46bc38ae606f54cccd"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"db6d8088c64373289d38fcc6eca70610d1da2ff0","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from cinder import exception"},{"line_number":35,"context_line":"from cinder.i18n import _, _LE, _LW"},{"line_number":36,"context_line":"from cinder import utils"},{"line_number":37,"context_line":"import cinder.volume.driver"},{"line_number":38,"context_line":"from cinder.volume.drivers.ibm import flashsystem as fscommon"},{"line_number":39,"context_line":"from cinder.volume.drivers.san import san"}],"source_content_type":"text/x-python","patch_set":50,"id":"3afb71cf_5aaaccd5","line":36,"updated":"2015-06-06 17:11:43.000000000","message":"unused import","commit_id":"1faacbb1b297d52340b8eabb7a9ed2c3223f5f64"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"454ec88ff2eaa07f85c1d85403e6227721f266c9","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from cinder import exception"},{"line_number":35,"context_line":"from cinder.i18n import _, _LE, _LW"},{"line_number":36,"context_line":"from cinder import utils"},{"line_number":37,"context_line":"import cinder.volume.driver"},{"line_number":38,"context_line":"from cinder.volume.drivers.ibm import flashsystem as fscommon"},{"line_number":39,"context_line":"from cinder.volume.drivers.san import san"}],"source_content_type":"text/x-python","patch_set":50,"id":"3afb71cf_862b4d82","line":36,"in_reply_to":"3afb71cf_5aaaccd5","updated":"2015-06-07 02:56:52.000000000","message":"Done. Thanks!","commit_id":"1faacbb1b297d52340b8eabb7a9ed2c3223f5f64"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"04028997a179cd58923364dd7929406e54e3e947","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                     \"flashsystem_connection_protocol: \""},{"line_number":76,"context_line":"                     \"valid value(s) are %(enabled)s.\")"},{"line_number":77,"context_line":"                   % {\u0027prot\u0027: params[\u0027protocol\u0027],"},{"line_number":78,"context_line":"                      \u0027enabled\u0027: self._protocol})"},{"line_number":79,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Check if iscsi_ip is set when protocol is iSCSI"}],"source_content_type":"text/x-python","patch_set":50,"id":"3afb71cf_95a015f6","line":78,"updated":"2015-06-06 19:18:19.000000000","message":"Would you consider logging this message for better debugging experience?","commit_id":"1faacbb1b297d52340b8eabb7a9ed2c3223f5f64"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"454ec88ff2eaa07f85c1d85403e6227721f266c9","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                     \"flashsystem_connection_protocol: \""},{"line_number":76,"context_line":"                     \"valid value(s) are %(enabled)s.\")"},{"line_number":77,"context_line":"                   % {\u0027prot\u0027: params[\u0027protocol\u0027],"},{"line_number":78,"context_line":"                      \u0027enabled\u0027: self._protocol})"},{"line_number":79,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        # Check if iscsi_ip is set when protocol is iSCSI"}],"source_content_type":"text/x-python","patch_set":50,"id":"3afb71cf_6620519c","line":78,"in_reply_to":"3afb71cf_95a015f6","updated":"2015-06-07 02:56:52.000000000","message":"I modified the message. Please let me know your concern. Thanks!","commit_id":"1faacbb1b297d52340b8eabb7a9ed2c3223f5f64"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"04028997a179cd58923364dd7929406e54e3e947","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        if params[\u0027protocol\u0027] \u003d\u003d \u0027iSCSI\u0027 and params[\u0027iscsi_ip\u0027] \u003d\u003d \u0027None\u0027:"},{"line_number":83,"context_line":"            msg \u003d (_(\"iscsi_ip_address must be set when \""},{"line_number":84,"context_line":"                     \"using protocol \u0027iSCSI\u0027.\")"},{"line_number":85,"context_line":"                   % {\u0027iscsi_ip\u0027: params[\u0027iscsi_ip\u0027]})"},{"line_number":86,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _create_host(self, connector):"}],"source_content_type":"text/x-python","patch_set":50,"id":"3afb71cf_75a59902","line":85,"updated":"2015-06-06 19:18:19.000000000","message":"Would you consider logging this message for better debugging experience?","commit_id":"1faacbb1b297d52340b8eabb7a9ed2c3223f5f64"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"454ec88ff2eaa07f85c1d85403e6227721f266c9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        if params[\u0027protocol\u0027] \u003d\u003d \u0027iSCSI\u0027 and params[\u0027iscsi_ip\u0027] \u003d\u003d \u0027None\u0027:"},{"line_number":83,"context_line":"            msg \u003d (_(\"iscsi_ip_address must be set when \""},{"line_number":84,"context_line":"                     \"using protocol \u0027iSCSI\u0027.\")"},{"line_number":85,"context_line":"                   % {\u0027iscsi_ip\u0027: params[\u0027iscsi_ip\u0027]})"},{"line_number":86,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _create_host(self, connector):"}],"source_content_type":"text/x-python","patch_set":50,"id":"3afb71cf_462555a9","line":85,"in_reply_to":"3afb71cf_75a59902","updated":"2015-06-07 02:56:52.000000000","message":"I modified the message. Please let me know your concern. Thanks!","commit_id":"1faacbb1b297d52340b8eabb7a9ed2c3223f5f64"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44f245e5ec5ba126fa01eb92755afc170f606d54","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":383,"context_line":"        if not (\u0027status\u0027 in attributes) or ("},{"line_number":384,"context_line":"                attributes[\u0027status\u0027] \u003d\u003d \u0027offline\u0027):"},{"line_number":385,"context_line":"            msg \u003d (_(\u0027Array does not exist or is offline.\u0027"},{"line_number":386,"context_line":"                     \u0027Current status of array is %ds.\u0027)"},{"line_number":387,"context_line":"                   % attributes[\u0027status\u0027])"},{"line_number":388,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":51,"id":"3afb71cf_8ded8227","line":385,"updated":"2015-06-08 18:26:39.000000000","message":"Need trailing space so it doesn\u0027t end up \"offline.Current\".","commit_id":"bdcb6f2d3ff2fac822db6095afc938634c6b4e7b"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"8e53504c9f8ca154aac8390f57d7e51cee399ada","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":383,"context_line":"        if not (\u0027status\u0027 in attributes) or ("},{"line_number":384,"context_line":"                attributes[\u0027status\u0027] \u003d\u003d \u0027offline\u0027):"},{"line_number":385,"context_line":"            msg \u003d (_(\u0027Array does not exist or is offline.\u0027"},{"line_number":386,"context_line":"                     \u0027Current status of array is %ds.\u0027)"},{"line_number":387,"context_line":"                   % attributes[\u0027status\u0027])"},{"line_number":388,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":51,"id":"3afb71cf_d7764ed6","line":385,"in_reply_to":"3afb71cf_8ded8227","updated":"2015-06-09 07:55:52.000000000","message":"Done. Sorry for the carelessness.","commit_id":"bdcb6f2d3ff2fac822db6095afc938634c6b4e7b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44f245e5ec5ba126fa01eb92755afc170f606d54","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                        \u0027iscsi_name\u0027: node_data[\u0027iscsi_name\u0027],"},{"line_number":416,"context_line":"                        \u0027config_node\u0027: node_data[\u0027config_node\u0027],"},{"line_number":417,"context_line":"                        \u0027ipv4\u0027: [],"},{"line_number":418,"context_line":"                        \u0027ipv6\u0027: []}"},{"line_number":419,"context_line":"                if node[\u0027status\u0027] \u003d\u003d \u0027online\u0027:"},{"line_number":420,"context_line":"                    self._storage_nodes[node[\u0027id\u0027]] \u003d node"},{"line_number":421,"context_line":"            except KeyError:"}],"source_content_type":"text/x-python","patch_set":51,"id":"3afb71cf_2d4d6e3e","line":418,"updated":"2015-06-08 18:26:39.000000000","message":"Guidelines recommend having a trailing comma with the closing bracket on the next line. Not worth an update in and of itself, but if updating anyway please add that.\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"bdcb6f2d3ff2fac822db6095afc938634c6b4e7b"},{"author":{"_account_id":12516,"name":"Edwin Wang","email":"edwin.wang@cn.ibm.com","username":"edwin.wang"},"change_message_id":"8e53504c9f8ca154aac8390f57d7e51cee399ada","unresolved":false,"context_lines":[{"line_number":415,"context_line":"                        \u0027iscsi_name\u0027: node_data[\u0027iscsi_name\u0027],"},{"line_number":416,"context_line":"                        \u0027config_node\u0027: node_data[\u0027config_node\u0027],"},{"line_number":417,"context_line":"                        \u0027ipv4\u0027: [],"},{"line_number":418,"context_line":"                        \u0027ipv6\u0027: []}"},{"line_number":419,"context_line":"                if node[\u0027status\u0027] \u003d\u003d \u0027online\u0027:"},{"line_number":420,"context_line":"                    self._storage_nodes[node[\u0027id\u0027]] \u003d node"},{"line_number":421,"context_line":"            except KeyError:"}],"source_content_type":"text/x-python","patch_set":51,"id":"3afb71cf_77331a15","line":418,"in_reply_to":"3afb71cf_2d4d6e3e","updated":"2015-06-09 07:55:52.000000000","message":"Done. Thanks a lot!","commit_id":"bdcb6f2d3ff2fac822db6095afc938634c6b4e7b"}]}
