)]}'
{"cinder/tests/targets/test_cxt_driver.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"85b8dbc437befe1b11709bba2c98f00000ee06a0","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        def _fake_execute(*args, **kwargs):"},{"line_number":120,"context_line":"            return \u0027\u0027, \u0027\u0027"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        self.stubs.Set(utils,"},{"line_number":123,"context_line":"                       \u0027execute\u0027,"},{"line_number":124,"context_line":"                       _fake_execute)"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_c2f0a369","line":122,"updated":"2015-02-04 02:50:44.000000000","message":"You\u0027re using a combination of mock and mox. We\u0027ve made a decision to do newer tests in mock:\n\nhttps://github.com/openstack/cinder/blob/master/HACKING.rst#creating-unit-tests\n\nYou can accomplish the same thing in mock via decorator...\n\n@mock.patch.object(self.target, \u0027execute\u0027)\ndef test_create_iscsi_target(self, mocked_execute):\n    mocked_execute.return_value \u003d \u0027\u0027, \u0027\u0027\n\nor with a context manager:\n\nwith @mock.patch.object(self.target, \u0027execute\u0027) as mocked_exc:\n    mocked_exc.return_value \u003d \u0027\u0027, \u0027\u0027\n\n\nhttp://www.voidspace.org.uk/python/mock/\nhttp://www.voidspace.org.uk/python/mock/patch.html#patch-object","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"50cffe9209151f02c2b3a359b07e7e406f58eb82","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        def _fake_execute(*args, **kwargs):"},{"line_number":120,"context_line":"            return \u0027\u0027, \u0027\u0027"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        self.stubs.Set(utils,"},{"line_number":123,"context_line":"                       \u0027execute\u0027,"},{"line_number":124,"context_line":"                       _fake_execute)"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_ca4991b8","line":122,"in_reply_to":"da86d52c_c2f0a369","updated":"2015-02-04 09:55:10.000000000","message":"Done","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"85b8dbc437befe1b11709bba2c98f00000ee06a0","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        def _fake_execute(*args, **kwargs):"},{"line_number":172,"context_line":"            return \u0027\u0027, \u0027\u0027"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self.stubs.Set(utils,"},{"line_number":175,"context_line":"                       \u0027execute\u0027,"},{"line_number":176,"context_line":"                       _fake_execute)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_c5d50d1d","line":173,"updated":"2015-02-04 02:50:44.000000000","message":"You\u0027re mocking the same stuff like utils.execute and self.target._get_target in every test case. Just put these in the setup. Example...\n\n\ndef setUp(self):\n    execute_patcher \u003d mock.patch.object(utils, \u0027execute\u0027)\n    execute_patcher.return_value \u003d \u0027\u0027, \u0027\u0027\n    self.mock_execute \u003d execute_patcher.start()\n    self.addCleanup(execute_patcher)","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"50cffe9209151f02c2b3a359b07e7e406f58eb82","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        def _fake_execute(*args, **kwargs):"},{"line_number":172,"context_line":"            return \u0027\u0027, \u0027\u0027"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self.stubs.Set(utils,"},{"line_number":175,"context_line":"                       \u0027execute\u0027,"},{"line_number":176,"context_line":"                       _fake_execute)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_0acf292b","line":173,"in_reply_to":"da86d52c_c5d50d1d","updated":"2015-02-04 09:55:10.000000000","message":"Done","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"eaec407b3a83488f7ff27b22988a549f64211549","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        def _fake_execute(*args, **kwargs):"},{"line_number":172,"context_line":"            return \u0027\u0027, \u0027\u0027"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self.stubs.Set(utils,"},{"line_number":175,"context_line":"                       \u0027execute\u0027,"},{"line_number":176,"context_line":"                       _fake_execute)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_98445cb8","line":174,"updated":"2015-02-04 03:56:45.000000000","message":"Another example if you want to change the return_value in each test case...\n\ndef setUp(self):\n    self.execute_patcher \u003d mock.patch.object(utils, \u0027execute\u0027)\n    self.mock_execute \u003d self.execute_patcher.start()\n    self.addCleanup(self.execute_patcher)\n\ndef testcase1(self):\n    self.execute_patcher.return_value \u003d \u0027foo\u0027\n\ndef testcase2(self):\n    self.execute_patcher.return_value \u003d \u0027bar\u0027","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"50cffe9209151f02c2b3a359b07e7e406f58eb82","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        def _fake_execute(*args, **kwargs):"},{"line_number":172,"context_line":"            return \u0027\u0027, \u0027\u0027"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self.stubs.Set(utils,"},{"line_number":175,"context_line":"                       \u0027execute\u0027,"},{"line_number":176,"context_line":"                       _fake_execute)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_4ad5a1b7","line":174,"in_reply_to":"da86d52c_98445cb8","updated":"2015-02-04 09:55:10.000000000","message":"Done","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dd9881119be750fd0f38480c06e894852c94e873","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                                           self.cxt_subdir))"},{"line_number":38,"context_line":"        self.fake_id_1 \u003d \u0027ed2c1fd4-5fc0-11e4-aa15-123b93f75cba\u0027"},{"line_number":39,"context_line":"        self.fake_id_2 \u003d \u0027ed2c2222-5fc0-11e4-aa15-123b93f75cba\u0027"},{"line_number":40,"context_line":"        self.stubs.Set(self.configuration, \u0027safe_get\u0027, self.fake_safe_get)"},{"line_number":41,"context_line":"        self.target \u003d cxt.CxtAdm(root_helper\u003dutils.get_root_helper(),"},{"line_number":42,"context_line":"                                 configuration\u003dself.configuration)"},{"line_number":43,"context_line":"        self.testvol_1 \u003d\\"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_ded86020","line":40,"updated":"2015-02-04 18:21:29.000000000","message":"one more mox to get rid of.","commit_id":"9ef7b808c12248dae42dcd2e4c9087ea062c2313"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"dd9881119be750fd0f38480c06e894852c94e873","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        test_vol \u003d\\"},{"line_number":105,"context_line":"            \u0027iqn.2010-10.org.openstack:\u0027\\"},{"line_number":106,"context_line":"            \u0027volume-83c2e877-feed-46be-8435-77884fe55b45\u0027"},{"line_number":107,"context_line":"        with open(os.path.join(self.fake_volumes_dir, self.cxt_subdir,"},{"line_number":108,"context_line":"                               test_vol.split(\u0027:\u0027)[1]),"},{"line_number":109,"context_line":"                  \u0027wb\u0027) as tmp_file:"},{"line_number":110,"context_line":"            tmp_file.write(persist_file)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_5e339061","line":107,"updated":"2015-02-04 18:21:29.000000000","message":"Ideally since these are unit tests, this would be mocked. Unit tests should involve outside systems. (e.g. database, keystore, filesystem)","commit_id":"9ef7b808c12248dae42dcd2e4c9087ea062c2313"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7b64f50fbda646d88ec82b0340bc92dedb4e6f39","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.mock_execute \u003d self.exec_patcher.start()"},{"line_number":79,"context_line":"        self.addCleanup(self.exec_patcher.stop)"},{"line_number":80,"context_line":"        self._mock_config \u003d mock.patch.object(self.configuration, \u0027safe_get\u0027, side_effect\u003dself.fake_safe_get)"},{"line_number":81,"context_line":"        self.mock_get \u003d self._mock_config.start()"},{"line_number":82,"context_line":"        self.addCleanup(self.mock_get.stop)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def fake_safe_get(self, value):"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_ede2d49e","line":81,"updated":"2015-02-04 20:33:54.000000000","message":"I don\u0027t think you need to persist this on self. Just use a temporary variable and use that to pass the stop reference to addCleanup().","commit_id":"72835a3036c9fac647958769f459c5e0cb0c2f59"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7b64f50fbda646d88ec82b0340bc92dedb4e6f39","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                                                     \u00278435-77884fe55b45\u0027))"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def test_get_target_chap_auth(self):"},{"line_number":98,"context_line":"        with mock.patch.object(self.configuration, \u0027safe_get\u0027) as mocked_get:"},{"line_number":99,"context_line":"            persist_file \u003d\\"},{"line_number":100,"context_line":"                \u0027target:\\n\u0027\\"},{"line_number":101,"context_line":"                \u0027        TargetName\u003diqn.2010-10.org.openstack:volume-83c2e877-feed-46be-8435-77884fe55b45\\n\u0027\\"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_0d8e48d0","line":98,"updated":"2015-02-04 20:33:54.000000000","message":"This obscures the first mock you did in setUp()","commit_id":"72835a3036c9fac647958769f459c5e0cb0c2f59"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7b64f50fbda646d88ec82b0340bc92dedb4e6f39","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            test_vol \u003d\\"},{"line_number":108,"context_line":"                \u0027iqn.2010-10.org.openstack:\u0027\\"},{"line_number":109,"context_line":"                \u0027volume-83c2e877-feed-46be-8435-77884fe55b45\u0027"},{"line_number":110,"context_line":"            with open(os.path.join(self.fake_volumes_dir, self.cxt_subdir,"},{"line_number":111,"context_line":"                                   test_vol.split(\u0027:\u0027)[1]),"},{"line_number":112,"context_line":"                      \u0027wb\u0027) as tmp_file:"},{"line_number":113,"context_line":"                tmp_file.write(persist_file)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_ed7e54ae","line":110,"updated":"2015-02-04 20:33:54.000000000","message":"it\u0027s generally considered very bad practice to actually read/write files during a unit test. Instead, use a StringIO object to pass to _get_target_chap_auth() which will provide file-like semantics with the string content above.","commit_id":"72835a3036c9fac647958769f459c5e0cb0c2f59"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"73583cbb56f578fadb56ea9018f9d7aa2886b86b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.configuration.append_config_values \u003d mock.Mock(return_value\u003d0)"},{"line_number":35,"context_line":"        self.configuration.iscsi_ip_address \u003d \u002710.9.8.7\u0027"},{"line_number":36,"context_line":"        self.cxt_subdir \u003d cxt.CxtAdm.cxt_subdir"},{"line_number":37,"context_line":"        self.fake_volumes_dir \u003d tempfile.mkdtemp()"},{"line_number":38,"context_line":"        fileutils.ensure_tree(os.path.join(self.fake_volumes_dir,"},{"line_number":39,"context_line":"                                           self.cxt_subdir))"},{"line_number":40,"context_line":"        self.fake_id_1 \u003d \u0027ed2c1fd4-5fc0-11e4-aa15-123b93f75cba\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_1894bf41","line":37,"updated":"2015-02-05 02:17:43.000000000","message":"I\u0027m not sure what the point of actually creating this is. It\u0027s just directly path being passed around, verified, but is actually created.\n\nRegardless, this should be cleaned up after tests are done, and actually seems to only be used in two test cases, even though we\u0027re creating tmp directories for every test case.","commit_id":"19e64e80eb771cf5807e0c9dcd83fb31752cdb17"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"051d6b2dfcbbdc4acb009633b34d22d2ce8445c5","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.configuration.append_config_values \u003d mock.Mock(return_value\u003d0)"},{"line_number":35,"context_line":"        self.configuration.iscsi_ip_address \u003d \u002710.9.8.7\u0027"},{"line_number":36,"context_line":"        self.cxt_subdir \u003d cxt.CxtAdm.cxt_subdir"},{"line_number":37,"context_line":"        self.fake_volumes_dir \u003d tempfile.mkdtemp()"},{"line_number":38,"context_line":"        fileutils.ensure_tree(os.path.join(self.fake_volumes_dir,"},{"line_number":39,"context_line":"                                           self.cxt_subdir))"},{"line_number":40,"context_line":"        self.fake_id_1 \u003d \u0027ed2c1fd4-5fc0-11e4-aa15-123b93f75cba\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_832f363e","line":37,"in_reply_to":"da86d52c_1894bf41","updated":"2015-02-06 01:42:14.000000000","message":"Moving the creation of tempdir to __init__ causes extra issues. __init__ seems to be called twice for every test case, resulting in 12 temp directories. Keeping it in setUp, only results in one directory being created total (I\u0027ve verified this manually a couple of times). I\u0027m not that well versed with the testing framework, so maybe I am missing something here ?\n\nI\u0027ve also added a manual cleanup, so this should address your concern about leftover files.","commit_id":"19e64e80eb771cf5807e0c9dcd83fb31752cdb17"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"73583cbb56f578fadb56ea9018f9d7aa2886b86b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.fake_id_1 \u003d \u0027ed2c1fd4-5fc0-11e4-aa15-123b93f75cba\u0027"},{"line_number":41,"context_line":"        self.fake_id_2 \u003d \u0027ed2c2222-5fc0-11e4-aa15-123b93f75cba\u0027"},{"line_number":42,"context_line":"        self.target \u003d cxt.CxtAdm(root_helper\u003dutils.get_root_helper(),"},{"line_number":43,"context_line":"                                 configuration\u003dself.configuration)"},{"line_number":44,"context_line":"        self.testvol_1 \u003d\\"},{"line_number":45,"context_line":"            {\u0027project_id\u0027: self.fake_id_1,"},{"line_number":46,"context_line":"             \u0027name\u0027: \u0027testvol\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_581b97c9","line":43,"updated":"2015-02-05 02:17:43.000000000","message":"Big nitpick, but a lot of these static properties don\u0027t have to be set for every test case. You could have these global out of the test class or just set when the test class is initialized:\n\nclass TestCxtAdmDriver(test.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super(TestCxtAdmDriver, self).__init__(*args, *kwargs)\n        self.fake_id \u003d \u0027....\u0027\n        self.configuration.iscsi_ip_address \u003d \u002710.9.8.7\u0027\n        ...","commit_id":"19e64e80eb771cf5807e0c9dcd83fb31752cdb17"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"051d6b2dfcbbdc4acb009633b34d22d2ce8445c5","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.fake_id_1 \u003d \u0027ed2c1fd4-5fc0-11e4-aa15-123b93f75cba\u0027"},{"line_number":41,"context_line":"        self.fake_id_2 \u003d \u0027ed2c2222-5fc0-11e4-aa15-123b93f75cba\u0027"},{"line_number":42,"context_line":"        self.target \u003d cxt.CxtAdm(root_helper\u003dutils.get_root_helper(),"},{"line_number":43,"context_line":"                                 configuration\u003dself.configuration)"},{"line_number":44,"context_line":"        self.testvol_1 \u003d\\"},{"line_number":45,"context_line":"            {\u0027project_id\u0027: self.fake_id_1,"},{"line_number":46,"context_line":"             \u0027name\u0027: \u0027testvol\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_830816db","line":43,"in_reply_to":"da86d52c_581b97c9","updated":"2015-02-06 01:42:14.000000000","message":"Done","commit_id":"19e64e80eb771cf5807e0c9dcd83fb31752cdb17"}],"cinder/volume/targets/cxt.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"06e33b92be1c0d84ccf59aac505195f42d1f27a1","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            with open(volume_path, \u0027r\u0027) as f:"},{"line_number":115,"context_line":"                volume_conf \u003d f.read()"},{"line_number":116,"context_line":"        except Exception as e:"},{"line_number":117,"context_line":"            LOG.debug(\u0027Failed to open config for %(vol_id)s: %(e)s\u0027"},{"line_number":118,"context_line":"                      % {\u0027vol_id\u0027: vol_id, \u0027e\u0027: six.text_type(e)})"},{"line_number":119,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_652db78f","line":116,"updated":"2015-01-19 22:17:22.000000000","message":"Too general exception","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6dfe27b4604ae4ee8a717a084404b38259aa7836","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                   \u0027-c\u0027,"},{"line_number":150,"context_line":"                                   \u0027target\u003dALL\u0027,"},{"line_number":151,"context_line":"                                   run_as_root\u003dTrue)"},{"line_number":152,"context_line":"        LOG.debug(\"Targets prior to update: %s\" % out)"},{"line_number":153,"context_line":"        fileutils.ensure_tree(self.volumes_dir)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        vol_id \u003d name.split(\u0027:\u0027)[1]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_73902043","line":152,"updated":"2015-01-19 21:58:42.000000000","message":"Use comma instead of percent so string interpolation only happens if logging level is high enough.","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                   \u0027-c\u0027,"},{"line_number":150,"context_line":"                                   \u0027target\u003dALL\u0027,"},{"line_number":151,"context_line":"                                   run_as_root\u003dTrue)"},{"line_number":152,"context_line":"        LOG.debug(\"Targets prior to update: %s\" % out)"},{"line_number":153,"context_line":"        fileutils.ensure_tree(self.volumes_dir)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        vol_id \u003d name.split(\u0027:\u0027)[1]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_8849da68","line":152,"in_reply_to":"3a961159_53140450","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"06e33b92be1c0d84ccf59aac505195f42d1f27a1","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                   \u0027-c\u0027,"},{"line_number":150,"context_line":"                                   \u0027target\u003dALL\u0027,"},{"line_number":151,"context_line":"                                   run_as_root\u003dTrue)"},{"line_number":152,"context_line":"        LOG.debug(\"Targets prior to update: %s\" % out)"},{"line_number":153,"context_line":"        fileutils.ensure_tree(self.volumes_dir)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        vol_id \u003d name.split(\u0027:\u0027)[1]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_53140450","line":152,"in_reply_to":"3a961159_73902043","updated":"2015-01-19 22:17:22.000000000","message":"Agree","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                   \u0027-c\u0027,"},{"line_number":150,"context_line":"                                   \u0027target\u003dALL\u0027,"},{"line_number":151,"context_line":"                                   run_as_root\u003dTrue)"},{"line_number":152,"context_line":"        LOG.debug(\"Targets prior to update: %s\" % out)"},{"line_number":153,"context_line":"        fileutils.ensure_tree(self.volumes_dir)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        vol_id \u003d name.split(\u0027:\u0027)[1]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_a84e966c","line":152,"in_reply_to":"3a961159_73902043","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"06e33b92be1c0d84ccf59aac505195f42d1f27a1","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        f.write(volume_conf)"},{"line_number":180,"context_line":"        f.close()"},{"line_number":181,"context_line":"        LOG.debug((\u0027Created volume path %(vp)s,\\n\u0027"},{"line_number":182,"context_line":"                   \u0027content: %(vc)s\u0027),"},{"line_number":183,"context_line":"                  {\u0027vp\u0027: volume_path, \u0027vc\u0027: volume_conf})"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        old_persist_file \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_f304101b","line":182,"updated":"2015-01-19 22:17:22.000000000","message":"Second \u0027(\u0027 and \u0027)\u0027 are not needed","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        f.write(volume_conf)"},{"line_number":180,"context_line":"        f.close()"},{"line_number":181,"context_line":"        LOG.debug((\u0027Created volume path %(vp)s,\\n\u0027"},{"line_number":182,"context_line":"                   \u0027content: %(vc)s\u0027),"},{"line_number":183,"context_line":"                  {\u0027vp\u0027: volume_path, \u0027vc\u0027: volume_conf})"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        old_persist_file \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_e8589e33","line":182,"in_reply_to":"3a961159_f304101b","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"06e33b92be1c0d84ccf59aac505195f42d1f27a1","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        old_persist_file \u003d None"},{"line_number":186,"context_line":"        old_name \u003d kwargs.get(\u0027old_name\u0027, None)"},{"line_number":187,"context_line":"        if old_name is not None:"},{"line_number":188,"context_line":"            LOG.debug(\u0027Detected old persistence file for volume \u0027"},{"line_number":189,"context_line":"                      \u0027%{vol}s at %{old_name}s\u0027,"},{"line_number":190,"context_line":"                      {\u0027vol\u0027: vol_id, \u0027old_name\u0027: old_name})"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_c5058b11","line":187,"updated":"2015-01-19 22:17:22.000000000","message":"Could be simplified to:\nif old_name:","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        old_persist_file \u003d None"},{"line_number":186,"context_line":"        old_name \u003d kwargs.get(\u0027old_name\u0027, None)"},{"line_number":187,"context_line":"        if old_name is not None:"},{"line_number":188,"context_line":"            LOG.debug(\u0027Detected old persistence file for volume \u0027"},{"line_number":189,"context_line":"                      \u0027%{vol}s at %{old_name}s\u0027,"},{"line_number":190,"context_line":"                      {\u0027vol\u0027: vol_id, \u0027old_name\u0027: old_name})"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_283aa6c4","line":187,"in_reply_to":"3a961159_c5058b11","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"06e33b92be1c0d84ccf59aac505195f42d1f27a1","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                LOG.warning(_LW(\u0027Could not create target because \u0027"},{"line_number":209,"context_line":"                                \u0027it already exists for volume: %s\u0027), vol_id)"},{"line_number":210,"context_line":"                LOG.debug(\u0027Exception was: %s\u0027, e)"},{"line_number":211,"context_line":"                pass"},{"line_number":212,"context_line":"            else:"},{"line_number":213,"context_line":"                LOG.error(_LE(\"Failed to create iscsi target for volume \""},{"line_number":214,"context_line":"                              \"id:%(vol_id)s: %(e)s\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_132b5c96","line":211,"updated":"2015-01-19 22:17:22.000000000","message":"This is not needed","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6dfe27b4604ae4ee8a717a084404b38259aa7836","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                                   \u0027-c\u0027,"},{"line_number":224,"context_line":"                                   \u0027target\u003dALL\u0027,"},{"line_number":225,"context_line":"                                   run_as_root\u003dTrue)"},{"line_number":226,"context_line":"        LOG.debug(\"Targets after update: %s\" % out)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        iqn \u003d \u0027%s%s\u0027 % (self.iscsi_target_prefix, vol_id)"},{"line_number":229,"context_line":"        tid \u003d self._get_target(iqn)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_73de6012","line":226,"updated":"2015-01-19 21:58:42.000000000","message":"% \u003d\u003e ,","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                                   \u0027-c\u0027,"},{"line_number":224,"context_line":"                                   \u0027target\u003dALL\u0027,"},{"line_number":225,"context_line":"                                   run_as_root\u003dTrue)"},{"line_number":226,"context_line":"        LOG.debug(\"Targets after update: %s\" % out)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        iqn \u003d \u0027%s%s\u0027 % (self.iscsi_target_prefix, vol_id)"},{"line_number":229,"context_line":"        tid \u003d self._get_target(iqn)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_4847f24c","line":226,"in_reply_to":"3a961159_73de6012","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6dfe27b4604ae4ee8a717a084404b38259aa7836","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        if tid is None:"},{"line_number":231,"context_line":"            LOG.error(_LE(\"Failed to create iscsi target for volume \""},{"line_number":232,"context_line":"                          \"id:%(vol_id)s. Please verify your configuration \""},{"line_number":233,"context_line":"                          \"in %(volumes_dir)\u0027\") % {"},{"line_number":234,"context_line":"                      \u0027vol_id\u0027: vol_id,"},{"line_number":235,"context_line":"                      \u0027volumes_dir\u0027: volumes_dir, })"},{"line_number":236,"context_line":"            raise exception.NotFound()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_93e3ccd7","line":233,"updated":"2015-01-19 21:58:42.000000000","message":"% \u003d\u003e ,","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        if tid is None:"},{"line_number":231,"context_line":"            LOG.error(_LE(\"Failed to create iscsi target for volume \""},{"line_number":232,"context_line":"                          \"id:%(vol_id)s. Please verify your configuration \""},{"line_number":233,"context_line":"                          \"in %(volumes_dir)\u0027\") % {"},{"line_number":234,"context_line":"                      \u0027vol_id\u0027: vol_id,"},{"line_number":235,"context_line":"                      \u0027volumes_dir\u0027: volumes_dir, })"},{"line_number":236,"context_line":"            raise exception.NotFound()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_6844ae47","line":233,"in_reply_to":"3a961159_93e3ccd7","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"06e33b92be1c0d84ccf59aac505195f42d1f27a1","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            # this export has already been removed"},{"line_number":281,"context_line":"            self.show_target(iscsi_target, iqn\u003diqn)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        except Exception:"},{"line_number":284,"context_line":"            LOG.info(_LI(\"Skipping remove_export. No iscsi_target \""},{"line_number":285,"context_line":"                         \"is presently exported for volume: %s\"), volume[\u0027id\u0027])"},{"line_number":286,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_050f9330","line":283,"updated":"2015-01-19 22:17:22.000000000","message":"Could we handle more specific exception here?","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            # this export has already been removed"},{"line_number":281,"context_line":"            self.show_target(iscsi_target, iqn\u003diqn)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        except Exception:"},{"line_number":284,"context_line":"            LOG.info(_LI(\"Skipping remove_export. No iscsi_target \""},{"line_number":285,"context_line":"                         \"is presently exported for volume: %s\"), volume[\u0027id\u0027])"},{"line_number":286,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_8870faa8","line":283,"in_reply_to":"3a961159_050f9330","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6dfe27b4604ae4ee8a717a084404b38259aa7836","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        }"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def remove_iscsi_target(self, tid, lun, vol_id, vol_name, **kwargs):"},{"line_number":298,"context_line":"        LOG.info(_LI(\u0027Removing iscsi_target for: %s\u0027) % vol_id)"},{"line_number":299,"context_line":"        vol_uuid_file \u003d vol_name"},{"line_number":300,"context_line":"        volume_path \u003d os.path.join(self.volumes_dir, vol_uuid_file)"},{"line_number":301,"context_line":"        if not os.path.exists(volume_path):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_53008469","line":298,"updated":"2015-01-19 21:58:42.000000000","message":"% \u003d\u003e ,","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        }"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    def remove_iscsi_target(self, tid, lun, vol_id, vol_name, **kwargs):"},{"line_number":298,"context_line":"        LOG.info(_LI(\u0027Removing iscsi_target for: %s\u0027) % vol_id)"},{"line_number":299,"context_line":"        vol_uuid_file \u003d vol_name"},{"line_number":300,"context_line":"        volume_path \u003d os.path.join(self.volumes_dir, vol_uuid_file)"},{"line_number":301,"context_line":"        if not os.path.exists(volume_path):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_a875b698","line":298,"in_reply_to":"3a961159_53008469","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6dfe27b4604ae4ee8a717a084404b38259aa7836","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        volume_path \u003d os.path.join(self.volumes_dir, vol_uuid_file)"},{"line_number":301,"context_line":"        if not os.path.exists(volume_path):"},{"line_number":302,"context_line":"            LOG.warning(_LW(\u0027Volume path %s does not exist, \u0027"},{"line_number":303,"context_line":"                            \u0027nothing to remove.\u0027) % volume_path)"},{"line_number":304,"context_line":"            return"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        if os.path.isfile(volume_path):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_73058078","line":303,"updated":"2015-01-19 21:58:42.000000000","message":"% \u003d\u003e ,","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        volume_path \u003d os.path.join(self.volumes_dir, vol_uuid_file)"},{"line_number":301,"context_line":"        if not os.path.exists(volume_path):"},{"line_number":302,"context_line":"            LOG.warning(_LW(\u0027Volume path %s does not exist, \u0027"},{"line_number":303,"context_line":"                            \u0027nothing to remove.\u0027) % volume_path)"},{"line_number":304,"context_line":"            return"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        if os.path.isfile(volume_path):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_c86a02b5","line":303,"in_reply_to":"3a961159_73058078","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6dfe27b4604ae4ee8a717a084404b38259aa7836","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        except putils.ProcessExecutionError as e:"},{"line_number":317,"context_line":"            LOG.error(_LE(\"Failed to remove iscsi target for volume \""},{"line_number":318,"context_line":"                          \"id:%(vol_id)s: %(e)s\")"},{"line_number":319,"context_line":"                      % {\u0027vol_id\u0027: vol_id, \u0027e\u0027: e})"},{"line_number":320,"context_line":"            raise exception.ISCSITargetRemoveFailed(volume_id\u003dvol_id)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        # Carried over from tgt"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_93faec75","line":319,"updated":"2015-01-19 21:58:42.000000000","message":"% \u003d\u003e ,","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        except putils.ProcessExecutionError as e:"},{"line_number":317,"context_line":"            LOG.error(_LE(\"Failed to remove iscsi target for volume \""},{"line_number":318,"context_line":"                          \"id:%(vol_id)s: %(e)s\")"},{"line_number":319,"context_line":"                      % {\u0027vol_id\u0027: vol_id, \u0027e\u0027: e})"},{"line_number":320,"context_line":"            raise exception.ISCSITargetRemoveFailed(volume_id\u003dvol_id)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        # Carried over from tgt"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_08640ae5","line":319,"in_reply_to":"3a961159_93faec75","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6dfe27b4604ae4ee8a717a084404b38259aa7836","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            os.unlink(volume_path)"},{"line_number":329,"context_line":"        else:"},{"line_number":330,"context_line":"            LOG.debug(\u0027Volume path %s not found at end, \u0027"},{"line_number":331,"context_line":"                      \u0027of remove_iscsi_target.\u0027 % volume_path)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def show_target(self, tid, iqn\u003dNone, **kwargs):"},{"line_number":334,"context_line":"        if iqn is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_b3ffe865","line":331,"updated":"2015-01-19 21:58:42.000000000","message":"% \u003d\u003e ,","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            os.unlink(volume_path)"},{"line_number":329,"context_line":"        else:"},{"line_number":330,"context_line":"            LOG.debug(\u0027Volume path %s not found at end, \u0027"},{"line_number":331,"context_line":"                      \u0027of remove_iscsi_target.\u0027 % volume_path)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def show_target(self, tid, iqn\u003dNone, **kwargs):"},{"line_number":334,"context_line":"        if iqn is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_485e1215","line":331,"in_reply_to":"3a961159_b3ffe865","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"06e33b92be1c0d84ccf59aac505195f42d1f27a1","unresolved":false,"context_lines":[{"line_number":333,"context_line":"    def show_target(self, tid, iqn\u003dNone, **kwargs):"},{"line_number":334,"context_line":"        if iqn is None:"},{"line_number":335,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":336,"context_line":"                err\u003d_(\u0027valid iqn needed for show_target\u0027))"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        tid \u003d self._get_target(iqn)"},{"line_number":339,"context_line":"        if tid is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_0536b3e8","line":336,"updated":"2015-01-19 22:17:22.000000000","message":"Please, start message with upper-case letter","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"7ac24f08043644e5b4ed9c447992efd1ec0de5e5","unresolved":false,"context_lines":[{"line_number":333,"context_line":"    def show_target(self, tid, iqn\u003dNone, **kwargs):"},{"line_number":334,"context_line":"        if iqn is None:"},{"line_number":335,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":336,"context_line":"                err\u003d_(\u0027valid iqn needed for show_target\u0027))"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        tid \u003d self._get_target(iqn)"},{"line_number":339,"context_line":"        if tid is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_685bce22","line":336,"in_reply_to":"3a961159_0536b3e8","updated":"2015-01-19 22:58:26.000000000","message":"Done","commit_id":"e8676c1ad39888ba41a02df715c40d158f685366"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"85b8dbc437befe1b11709bba2c98f00000ee06a0","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class CxtAdm(iscsi.ISCSITarget):"},{"line_number":33,"context_line":"    \"\"\"Target object for block storage devices."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    Base class for target object, where target"},{"line_number":36,"context_line":"    is data transport mechanism (target) specific calls."}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_62c9b758","line":33,"updated":"2015-02-04 02:50:44.000000000","message":"update these docstrings.","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"85b8dbc437befe1b11709bba2c98f00000ee06a0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        return \"%s:%s,%s %s %s\" % (ip, self.configuration.iscsi_port,"},{"line_number":83,"context_line":"                                   target, iqn, lun)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _get_iscsi_target(self, context, vol_id):"},{"line_number":86,"context_line":"        return 0"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_target_and_lun(self, context, volume):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_82530be1","line":85,"updated":"2015-02-04 02:50:44.000000000","message":"remove this, and just set 0 where it\u0027s being called. It\u0027s only called in one place anyways.","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"50cffe9209151f02c2b3a359b07e7e406f58eb82","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        return \"%s:%s,%s %s %s\" % (ip, self.configuration.iscsi_port,"},{"line_number":83,"context_line":"                                   target, iqn, lun)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def _get_iscsi_target(self, context, vol_id):"},{"line_number":86,"context_line":"        return 0"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_target_and_lun(self, context, volume):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_aae37da2","line":85,"in_reply_to":"da86d52c_82530be1","updated":"2015-02-04 09:55:10.000000000","message":"Done","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"85b8dbc437befe1b11709bba2c98f00000ee06a0","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def _get_iscsi_target(self, context, vol_id):"},{"line_number":86,"context_line":"        return 0"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_target_and_lun(self, context, volume):"},{"line_number":89,"context_line":"        lun \u003d 0  # For chiscsi dev starts at lun 0"},{"line_number":90,"context_line":"        iscsi_target \u003d 0  # Not used by chiscsi"},{"line_number":91,"context_line":"        return iscsi_target, lun"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_22133f0e","line":88,"updated":"2015-02-04 02:50:44.000000000","message":"remove this, and just (0, 0) where it\u0027s being called.","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"50cffe9209151f02c2b3a359b07e7e406f58eb82","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def _get_iscsi_target(self, context, vol_id):"},{"line_number":86,"context_line":"        return 0"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_target_and_lun(self, context, volume):"},{"line_number":89,"context_line":"        lun \u003d 0  # For chiscsi dev starts at lun 0"},{"line_number":90,"context_line":"        iscsi_target \u003d 0  # Not used by chiscsi"},{"line_number":91,"context_line":"        return iscsi_target, lun"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_cae0b198","line":88,"in_reply_to":"da86d52c_22133f0e","updated":"2015-02-04 09:55:10.000000000","message":"Done","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"85b8dbc437befe1b11709bba2c98f00000ee06a0","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        \"\"\"Creates an export for a logical volume.\"\"\""},{"line_number":239,"context_line":"        iscsi_name \u003d \"%s%s\" % (self.configuration.iscsi_target_prefix,"},{"line_number":240,"context_line":"                               volume[\u0027name\u0027])"},{"line_number":241,"context_line":"        iscsi_target, lun \u003d self._get_target_and_lun(context, volume)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        # Verify we haven\u0027t setup a CHAP creds file already"},{"line_number":244,"context_line":"        # if DNE no big deal, we\u0027ll just create it"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_4274b367","line":241,"updated":"2015-02-04 02:50:44.000000000","message":"just set this to (0,0)... that\u0027s all this method does.","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"50cffe9209151f02c2b3a359b07e7e406f58eb82","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        \"\"\"Creates an export for a logical volume.\"\"\""},{"line_number":239,"context_line":"        iscsi_name \u003d \"%s%s\" % (self.configuration.iscsi_target_prefix,"},{"line_number":240,"context_line":"                               volume[\u0027name\u0027])"},{"line_number":241,"context_line":"        iscsi_target, lun \u003d self._get_target_and_lun(context, volume)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        # Verify we haven\u0027t setup a CHAP creds file already"},{"line_number":244,"context_line":"        # if DNE no big deal, we\u0027ll just create it"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_0af64963","line":241,"in_reply_to":"da86d52c_4274b367","updated":"2015-02-04 09:55:10.000000000","message":"Done","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"85b8dbc437befe1b11709bba2c98f00000ee06a0","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def remove_export(self, context, volume):"},{"line_number":267,"context_line":"        try:"},{"line_number":268,"context_line":"            iscsi_target \u003d self._get_iscsi_target(context, volume[\u0027id\u0027])"},{"line_number":269,"context_line":"        except exception.NotFound:"},{"line_number":270,"context_line":"            LOG.info(_LI(\"Skipping remove_export. No iscsi_target \""},{"line_number":271,"context_line":"                         \"provisioned for volume: %s\"), volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_424d933d","line":268,"updated":"2015-02-04 02:50:44.000000000","message":"just set this to 0... that\u0027s all this method does.","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"50cffe9209151f02c2b3a359b07e7e406f58eb82","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    def remove_export(self, context, volume):"},{"line_number":267,"context_line":"        try:"},{"line_number":268,"context_line":"            iscsi_target \u003d self._get_iscsi_target(context, volume[\u0027id\u0027])"},{"line_number":269,"context_line":"        except exception.NotFound:"},{"line_number":270,"context_line":"            LOG.info(_LI(\"Skipping remove_export. No iscsi_target \""},{"line_number":271,"context_line":"                         \"provisioned for volume: %s\"), volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_2ae78dad","line":268,"in_reply_to":"da86d52c_424d933d","updated":"2015-02-04 09:55:10.000000000","message":"Done","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"85b8dbc437befe1b11709bba2c98f00000ee06a0","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            # this export has already been removed"},{"line_number":282,"context_line":"            self.show_target(iscsi_target, iqn\u003diqn)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        except Exception as TargetException:"},{"line_number":285,"context_line":"            LOG.info(_LI(\"Skipping remove_export. No iscsi_target \""},{"line_number":286,"context_line":"                         \"is presently exported for volume: %(vol)s, %(e)s\"),"},{"line_number":287,"context_line":"                     {\u0027vol\u0027: volume[\u0027id\u0027], \u0027e\u0027: TargetException})"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_0298fb68","line":284,"updated":"2015-02-04 02:50:44.000000000","message":"except CinderException... Exception is already pretty broad.","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"50cffe9209151f02c2b3a359b07e7e406f58eb82","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            # this export has already been removed"},{"line_number":282,"context_line":"            self.show_target(iscsi_target, iqn\u003diqn)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        except Exception as TargetException:"},{"line_number":285,"context_line":"            LOG.info(_LI(\"Skipping remove_export. No iscsi_target \""},{"line_number":286,"context_line":"                         \"is presently exported for volume: %(vol)s, %(e)s\"),"},{"line_number":287,"context_line":"                     {\u0027vol\u0027: volume[\u0027id\u0027], \u0027e\u0027: TargetException})"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_6a04254a","line":284,"in_reply_to":"da86d52c_0298fb68","updated":"2015-02-04 09:55:10.000000000","message":"Done","commit_id":"07ab5b5b570d8110823fcdf80996f2284e74a9db"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"932ac6e27acb3868ce290e4e22bafa5cd7a52dc0","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        try:"},{"line_number":104,"context_line":"            with open(volume_path, \u0027r\u0027) as f:"},{"line_number":105,"context_line":"                volume_conf \u003d f.read()"},{"line_number":106,"context_line":"        except Exception as ErrorVolumeException:"},{"line_number":107,"context_line":"            LOG.debug(\u0027Failed to open config for %(vol_id)s: %(e)s\u0027,"},{"line_number":108,"context_line":"                      {\u0027vol_id\u0027: vol_id, \u0027e\u0027:"},{"line_number":109,"context_line":"                       six.text_type(ErrorVolumeException)})"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_08a8f675","line":106,"updated":"2015-02-04 20:49:45.000000000","message":"This is generally not an okay thing to do. You should be able to catch all the exceptions expected for open and read.","commit_id":"f59c9a6cd796c937bc7e0a69cfe7be278b42ddf1"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"42e598edc4d6aa156be12c37b16365ca5d2620f2","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        try:"},{"line_number":104,"context_line":"            with open(volume_path, \u0027r\u0027) as f:"},{"line_number":105,"context_line":"                volume_conf \u003d f.read()"},{"line_number":106,"context_line":"        except Exception as ErrorVolumeException:"},{"line_number":107,"context_line":"            LOG.debug(\u0027Failed to open config for %(vol_id)s: %(e)s\u0027,"},{"line_number":108,"context_line":"                      {\u0027vol_id\u0027: vol_id, \u0027e\u0027:"},{"line_number":109,"context_line":"                       six.text_type(ErrorVolumeException)})"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_06c6269a","line":106,"in_reply_to":"da86d52c_08a8f675","updated":"2015-02-04 21:55:46.000000000","message":"Done","commit_id":"f59c9a6cd796c937bc7e0a69cfe7be278b42ddf1"},{"author":{"_account_id":14305,"name":"Yuriy Nesenenko","email":"ynesenenko@mirantis.com","username":"yuriy_n"},"change_message_id":"cc1381118c766bb79512ec71057cf8357c4dac29","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        m \u003d re.search(\u0027Auth_CHAP_Initiator\u003d\"(\\w+)\":\"(\\w+)\"\u0027, volume_conf)"},{"line_number":128,"context_line":"        if m:"},{"line_number":129,"context_line":"            return (m.group(1), m.group(2))"},{"line_number":130,"context_line":"        LOG.debug(\u0027Failed to find CHAP auth from config for %s\u0027 % vol_id)"},{"line_number":131,"context_line":"        return None"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def create_iscsi_target(self, name, tid, lun, path,"}],"source_content_type":"text/x-python","patch_set":16,"id":"da86d52c_182ab12f","line":130,"updated":"2015-02-13 10:45:01.000000000","message":"According to the Logging guidelines, please change % \u003d\u003e ,","commit_id":"2d27e6ae527aae55c365c385d3f4249c0cd4daa7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b7f08b31a06a5f711b687a962a2177fcbf459793","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            with open(volume_path, \u0027r\u0027) as f:"},{"line_number":111,"context_line":"                volume_conf \u003d f.read()"},{"line_number":112,"context_line":"        except IOError as ErrorFileNotFound:"},{"line_number":113,"context_line":"            LOG.debug(\u0027Failed to open config for %(vol_id)s: %(e)s\u0027,"},{"line_number":114,"context_line":"                      {\u0027vol_id\u0027: vol_id, \u0027e\u0027:"},{"line_number":115,"context_line":"                       six.text_type(ErrorFileNotFound)})"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_54d696c4","line":112,"updated":"2015-02-14 01:31:01.000000000","message":"ErrorFileNotFound is a variable to hold the IOError exception, so it really shouldn\u0027t be camel cased like a class. Same below for ErrorVolumeException.","commit_id":"d490e9ffb1061c2f04d6c19ed087600d6b7423e4"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"8beea13f61d0179081c4c0ed4825e7ea6584228d","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            with open(volume_path, \u0027r\u0027) as f:"},{"line_number":111,"context_line":"                volume_conf \u003d f.read()"},{"line_number":112,"context_line":"        except IOError as ErrorFileNotFound:"},{"line_number":113,"context_line":"            LOG.debug(\u0027Failed to open config for %(vol_id)s: %(e)s\u0027,"},{"line_number":114,"context_line":"                      {\u0027vol_id\u0027: vol_id, \u0027e\u0027:"},{"line_number":115,"context_line":"                       six.text_type(ErrorFileNotFound)})"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_1f5ef776","line":112,"in_reply_to":"da86d52c_54d696c4","updated":"2015-02-14 02:25:20.000000000","message":"Done","commit_id":"d490e9ffb1061c2f04d6c19ed087600d6b7423e4"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"73946d1eb2d6cc9fa1130b96e181aac72af86721","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                                       \u0027-x\u0027, self.config,"},{"line_number":189,"context_line":"                                       run_as_root\u003dTrue)"},{"line_number":190,"context_line":"            LOG.debug(\"StdOut from iscsictl -S: %s\", out)"},{"line_number":191,"context_line":"            LOG.debug(\"StdErr from iscsictl -S: %s\", err)"},{"line_number":192,"context_line":"        except putils.ProcessExecutionError as e:"},{"line_number":193,"context_line":"            LOG.error(_LE(\"Failed to create iscsi target for volume \""},{"line_number":194,"context_line":"                          \"id:%(vol_id)s: %(e)s\"),"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_6b871513","line":191,"updated":"2015-02-16 12:07:47.000000000","message":"I think you can remove this line. If there is an error, will the control reach here?","commit_id":"d16004a33cef276a95c103ab3ee862122ac94e34"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"4d19b1397f1e95bb97b72a2dc415b6e4326838d9","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                                       \u0027-x\u0027, self.config,"},{"line_number":189,"context_line":"                                       run_as_root\u003dTrue)"},{"line_number":190,"context_line":"            LOG.debug(\"StdOut from iscsictl -S: %s\", out)"},{"line_number":191,"context_line":"            LOG.debug(\"StdErr from iscsictl -S: %s\", err)"},{"line_number":192,"context_line":"        except putils.ProcessExecutionError as e:"},{"line_number":193,"context_line":"            LOG.error(_LE(\"Failed to create iscsi target for volume \""},{"line_number":194,"context_line":"                          \"id:%(vol_id)s: %(e)s\"),"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_de57ce25","line":191,"in_reply_to":"da86d52c_6b871513","updated":"2015-02-16 20:22:14.000000000","message":"Done","commit_id":"d16004a33cef276a95c103ab3ee862122ac94e34"},{"author":{"_account_id":10115,"name":"Mitsuhiro Tanino","email":"mitsuhiro.tanino@lycorp.co.jp","username":"mtanino"},"change_message_id":"977e5dc1705039926bc03148b2e6c3ce60031764","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        return tid"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":224,"context_line":"        iscsi_properties \u003d self._get_iscsi_properties(volume)"},{"line_number":225,"context_line":"        return {"},{"line_number":226,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_62b3ae0a","line":223,"updated":"2015-02-16 16:18:35.000000000","message":"I would propose to inherit initialize_connection() from iscsi.py directly instead of adding same code here. \n\nPlease see this https://review.openstack.org/#/c/155933/. \nOr we can add removing this function into #155933.\n\nI think it doesn\u0027t matter either way.","commit_id":"d16004a33cef276a95c103ab3ee862122ac94e34"},{"author":{"_account_id":12088,"name":"Anish Bhatt","email":"anish.7@gmail.com","username":"anish"},"change_message_id":"4d19b1397f1e95bb97b72a2dc415b6e4326838d9","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        return tid"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":224,"context_line":"        iscsi_properties \u003d self._get_iscsi_properties(volume)"},{"line_number":225,"context_line":"        return {"},{"line_number":226,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_5e33de12","line":223,"in_reply_to":"da86d52c_62b3ae0a","updated":"2015-02-16 20:22:14.000000000","message":"Inherited directly from iscsi.py now, since I had another change anyways","commit_id":"d16004a33cef276a95c103ab3ee862122ac94e34"}]}
