)]}'
{"cinder/tests/unit/volume/drivers/inspur/instorage/test_common.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":43,"context_line":"from cinder.volume import volume_types"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"},{"line_number":46,"context_line":"    import FakeInStorage"},{"line_number":47,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"},{"line_number":48,"context_line":"    import FakeInStorageMCSISCSIDriver"},{"line_number":49,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_e96a2db1","line":46,"updated":"2017-11-14 19:42:30.000000000","message":"Classes should not be imported, only modules. So just import fakes and use them as fakes.FakeInStorage, fakes.MCS_POOLS, etc.","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"}],"cinder/tests/unit/volume/drivers/inspur/instorage/test_helper_routines.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder.volume.drivers.inspur.instorage import instorage_common"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"},{"line_number":29,"context_line":"    import FakeInStorage"},{"line_number":30,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"},{"line_number":31,"context_line":"    import FakeInStorageMCSISCSIDriver"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_e9f90dc8","line":29,"updated":"2017-11-14 19:42:30.000000000","message":"Only import modules.","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"}],"cinder/tests/unit/volume/drivers/inspur/instorage/test_iscsi_driver.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from cinder.volume import volume_types"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"},{"line_number":35,"context_line":"    import FakeInStorage"},{"line_number":36,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"},{"line_number":37,"context_line":"    import FakeInStorageMCSISCSIDriver"},{"line_number":38,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_49d70125","line":35,"updated":"2017-11-14 19:42:30.000000000","message":"Only import modules.","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"}],"cinder/tests/unit/volume/drivers/inspur/instorage/test_replication.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from cinder.volume import volume_types"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"},{"line_number":42,"context_line":"    import FakeInStorage"},{"line_number":43,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"},{"line_number":44,"context_line":"    import FakeInStorageMCSISCSIDriver"},{"line_number":45,"context_line":"from cinder.tests.unit.volume.drivers.inspur.instorage.fakes\\"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_a99f955d","line":42,"updated":"2017-11-14 19:42:30.000000000","message":"Import only modules.","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self.driver._get_instorage_config()"},{"line_number":224,"context_line":"        self.assertEqual(self.driver._assistant,"},{"line_number":225,"context_line":"                         self.driver._local_backend_assistant)"},{"line_number":226,"context_line":"        self.assertEqual(self.driver._replica_enabled, False)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        self.driver._get_instorage_config()"},{"line_number":229,"context_line":"        self.assertEqual(self.driver._replica_target, self.rep_target)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_e9cc6d6b","line":226,"range":{"start_line":226,"start_character":13,"end_line":226,"end_character":24},"updated":"2017-11-14 19:42:30.000000000","message":"Should be assertFalse","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        self.assertEqual(self.driver._replica_enabled, False)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        self.driver._get_instorage_config()"},{"line_number":229,"context_line":"        self.assertEqual(self.driver._replica_target, self.rep_target)"},{"line_number":230,"context_line":"        self.assertEqual(self.driver._replica_enabled, True)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        self.driver._active_backend_id \u003d self.rep_target[\u0027backend_id\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_09eb49b0","line":229,"range":{"start_line":229,"start_character":13,"end_line":229,"end_character":24},"updated":"2017-11-14 19:42:30.000000000","message":"Make sure assertEqual args are in the order of (expected_value, actual_value).","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        self.driver._get_instorage_config()"},{"line_number":229,"context_line":"        self.assertEqual(self.driver._replica_target, self.rep_target)"},{"line_number":230,"context_line":"        self.assertEqual(self.driver._replica_enabled, True)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        self.driver._active_backend_id \u003d self.rep_target[\u0027backend_id\u0027]"},{"line_number":233,"context_line":"        self.driver._get_instorage_config()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_89c17931","line":230,"range":{"start_line":230,"start_character":13,"end_line":230,"end_character":24},"updated":"2017-11-14 19:42:30.000000000","message":"assertTrue","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        self.driver._get_instorage_config()"},{"line_number":234,"context_line":"        self.assertEqual(self.driver._assistant,"},{"line_number":235,"context_line":"                         self.driver._aux_backend_assistant)"},{"line_number":236,"context_line":"        self.assertEqual(self.driver._replica_enabled, True)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        self.driver._active_backend_id \u003d None"},{"line_number":239,"context_line":"        self.driver._get_instorage_config()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_89d619f1","line":236,"range":{"start_line":236,"start_character":13,"end_line":236,"end_character":24},"updated":"2017-11-14 19:42:30.000000000","message":"assertTrue","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"}],"cinder/tests/unit/volume/drivers/test_instorage.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"839402c53784c8d8ea5fb577a39d8488c01695a9","unresolved":false,"context_lines":[{"line_number":1305,"context_line":"            min_size\u003dself._driver.configuration.ssh_min_pool_conn,"},{"line_number":1306,"context_line":"            max_size\u003dself._driver.configuration.ssh_max_pool_conn)"},{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"    @mock.patch.object(random, \u0027randint\u0027, mock.Mock(return_value\u003d0))"},{"line_number":1309,"context_line":"    @mock.patch.object(ssh_utils, \u0027SSHPool\u0027)"},{"line_number":1310,"context_line":"    @mock.patch.object(processutils, \u0027ssh_execute\u0027)"},{"line_number":1311,"context_line":"    def test_run_ssh_fail_to_secondary_ip(self, mock_ssh_execute,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_9ab2c793","line":1308,"range":{"start_line":1308,"start_character":23,"end_line":1308,"end_character":41},"updated":"2017-09-13 21:43:18.000000000","message":"Use a fixed value here rather than a random number in unit tests.","commit_id":"b6162128d9708f9715d5073d4e12118643944191"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"a4a933d2af572ba3016f2d3a06d836e1f9da1b8d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                           \u0027instorage_mcs_volpool_name\u0027: [\u0027openstack\u0027],"},{"line_number":76,"context_line":"                           \u0027instorage_mcs_localcopy_timeout\u0027: 20,"},{"line_number":77,"context_line":"                           \u0027instorage_mcs_localcopy_rate\u0027: 49,"},{"line_number":78,"context_line":"                           # \u0027instorage_mcs_multipath_enabled\u0027: False,"},{"line_number":79,"context_line":"                           \u0027instorage_mcs_allow_tenant_qos\u0027: True}"},{"line_number":80,"context_line":"        wwpns \u003d [\u00271234567890123456\u0027, \u00276543210987654321\u0027]"},{"line_number":81,"context_line":"        initiator \u003d \u0027test.initiator.%s\u0027 % 123456"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f515b1d_e9a78d4f","line":78,"range":{"start_line":78,"start_character":26,"end_line":78,"end_character":70},"updated":"2017-10-09 16:29:35.000000000","message":"remove this instead of comment it","commit_id":"f66ef7671f10d433c69bd70a5f1e1b8616778ce5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"64dde2dc63a3911d1df9eb2fe3892c9673edd799","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return MCS_POOLS[0]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class InStorageMCSISCSIDriverTestCase(test.TestCase):"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @mock.patch.object(greenthread, \u0027sleep\u0027)"},{"line_number":68,"context_line":"    def setUp(self, mock_sleep):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_5369a7f5","line":65,"updated":"2017-11-03 10:51:36.000000000","message":"It could be good to split test cases in several files like it did for driver implementation","commit_id":"f1e4dbf18d3682fe11587020825f73316b30cf1c"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"815fad5b25d3b6e3cb5f00a705ee2f7ae541f47a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return MCS_POOLS[0]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class InStorageMCSISCSIDriverTestCase(test.TestCase):"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @mock.patch.object(greenthread, \u0027sleep\u0027)"},{"line_number":68,"context_line":"    def setUp(self, mock_sleep):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_76621819","line":65,"in_reply_to":"3f4b6375_5369a7f5","updated":"2017-11-20 07:40:56.000000000","message":"Done","commit_id":"f1e4dbf18d3682fe11587020825f73316b30cf1c"}],"cinder/volume/drivers/inspur/instorage/instorage_common.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"570a2d6c60f0ab0b38e600d8ea11bfd9555e4b28","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    cfg.BoolOpt(\u0027instorage_mcs_vol_nofmtdisk\u0027,"},{"line_number":74,"context_line":"                default\u003dFalse,"},{"line_number":75,"context_line":"                help\u003d\u0027Specifies that the volume not be formatted during \u0027"},{"line_number":76,"context_line":"                     \u0027creation.\u0027),"},{"line_number":77,"context_line":"    cfg.IntOpt(\u0027instorage_mcs_vol_grainsize\u0027,"},{"line_number":78,"context_line":"               default\u003d256,"},{"line_number":79,"context_line":"               help\u003d\u0027Storage system grain size parameter for volumes \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_faf30b72","line":76,"updated":"2017-09-13 21:41:56.000000000","message":"Are volumes wiped upon deletion?  If not, it may be required to format the volume during creation to prevent data leaking from previous volumes to new volumes.","commit_id":"b6162128d9708f9715d5073d4e12118643944191"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"570a2d6c60f0ab0b38e600d8ea11bfd9555e4b28","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    cfg.IntOpt(\u0027instorage_mcs_vol_grainsize\u0027,"},{"line_number":78,"context_line":"               default\u003d256,"},{"line_number":79,"context_line":"               help\u003d\u0027Storage system grain size parameter for volumes \u0027"},{"line_number":80,"context_line":"                    \u0027(32/64/128/256)\u0027),"},{"line_number":81,"context_line":"    cfg.IntOpt(\u0027instorage_mcs_vol_rsize\u0027,"},{"line_number":82,"context_line":"               default\u003d2,"},{"line_number":83,"context_line":"               min\u003d-1, max\u003d100,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_ba5fc370","line":80,"updated":"2017-09-13 21:41:56.000000000","message":"You can add min\u003d32, max\u003d256 here to help prevent setting invalid sizes in cinder.conf.\n\ndo_setup() or check_for_setup_error() should detect whether this is set to invalid values (i.e. 100).","commit_id":"b6162128d9708f9715d5073d4e12118643944191"},{"author":{"_account_id":18529,"name":"Dongdong Pei","email":"peidongdong121@163.com","username":"dongdongpei"},"change_message_id":"9d2fba4cdf58f1d4f790e546c6b31782500c2ad6","unresolved":false,"context_lines":[{"line_number":114,"context_line":"               default\u003dNone,"},{"line_number":115,"context_line":"               help\u003d\u0027Specifies secondary management IP or hostname to be \u0027"},{"line_number":116,"context_line":"                    \u0027used if san_ip is invalid or becomes inaccessible.\u0027),"},{"line_number":117,"context_line":"    cfg.ListOpt(\u0027instorage_mcs_volpool_name\u0027,"},{"line_number":118,"context_line":"                default\u003d[\u0027volpool\u0027],"},{"line_number":119,"context_line":"                help\u003d\u0027Comma separated list of storage system storage \u0027"},{"line_number":120,"context_line":"                     \u0027pools for volumes.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_ac11c9ae","line":117,"updated":"2017-09-14 02:23:39.000000000","message":"instorage_mcs_volpool_names is better","commit_id":"b6162128d9708f9715d5073d4e12118643944191"},{"author":{"_account_id":18529,"name":"Dongdong Pei","email":"peidongdong121@163.com","username":"dongdongpei"},"change_message_id":"9d2fba4cdf58f1d4f790e546c6b31782500c2ad6","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def _get_backend_pools(self):"},{"line_number":269,"context_line":"        if not self._active_backend_id:"},{"line_number":270,"context_line":"            return self.configuration.instorage_mcs_volpool_name"},{"line_number":271,"context_line":"        elif not self._secondary_pools:"},{"line_number":272,"context_line":"            self._secondary_pools \u003d [self._replica_target.get(\u0027pool_name\u0027)]"},{"line_number":273,"context_line":"        return self._secondary_pools"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_6c23e106","line":270,"updated":"2017-09-14 02:23:39.000000000","message":"instorage_mcs_volpool_names is better","commit_id":"b6162128d9708f9715d5073d4e12118643944191"},{"author":{"_account_id":18529,"name":"Dongdong Pei","email":"peidongdong121@163.com","username":"dongdongpei"},"change_message_id":"9d2fba4cdf58f1d4f790e546c6b31782500c2ad6","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                % {\u0027prot\u0027: self.protocol})"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        required_flags \u003d [\u0027san_ip\u0027, \u0027san_ssh_port\u0027, \u0027san_login\u0027,"},{"line_number":311,"context_line":"                          \u0027instorage_mcs_volpool_name\u0027]"},{"line_number":312,"context_line":"        for flag in required_flags:"},{"line_number":313,"context_line":"            if not self.configuration.safe_get(flag):"},{"line_number":314,"context_line":"                raise exception.InvalidInput(reason\u003d_(\u0027%s is not set.\u0027) % flag)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_4c226502","line":311,"updated":"2017-09-14 02:23:39.000000000","message":"instorage_mcs_volpool_names is better","commit_id":"b6162128d9708f9715d5073d4e12118643944191"},{"author":{"_account_id":18529,"name":"Dongdong Pei","email":"peidongdong121@163.com","username":"dongdongpei"},"change_message_id":"9d2fba4cdf58f1d4f790e546c6b31782500c2ad6","unresolved":false,"context_lines":[{"line_number":344,"context_line":"                              \u0027and not able to use \u0027"},{"line_number":345,"context_line":"                              \u0027instorage_san_secondary_ip since it is \u0027"},{"line_number":346,"context_line":"                              \u0027not configured.\u0027)"},{"line_number":347,"context_line":"                    raise"},{"line_number":348,"context_line":"        try:"},{"line_number":349,"context_line":"            return self._ssh_execute(self.sshpool, command,"},{"line_number":350,"context_line":"                                     check_exit_code, attempts)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_6c2081b1","line":347,"updated":"2017-09-14 02:23:39.000000000","message":"Raise what?","commit_id":"b6162128d9708f9715d5073d4e12118643944191"},{"author":{"_account_id":18529,"name":"Dongdong Pei","email":"peidongdong121@163.com","username":"dongdongpei"},"change_message_id":"9d2fba4cdf58f1d4f790e546c6b31782500c2ad6","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                    LOG.warning(\u0027Not able to use \u0027"},{"line_number":367,"context_line":"                                \u0027instorage_san_secondary_ip since it is \u0027"},{"line_number":368,"context_line":"                                \u0027not configured.\u0027)"},{"line_number":369,"context_line":"                    raise"},{"line_number":370,"context_line":"            except Exception:"},{"line_number":371,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":372,"context_line":"                    LOG.error(\"Error running SSH command: %s\","}],"source_content_type":"text/x-python","patch_set":2,"id":"5f2577a7_0c1b3d81","line":369,"updated":"2017-09-14 02:23:39.000000000","message":"Raise what?","commit_id":"b6162128d9708f9715d5073d4e12118643944191"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        else:"},{"line_number":209,"context_line":"            admin_context \u003d ctxt.elevated()"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        volumes \u003d objects.VolumeList.get_all_by_host(admin_context, self.host)"},{"line_number":212,"context_line":"        for volume in volumes:"},{"line_number":213,"context_line":"            try:"},{"line_number":214,"context_line":"                new_op \u003d self._assistant.get_vdisk_copy_ids(volume.name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_18408c35","line":211,"range":{"start_line":211,"start_character":37,"end_line":211,"end_character":52},"updated":"2017-10-10 10:26:34.000000000","message":"We typically discourage getting info from the DB from inside drivers. Can you add comments about why this and the looping call is needed?","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        # Check that we have the system ID information"},{"line_number":287,"context_line":"        if self._state[\u0027system_name\u0027] is None:"},{"line_number":288,"context_line":"            exception_msg \u003d (_(\u0027Unable to determine system name.\u0027))"},{"line_number":289,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_msg)"},{"line_number":290,"context_line":"        if self._state[\u0027system_id\u0027] is None:"},{"line_number":291,"context_line":"            exception_msg \u003d (_(\u0027Unable to determine system id.\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_bd696a8c","line":288,"range":{"start_line":288,"start_character":28,"end_line":288,"end_character":29},"updated":"2017-10-10 10:26:34.000000000","message":"Unnecessary outer ()","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            exception_msg \u003d (_(\u0027Unable to determine system name.\u0027))"},{"line_number":289,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_msg)"},{"line_number":290,"context_line":"        if self._state[\u0027system_id\u0027] is None:"},{"line_number":291,"context_line":"            exception_msg \u003d (_(\u0027Unable to determine system id.\u0027))"},{"line_number":292,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dexception_msg)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        # Make sure we have at least one node configured"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_7d09b2db","line":291,"range":{"start_line":291,"start_character":28,"end_line":291,"end_character":29},"updated":"2017-10-10 10:26:34.000000000","message":"Same.","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                            command,"},{"line_number":399,"context_line":"                            check_exit_code\u003dcheck_exit_code)"},{"line_number":400,"context_line":"                    except Exception as e:"},{"line_number":401,"context_line":"                        LOG.exception(\u0027Error has occurred: %s\u0027, e)"},{"line_number":402,"context_line":"                        last_exception \u003d e"},{"line_number":403,"context_line":"                        greenthread.sleep(self.DEFAULT_GR_SLEEP)"},{"line_number":404,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_bd172aee","line":401,"range":{"start_line":401,"start_character":62,"end_line":401,"end_character":65},"updated":"2017-10-10 10:26:34.000000000","message":"Don\u0027t format an exception into a LOG.exception. LOG.exception will already output the details of the in scope exception.","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":799,"context_line":"                self._assistant.change_vdisk_iogrp(volume.name,"},{"line_number":800,"context_line":"                                                   self._state, (new, old))"},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"        LOG.debug(\u0027enter: retype: id\u003d%(id)s, new_type\u003d%(new_type)s,\u0027"},{"line_number":803,"context_line":"                  \u0027diff\u003d%(diff)s, host\u003d%(host)s\u0027, {\u0027id\u0027: volume.id,"},{"line_number":804,"context_line":"                                                   \u0027new_type\u0027: new_type,"},{"line_number":805,"context_line":"                                                   \u0027diff\u0027: diff,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_5daa7685","line":802,"range":{"start_line":802,"start_character":67,"end_line":802,"end_character":68},"updated":"2017-10-10 10:26:34.000000000","message":"Would be good to add a space on the end here.","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"            raise NotImplementedError()"},{"line_number":1200,"context_line":""},{"line_number":1201,"context_line":"        LOG.debug(\"Updating group.\")"},{"line_number":1202,"context_line":"        return None, None, None"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":"    def create_group_snapshot(self, ctxt, group_snapshot, snapshots):"},{"line_number":1205,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_ddd9c622","line":1202,"updated":"2017-10-10 10:26:34.000000000","message":"Nothing needs to be done on the array side?","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":2342,"context_line":"                words \u003d value.split()"},{"line_number":2343,"context_line":"                if not (words and len(words) \u003d\u003d 2 and words[0] \u003d\u003d \u0027\u003cis\u003e\u0027):"},{"line_number":2344,"context_line":"                    LOG.error(\u0027Replication must be specified as \u0027"},{"line_number":2345,"context_line":"                              \u0027\\\u0027\u003cis\u003e True\\\u0027 or \\\u0027\u003cis\u003e False\\\u0027.\u0027)"},{"line_number":2346,"context_line":"                del words[0]"},{"line_number":2347,"context_line":"                value \u003d words[0]"},{"line_number":2348,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_fd7242e3","line":2345,"range":{"start_line":2345,"start_character":42,"end_line":2345,"end_character":43},"updated":"2017-10-10 10:26:34.000000000","message":"Just use double quotes for the outer string quotation so you don\u0027t need to escape these.","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":2806,"context_line":"            elif mapping_attrs[\u0027status\u0027] \u003d\u003d \u0027stopped\u0027:"},{"line_number":2807,"context_line":"                self.ssh.prestartlcconsistgrp(lc_consistgrp)"},{"line_number":2808,"context_line":"            elif mapping_attrs[\u0027status\u0027] !\u003d \u0027preparing\u0027:"},{"line_number":2809,"context_line":"                msg \u003d (_(\u0027Unexpected mapping status %(status)s for mapping\u0027"},{"line_number":2810,"context_line":"                         \u0027%(id)s. Attributes: %(attr)s.\u0027) %"},{"line_number":2811,"context_line":"                       {\u0027status\u0027: mapping_attrs[\u0027status\u0027],"},{"line_number":2812,"context_line":"                        \u0027id\u0027: lc_consistgrp,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_5d139667","line":2809,"range":{"start_line":2809,"start_character":74,"end_line":2809,"end_character":75},"updated":"2017-10-10 10:26:34.000000000","message":"Missing trailing space so this doesn\u0027t run together with the next line.","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    cfg.BoolOpt(\u0027instorage_mcs_multihostmap_enabled\u0027,"},{"line_number":66,"context_line":"                default\u003dTrue,"},{"line_number":67,"context_line":"                help\u003d\u0027Enable Multihostmap for volume.\u0027,"},{"line_number":68,"context_line":"                deprecated_for_removal\u003dTrue),"},{"line_number":69,"context_line":"    cfg.BoolOpt(\u0027instorage_mcs_allow_tenant_qos\u0027,"},{"line_number":70,"context_line":"                default\u003dFalse,"},{"line_number":71,"context_line":"                help\u003d\u0027Allow tenants to specify QOS on create\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_89e05998","line":68,"updated":"2017-11-14 19:42:30.000000000","message":"Can you explain why this is being added with immediate deprecation?","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":1352,"context_line":"        for volume in rep_volumes:"},{"line_number":1353,"context_line":"            rep_type \u003d self._get_volume_replicated_type(ctxt, volume)"},{"line_number":1354,"context_line":"            replica_obj \u003d self._get_replica_obj(rep_type)"},{"line_number":1355,"context_line":"            tgt_volume \u003d instorage_const.REPLICA_AUX_VOL_PREFIX + \\"},{"line_number":1356,"context_line":"                volume.name"},{"line_number":1357,"context_line":"            rep_info \u003d self._assistant.get_relationship_info(tgt_volume)"},{"line_number":1358,"context_line":"            if not rep_info:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_04d570b9","line":1355,"range":{"start_line":1355,"start_character":66,"end_line":1355,"end_character":67},"updated":"2017-11-14 19:42:30.000000000","message":"Please don\u0027t use \\ for multiple lines. Wrap in () instead.","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":1415,"context_line":"            LOG.warning(\u0027Fail to establish partnership in backend. \u0027"},{"line_number":1416,"context_line":"                        \u0027error\u003d%(ex)s\u0027, {\u0027error\u0027: ex})"},{"line_number":1417,"context_line":"        for volume in volumes:"},{"line_number":1418,"context_line":"            tgt_volume \u003d instorage_const.REPLICA_AUX_VOL_PREFIX + \\"},{"line_number":1419,"context_line":"                volume.name"},{"line_number":1420,"context_line":"            rep_info \u003d self._assistant.get_relationship_info(tgt_volume)"},{"line_number":1421,"context_line":"            if not rep_info:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_24ebcc79","line":1418,"range":{"start_line":1418,"start_character":66,"end_line":1418,"end_character":67},"updated":"2017-11-14 19:42:30.000000000","message":"Same.","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bf3e16aa5dd8bd61a3e0e0c36061fdae26800fc0","unresolved":false,"context_lines":[{"line_number":111,"context_line":"CONF.register_opts(instorage_mcs_opts)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class InStorageMCSCommonDriver(driver.VolumeDriver, san.SanDriver):"},{"line_number":115,"context_line":"    \"\"\"Inspur InStorage MCS abstract base class for iSCSI/FC volume drivers."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_a2b430d2","line":114,"range":{"start_line":114,"start_character":31,"end_line":114,"end_character":50},"updated":"2017-11-15 15:52:29.000000000","message":"This is already inherited from sandriver.  Not sure, why are you doing the dual inheritance like this?","commit_id":"e7362103c67579bf7caf1437afc3d4518923c8a6"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bf3e16aa5dd8bd61a3e0e0c36061fdae26800fc0","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                  \u0027new\u0027: self.active_ip})"},{"line_number":384,"context_line":"        return True"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def ensure_export(self, ctxt, volume):"},{"line_number":387,"context_line":"        \"\"\"Check that the volume exists on the storage.\"\"\""},{"line_number":388,"context_line":"        vol_name \u003d self._get_target_vol(volume)"},{"line_number":389,"context_line":"        volume_defined \u003d self._assistant.is_vdisk_defined(vol_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_2243a0b1","line":386,"range":{"start_line":386,"start_character":8,"end_line":386,"end_character":21},"updated":"2017-11-15 15:52:29.000000000","message":"You\u0027re not returning a model update here?  The point of ensure export is to update/retrieve the current model info.","commit_id":"e7362103c67579bf7caf1437afc3d4518923c8a6"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bf3e16aa5dd8bd61a3e0e0c36061fdae26800fc0","unresolved":false,"context_lines":[{"line_number":392,"context_line":"            LOG.error(\u0027ensure_export: Volume %s not found on storage.\u0027,"},{"line_number":393,"context_line":"                      volume[\u0027name\u0027])"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"    def create_export(self, ctxt, volume, connector):"},{"line_number":396,"context_line":"        pass"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    def remove_export(self, ctxt, volume):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_c2804cc2","line":395,"range":{"start_line":395,"start_character":8,"end_line":395,"end_character":21},"updated":"2017-11-15 15:52:29.000000000","message":"Same as above, you create the export and don\u0027t return any info.  The manager is expecting a model update back here.\n\nI looked and it doesn\u0027t appear your iscsi or FC classes override implement this either.","commit_id":"e7362103c67579bf7caf1437afc3d4518923c8a6"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bf3e16aa5dd8bd61a3e0e0c36061fdae26800fc0","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        if opts[\u0027qos\u0027]:"},{"line_number":421,"context_line":"            self._assistant.add_vdisk_qos(volume.name, opts[\u0027qos\u0027])"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        model_update \u003d None"},{"line_number":424,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":425,"context_line":"        rep_type \u003d self._get_volume_replicated_type(ctxt, volume)"},{"line_number":426,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_6202b83f","line":423,"range":{"start_line":423,"start_character":8,"end_line":423,"end_character":27},"updated":"2017-11-15 15:52:29.000000000","message":"How does this possibly work?  You have a model update of None?  The only thing below that adds to the is the replication-status and that\u0027s not going to help things much.\n\nI think I\u0027ll stop here and have a look at your CI, maybe I\u0027m missing something.","commit_id":"e7362103c67579bf7caf1437afc3d4518923c8a6"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bf3e16aa5dd8bd61a3e0e0c36061fdae26800fc0","unresolved":false,"context_lines":[{"line_number":2864,"context_line":"                    wait_for_copy \u003d True"},{"line_number":2865,"context_line":""},{"line_number":2866,"context_line":"        if not wait_for_copy and rmlcmap_failed_e is not None:"},{"line_number":2867,"context_line":"            raise rmlcmap_failed_e"},{"line_number":2868,"context_line":""},{"line_number":2869,"context_line":"        if not wait_for_copy or not len(mapping_ids):"},{"line_number":2870,"context_line":"            raise loopingcall.LoopingCallDone(retvalue\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_a2ad509c","line":2867,"range":{"start_line":2867,"start_character":18,"end_line":2867,"end_character":34},"updated":"2017-11-15 15:52:29.000000000","message":"Please form and raise a proper exceetipin here.  You should have a clear message and raise.","commit_id":"e7362103c67579bf7caf1437afc3d4518923c8a6"}],"cinder/volume/drivers/inspur/instorage/instorage_fc.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":52,"context_line":"from cinder import interface"},{"line_number":53,"context_line":"from cinder.volume import driver"},{"line_number":54,"context_line":"from cinder.volume.drivers.inspur.instorage import ("},{"line_number":55,"context_line":"    instorage_common as instorage_common)"},{"line_number":56,"context_line":"from cinder.zonemanager import utils as fczm_utils"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_98835c57","line":55,"range":{"start_line":55,"start_character":21,"end_line":55,"end_character":40},"updated":"2017-10-10 10:26:34.000000000","message":"You don\u0027t need this. You are aliasing to the same name.","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"7a2a5232bcfb581f557ad0df2a7d22434d7420dd","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":"        LOG.debug(\u0027enter: initialize_connection: volume %(vol)s with connector\u0027"},{"line_number":100,"context_line":"                  \u0027 %(conn)s\u0027, {\u0027vol\u0027: volume.id, \u0027conn\u0027: connector})"},{"line_number":101,"context_line":"        volume_name \u003d self._get_target_vol(volume)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # Check if a host object is defined for this host name"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_d671f345","line":100,"updated":"2017-10-25 18:37:21.000000000","message":"instead of doing an entry LOG, and another LOG at exit of this function, why not use the trace utils?\n\nhttps://github.com/openstack/cinder/blob/master/cinder/utils.py#L844\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/hpe/hpe_3par_fc.py#L243-L245","commit_id":"f1e4dbf18d3682fe11587020825f73316b30cf1c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"7a2a5232bcfb581f557ad0df2a7d22434d7420dd","unresolved":false,"context_lines":[{"line_number":224,"context_line":"           automatically by this driver when mappings are created)"},{"line_number":225,"context_line":"        \"\"\""},{"line_number":226,"context_line":"        LOG.debug(\u0027enter: terminate_connection: volume %(vol)s with connector\u0027"},{"line_number":227,"context_line":"                  \u0027 %(conn)s\u0027, {\u0027vol\u0027: volume.id, \u0027conn\u0027: connector})"},{"line_number":228,"context_line":"        vol_name \u003d self._get_target_vol(volume)"},{"line_number":229,"context_line":"        info \u003d {}"},{"line_number":230,"context_line":"        if connector is not None and \u0027host\u0027 in connector:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_428d3e30","line":227,"updated":"2017-10-25 18:37:21.000000000","message":"@utils.trace instead","commit_id":"f1e4dbf18d3682fe11587020825f73316b30cf1c"}],"cinder/volume/drivers/inspur/instorage/instorage_iscsi.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"from cinder.volume.drivers.inspur.instorage import ("},{"line_number":58,"context_line":"    instorage_common as instorage_common)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_f86ff08f","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":40},"updated":"2017-10-10 10:26:34.000000000","message":"Not needed.","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"dd855769cd85dbb61ae4d6c6643a9ed7c04d4640","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        if chap_enabled and chap_secret is None:"},{"line_number":114,"context_line":"            chap_secret \u003d self._assistant.add_chap_secret_to_host(host_name)"},{"line_number":115,"context_line":"        elif not chap_enabled and chap_secret:"},{"line_number":116,"context_line":"            LOG.warning(\u0027CHAP secret exists for host but CHAP is \u0027"},{"line_number":117,"context_line":"                        \u0027disabled.\u0027)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        multihostmap \u003d self.configuration.instorage_mcs_multihostmap_enabled"},{"line_number":120,"context_line":"        lun_id \u003d self._assistant.map_vol_to_host(volume_name, host_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_396c6935","line":117,"range":{"start_line":116,"start_character":0,"end_line":117,"end_character":36},"updated":"2017-10-10 13:05:19.000000000","message":"one line","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"dd855769cd85dbb61ae4d6c6643a9ed7c04d4640","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        LOG.debug(\u0027leave: initialize_connection:\\n volume: %(vol)s\\n \u0027"},{"line_number":139,"context_line":"                  \u0027connector: %(conn)s\\n properties: %(prop)s\u0027,"},{"line_number":140,"context_line":"                  {\u0027vol\u0027: volume.id, \u0027conn\u0027: connector,"},{"line_number":141,"context_line":"                   \u0027prop\u0027: properties})"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        return {\u0027driver_volume_type\u0027: \u0027iscsi\u0027, \u0027data\u0027: properties, }"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_f94ed1bf","line":141,"range":{"start_line":140,"start_character":0,"end_line":141,"end_character":39},"updated":"2017-10-10 13:05:19.000000000","message":"same","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"dd855769cd85dbb61ae4d6c6643a9ed7c04d4640","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def _get_single_iscsi_data(self, volume, connector, lun_id, chap_secret):"},{"line_number":146,"context_line":"        LOG.debug(\u0027enter: _get_single_iscsi_data: volume %(vol)s with \u0027"},{"line_number":147,"context_line":"                  \u0027connector %(conn)s lun_id %(lun_id)s\u0027,"},{"line_number":148,"context_line":"                  {\u0027vol\u0027: volume.id, \u0027conn\u0027: connector,"},{"line_number":149,"context_line":"                   \u0027lun_id\u0027: lun_id})"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        volume_name \u003d self._get_target_vol(volume)"},{"line_number":152,"context_line":"        volume_attributes \u003d self._assistant.get_vdisk_attributes(volume_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_59604533","line":149,"range":{"start_line":148,"start_character":0,"end_line":149,"end_character":37},"updated":"2017-10-10 13:05:19.000000000","message":"same","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            msg \u003d (_(\u0027_get_multi_iscsi_data: Failed to \u0027"},{"line_number":232,"context_line":"                     \u0027get port ip because of exception: \u0027"},{"line_number":233,"context_line":"                     \u0027%s.\u0027) % six.text_type(ex))"},{"line_number":234,"context_line":"            LOG.exception(msg)"},{"line_number":235,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        properties[\u0027target_iqns\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_1821ac4e","line":234,"range":{"start_line":234,"start_character":16,"end_line":234,"end_character":25},"updated":"2017-10-10 10:26:34.000000000","message":"Make this LOG.error. Or don\u0027t include the exception in the formatted string.","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"dd855769cd85dbb61ae4d6c6643a9ed7c04d4640","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        @coordination.synchronized(\u0027instorage-host\u0027 + self._state[\u0027system_id\u0027]"},{"line_number":281,"context_line":"                                   + host)"},{"line_number":282,"context_line":"        def _do_terminate_connection_locked():"},{"line_number":283,"context_line":"            return self._do_terminate_connection(volume, connector,"},{"line_number":284,"context_line":"                                                 **kwargs)"},{"line_number":285,"context_line":"        return _do_terminate_connection_locked()"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def _do_terminate_connection(self, volume, connector, **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_19d76dc2","line":284,"range":{"start_line":283,"start_character":0,"end_line":284,"end_character":58},"updated":"2017-10-10 13:05:19.000000000","message":"same","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"dd855769cd85dbb61ae4d6c6643a9ed7c04d4640","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                self._assistant.delete_host(host_name)"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        LOG.debug(\u0027leave: terminate_connection: volume %(vol)s with \u0027"},{"line_number":326,"context_line":"                  \u0027connector %(conn)s\u0027, {\u0027vol\u0027: volume.id,"},{"line_number":327,"context_line":"                                         \u0027conn\u0027: connector})"},{"line_number":328,"context_line":"        return info"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_d9e0b599","line":327,"range":{"start_line":326,"start_character":0,"end_line":327,"end_character":60},"updated":"2017-10-10 13:05:19.000000000","message":"same","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"7a2a5232bcfb581f557ad0df2a7d22434d7420dd","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":98,"context_line":"        \"\"\"Perform necessary work to make an iSCSI connection.\"\"\""},{"line_number":99,"context_line":"        LOG.debug(\u0027enter: initialize_connection: volume %(vol)s with connector\u0027"},{"line_number":100,"context_line":"                  \u0027 %(conn)s\u0027, {\u0027vol\u0027: volume.id, \u0027conn\u0027: connector})"},{"line_number":101,"context_line":"        volume_name \u003d self._get_target_vol(volume)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # Check if a host object is defined for this host name"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_f09ab05f","line":100,"updated":"2017-10-25 18:37:21.000000000","message":"@utils.trace decorator instead","commit_id":"f1e4dbf18d3682fe11587020825f73316b30cf1c"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"5c7ffae37601180981f40a121ef8c6b1379e10f9","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":98,"context_line":"        \"\"\"Perform necessary work to make an iSCSI connection.\"\"\""},{"line_number":99,"context_line":"        LOG.debug(\u0027enter: initialize_connection: volume %(vol)s with connector\u0027"},{"line_number":100,"context_line":"                  \u0027 %(conn)s\u0027, {\u0027vol\u0027: volume.id, \u0027conn\u0027: connector})"},{"line_number":101,"context_line":"        volume_name \u003d self._get_target_vol(volume)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        # Check if a host object is defined for this host name"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_91bc86bc","line":100,"in_reply_to":"3f4b6375_f09ab05f","updated":"2017-11-20 08:04:08.000000000","message":"Done","commit_id":"f1e4dbf18d3682fe11587020825f73316b30cf1c"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bb1b9c825d55bbc8908606ae9d00e5a2fd429bee","unresolved":false,"context_lines":[{"line_number":39,"context_line":"2. Create new host on the storage system if it does not yet exist"},{"line_number":40,"context_line":"3. Map the volume to the host if it is not already done"},{"line_number":41,"context_line":"4. Return the connection information for relevant nodes"},{"line_number":42,"context_line":"(in theproper I/O group)"},{"line_number":43,"context_line":"\"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_38de4c11","line":42,"range":{"start_line":42,"start_character":4,"end_line":42,"end_character":13},"updated":"2017-11-14 19:42:30.000000000","message":"the proper","commit_id":"47eaac823c267f52f1e9121ee8c73463f3c860ce"}],"cinder/volume/drivers/inspur/instorage/replication.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"dd855769cd85dbb61ae4d6c6643a9ed7c04d4640","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def _partnership_validate_create(self, client, remote_name, remote_ip):"},{"line_number":102,"context_line":"        try:"},{"line_number":103,"context_line":"            partnership_info \u003d client.get_partnership_info("},{"line_number":104,"context_line":"                remote_name)"},{"line_number":105,"context_line":"            if not partnership_info:"},{"line_number":106,"context_line":"                candidate_info \u003d client.get_partnershipcandidate_info("},{"line_number":107,"context_line":"                    remote_name)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_b9dcd918","line":104,"range":{"start_line":103,"start_character":12,"end_line":104,"end_character":28},"updated":"2017-10-10 13:05:19.000000000","message":"this can be in one line","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                client.chpartnership(partnership_info[\u0027id\u0027])"},{"line_number":115,"context_line":"        except Exception:"},{"line_number":116,"context_line":"            msg \u003d (_(\u0027Unable to establish the partnership with \u0027"},{"line_number":117,"context_line":"                     \u0027the InStorage cluster %s.\u0027), remote_name)"},{"line_number":118,"context_line":"            LOG.error(msg)"},{"line_number":119,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_58b5e4ed","line":117,"range":{"start_line":117,"start_character":49,"end_line":117,"end_character":50},"updated":"2017-10-10 10:26:34.000000000","message":"You\u0027ll need to use % to format the string. Otherwise you are passing a tuple in to the logger and the exception instantiation.","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"dd855769cd85dbb61ae4d6c6643a9ed7c04d4640","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                      \u0027progress\u0027: secondary[\u0027sync_progress\u0027]})"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        extended \u003d \u0027%s. %s\u0027 % (extended1, extended2)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        if (status, extended) !\u003d orig:"},{"line_number":250,"context_line":"            return {\u0027replication_status\u0027: status,"},{"line_number":251,"context_line":"                    \u0027replication_extended_status\u0027: extended}"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_5904c57b","line":248,"updated":"2017-10-10 13:05:19.000000000","message":"move orig over here for comprehension","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                                                             copy_id)"},{"line_number":309,"context_line":"        else:"},{"line_number":310,"context_line":"            msg \u003d (_(\u0027Unable to promote replica to primary for volume %s.\u0027"},{"line_number":311,"context_line":"                     \u0027 No secondary copy available.\u0027),"},{"line_number":312,"context_line":"                   volume.id)"},{"line_number":313,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f4e5783_78a540b5","line":311,"range":{"start_line":311,"start_character":53,"end_line":311,"end_character":54},"updated":"2017-10-10 10:26:34.000000000","message":"%","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"64dde2dc63a3911d1df9eb2fe3892c9673edd799","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                                              local_system_name, local_ip)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class InStorageMCSReplication(object):"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def __init__(self, driver, replication_target\u003dNone):"},{"line_number":138,"context_line":"        self.driver \u003d driver"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_33474b7a","line":135,"updated":"2017-11-03 10:51:36.000000000","message":"Do we really need this class?","commit_id":"f1e4dbf18d3682fe11587020825f73316b30cf1c"},{"author":{"_account_id":25648,"name":"wang yong","email":"yongwc@foxmail.com","username":"wangyong"},"change_message_id":"815fad5b25d3b6e3cb5f00a705ee2f7ae541f47a","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                                              local_system_name, local_ip)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class InStorageMCSReplication(object):"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def __init__(self, driver, replication_target\u003dNone):"},{"line_number":138,"context_line":"        self.driver \u003d driver"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_b67f40aa","line":135,"in_reply_to":"3f4b6375_33474b7a","updated":"2017-11-20 07:40:56.000000000","message":"Done","commit_id":"f1e4dbf18d3682fe11587020825f73316b30cf1c"}],"releasenotes/notes/bp-inspur-instorage-driver-40371862c9559238.yaml":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"a4a933d2af572ba3016f2d3a06d836e1f9da1b8d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    New Cinder volume driver for Inspur InStorage"},{"line_number":5,"context_line":"    The new driver supports both FC and iSCSI"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7f515b1d_69695df6","line":5,"range":{"start_line":5,"start_character":44,"end_line":5,"end_character":45},"updated":"2017-10-09 16:29:35.000000000","message":"add .","commit_id":"f66ef7671f10d433c69bd70a5f1e1b8616778ce5"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"df829eaecd3be35376f7e1696cc5b599c12a72ba","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    New Cinder volume driver for Inspur InStorage,"},{"line_number":5,"context_line":"    The new driver supports both FC and iSCSI."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f4e5783_788e602f","line":4,"range":{"start_line":4,"start_character":49,"end_line":4,"end_character":50},"updated":"2017-10-10 10:26:34.000000000","message":"End with a period, or make \"The\" lowercase.","commit_id":"d4a5463de6303aa441288b65bf15404090eda52f"}]}
