)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9322415683afc59fdb1240f03d646bf4e193245e","unresolved":false,"context_lines":[{"line_number":16,"context_line":" - Copy Volume to Image"},{"line_number":17,"context_line":" - Clone volume"},{"line_number":18,"context_line":" - Create volume from snapshot"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ibdd1214a7099e1e53636780272c187927002ea1e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5a74a57a_efc7c195","line":19,"updated":"2016-11-27 20:30:05.000000000","message":"Have you submitted a blueprint for this driver?  Please reference it here:\n\nImplements blueprint: xxxxxxxx","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Open-E driver for JovianDSS storage with iSCSI support."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This driver implementats features:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":" - Create / Delete volume"},{"line_number":12,"context_line":" - Extend volume"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"3a71b18c_ce71190e","line":9,"range":{"start_line":9,"start_character":12,"end_line":9,"end_character":24},"updated":"2016-12-12 13:55:44.000000000","message":"... implements the following features:","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"89d49450231d155d407fd1af1caa60077f1925de","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Andrei Perepiolkin \u003candrei.perepiolkin@open-e.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-16 22:06:51 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Open-E driver for JovianDSS storage with iSCSI support."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This driver implements features:"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"da4df55a_fd08f22a","line":7,"range":{"start_line":7,"start_character":58,"end_line":7,"end_character":59},"updated":"2016-12-21 23:53:33.000000000","message":"Summary line doesn\u0027t need a \u0027.\u0027","commit_id":"2a9bb0dd0ace55c9e6ae11fa34921496e18464ba"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"89d49450231d155d407fd1af1caa60077f1925de","unresolved":false,"context_lines":[{"line_number":16,"context_line":" - Copy Volume to Image"},{"line_number":17,"context_line":" - Clone volume"},{"line_number":18,"context_line":" - Create volume from snapshot"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Implements: blueprint open-e-joviandss-driver"},{"line_number":21,"context_line":"Change-Id: Ibdd1214a7099e1e53636780272c187927002ea1e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"da4df55a_5d101e4f","line":19,"updated":"2016-12-21 23:53:33.000000000","message":"DocImpact tag required","commit_id":"2a9bb0dd0ace55c9e6ae11fa34921496e18464ba"}],"cinder/exception.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4476f0fac4ab4f0394bd3d976e599d02e2bb8b4","unresolved":false,"context_lines":[{"line_number":1313,"context_line":""},{"line_number":1314,"context_line":"class JDSSException(VolumeDriverException):"},{"line_number":1315,"context_line":"    message \u003d _(\"JovianDSS driver faced an error: %(reason)s.\")"},{"line_number":1316,"context_line":"    pass"},{"line_number":1317,"context_line":""},{"line_number":1318,"context_line":""},{"line_number":1319,"context_line":"class JDSSRESTException(JDSSException):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_355251de","line":1316,"updated":"2016-11-30 16:50:55.000000000","message":"Remove \"pass\" in all of these.","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":""},{"line_number":1318,"context_line":"class JDSSRESTException(JDSSException):"},{"line_number":1319,"context_line":"    message \u003d _(\"\""},{"line_number":1320,"context_line":"                \"JovianDSS REST request %(request)s faild because: \""},{"line_number":1321,"context_line":"                \"%(reason)s.\")"},{"line_number":1322,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_7496124d","line":1319,"range":{"start_line":1319,"start_character":16,"end_line":1319,"end_character":18},"updated":"2016-12-12 13:55:44.000000000","message":"You don\u0027t need this.","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":""},{"line_number":1324,"context_line":"class JDSSRESTProxyException(JDSSException):"},{"line_number":1325,"context_line":"    message \u003d _(\"\""},{"line_number":1326,"context_line":"                \"JovianDSS connection with %(host)s failed because: \""},{"line_number":1327,"context_line":"                \"%(reason)s.\")"},{"line_number":1328,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_b49c2a6b","line":1325,"range":{"start_line":1325,"start_character":16,"end_line":1325,"end_character":18},"updated":"2016-12-12 13:55:44.000000000","message":"Same.","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"99fe8b6bfc09d95fde6377271da18e968d783c81","unresolved":false,"context_lines":[{"line_number":1338,"context_line":""},{"line_number":1339,"context_line":""},{"line_number":1340,"context_line":"class JDSSRESTException(JDSSException):"},{"line_number":1341,"context_line":"    message \u003d _(\"JovianDSS REST request %(request)s faild because: \""},{"line_number":1342,"context_line":"                \"%(reason)s.\")"},{"line_number":1343,"context_line":""},{"line_number":1344,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_ac8897c6","line":1341,"updated":"2016-12-14 20:33:06.000000000","message":"Typo:  \"faild\" -\u003e \"failed\".","commit_id":"2732ed47b25d0e14828f5b50266696d7e6b9d55c"}],"cinder/tests/unit/volume/drivers/open_e/test_jdss_iscsi.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.assertIsNotNone(info)"},{"line_number":205,"context_line":"        self.driver.ra.create_lun \u003d mock.Mock("},{"line_number":206,"context_line":"            side_effect\u003dexception.JDSSRESTException(\u0027exc\u0027))"},{"line_number":207,"context_line":"        try:"},{"line_number":208,"context_line":"            self.driver.create_volume(TEST_VOLUME)"},{"line_number":209,"context_line":"            assert False, \"VolumeBackendAPIException hasn\u0027t been caught\""},{"line_number":210,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":211,"context_line":"            assert True, \"VolumeBackendAPIException has been caught\""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def test_extend_volume(self):"},{"line_number":214,"context_line":"        self.driver.ra.extend_lun \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_14379eff","line":211,"range":{"start_line":207,"start_character":0,"end_line":211,"end_character":68},"updated":"2016-12-12 13:55:44.000000000","message":"self.assertRaises()","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"630981ed639150f7c74de99d59bd171697f34c58","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        setattr(self.configuration, \u0027jovian_host\u0027, FAKE_HOST)"},{"line_number":170,"context_line":"        setattr(self.configuration, \u0027jovian_chap_pass_len\u0027, CHAP_PASS_LEN)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        pass"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def setUp(self):"},{"line_number":175,"context_line":"        super(JovianISCSIDriverTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a6eadb0_2b320df2","line":172,"updated":"2016-12-13 08:34:14.000000000","message":"No need \u0027pass\u0027 here","commit_id":"fa5c769e676cf6a90101dd3e22346670c5969608"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"630981ed639150f7c74de99d59bd171697f34c58","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            side_effect\u003dexception.JDSSRESTException(\u0027exc\u0027))"},{"line_number":207,"context_line":"        try:"},{"line_number":208,"context_line":"            self.driver.create_volume(TEST_VOLUME)"},{"line_number":209,"context_line":"            assert False, \"VolumeBackendAPIException hasn\u0027t been caught\""},{"line_number":210,"context_line":"        except exception.VolumeBackendAPIException:"},{"line_number":211,"context_line":"            assert True, \"VolumeBackendAPIException has been caught\""},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1a6eadb0_ab737db0","line":209,"updated":"2016-12-13 08:34:14.000000000","message":"Please, use self.assertTrue/self.assertFalse here and below","commit_id":"fa5c769e676cf6a90101dd3e22346670c5969608"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        setattr(self.configuration, \u0027jovian_host\u0027, FAKE_HOST)"},{"line_number":183,"context_line":"        setattr(self.configuration, \u0027jovian_chap_pass_len\u0027, CHAP_PASS_LEN)"},{"line_number":184,"context_line":"        setattr(self.configuration, \u0027iscsi_target_prefix\u0027, TARGET_PREFIX)"},{"line_number":185,"context_line":"        pass"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def setUp(self):"},{"line_number":188,"context_line":"        super(JovianISCSIDriverTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_9bfce173","line":185,"updated":"2016-12-15 03:59:04.000000000","message":"Remove \"pass\".  It\u0027s not needed.","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f791e536292164349a58279eab01eac88f8794c1","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        setattr(self.configuration, \u0027jovian_host\u0027, FAKE_HOST)"},{"line_number":183,"context_line":"        setattr(self.configuration, \u0027jovian_chap_pass_len\u0027, CHAP_PASS_LEN)"},{"line_number":184,"context_line":"        setattr(self.configuration, \u0027iscsi_target_prefix\u0027, TARGET_PREFIX)"},{"line_number":185,"context_line":"        pass"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def setUp(self):"},{"line_number":188,"context_line":"        super(JovianISCSIDriverTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":29,"id":"1a6eadb0_4db98f78","line":185,"updated":"2016-12-15 18:11:19.000000000","message":"Remove \"pass\".","commit_id":"6e91f596572f2513cbfcf99959f4714bdfc89fb8"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"89d49450231d155d407fd1af1caa60077f1925de","unresolved":false,"context_lines":[{"line_number":26,"context_line":"POOL \u003d \u0027Cinder-Pool-0\u0027"},{"line_number":27,"context_line":"CHAP_PASS_LEN \u003d 12"},{"line_number":28,"context_line":"CHAP_USERNAME \u003d \u0027admin\u0027"},{"line_number":29,"context_line":"TEST_VOLUME \u003d {"},{"line_number":30,"context_line":"    \u0027id\u0027: \u00273d6eeb5d-109b-4435-b891-d01415178490\u0027,"},{"line_number":31,"context_line":"    \u0027name\u0027: \u0027volume1\u0027,"},{"line_number":32,"context_line":"    \u0027display_name\u0027: \u0027volume1\u0027,"},{"line_number":33,"context_line":"    \u0027provider_location\u0027: None,"},{"line_number":34,"context_line":"    \u0027volume_metadata\u0027: [],"},{"line_number":35,"context_line":"    \u0027size\u0027: 1,"},{"line_number":36,"context_line":"    \u0027replication_driver_data\u0027: \u0027tmp_snapshot:tmp_snapshot_for_volume_\u0027"},{"line_number":37,"context_line":"                               \u00273d6eeb5d-109b-4435-b891-d01415178490,\u0027,"},{"line_number":38,"context_line":"    \u0027origin\u0027: POOL + \u0027/volume@tmp_snapshot_for_volume_\u0027"},{"line_number":39,"context_line":"                     \u00273d6eeb5d-109b-4435-b891-d01415178490\u0027,"},{"line_number":40,"context_line":"    \u0027provider_auth\u0027: \u0027CHAP admin o6CklZAwIv2M\u0027"},{"line_number":41,"context_line":"}"},{"line_number":42,"context_line":"NEW_SIZE \u003d 2"},{"line_number":43,"context_line":"SNAPSHOT \u003d {"},{"line_number":44,"context_line":"    \u0027volume_id\u0027: TEST_VOLUME[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":30,"id":"da4df55a_5d657edf","line":41,"range":{"start_line":29,"start_character":0,"end_line":41,"end_character":1},"updated":"2016-12-21 23:53:33.000000000","message":"Might be helpful to use the cinder/tests/unit/fake_volume.py instead of setting these up from scratch.","commit_id":"2a9bb0dd0ace55c9e6ae11fa34921496e18464ba"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"89d49450231d155d407fd1af1caa60077f1925de","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    \u0027provider_auth\u0027: \u0027CHAP admin o6CklZAwIv2M\u0027"},{"line_number":41,"context_line":"}"},{"line_number":42,"context_line":"NEW_SIZE \u003d 2"},{"line_number":43,"context_line":"SNAPSHOT \u003d {"},{"line_number":44,"context_line":"    \u0027volume_id\u0027: TEST_VOLUME[\u0027id\u0027],"},{"line_number":45,"context_line":"    \u0027name\u0027: \u0027name\u0027,"},{"line_number":46,"context_line":"    \u0027id\u0027: \u00273d6eeb5d-119b-4435-b891-d01415177231\u0027,"},{"line_number":47,"context_line":"    \u0027volume_size\u0027: TEST_VOLUME[\u0027size\u0027]"},{"line_number":48,"context_line":"}"},{"line_number":49,"context_line":"SRC_VREF \u003d {"},{"line_number":50,"context_line":"    \u0027id\u0027: \u00273d6eeb5d-119b-4435-b891-d01415177231\u0027,"},{"line_number":51,"context_line":"    \u0027size\u0027: 1"}],"source_content_type":"text/x-python","patch_set":30,"id":"da4df55a_bd9aeac3","line":48,"range":{"start_line":43,"start_character":0,"end_line":48,"end_character":1},"updated":"2016-12-21 23:53:33.000000000","message":"ditto above with cinder/test/unit/fake_snapshot.py","commit_id":"2a9bb0dd0ace55c9e6ae11fa34921496e18464ba"}],"cinder/tests/unit/volume/drivers/open_e/test_jdss_rest.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.ra.rproxy.request.return_value \u003d RETURN1"},{"line_number":170,"context_line":"        try:"},{"line_number":171,"context_line":"            self.ra.get_luns(POOL)"},{"line_number":172,"context_line":"            assert False, \"JDSSRESTException hasn\u0027t been caught\""},{"line_number":173,"context_line":"        except exception.JDSSRESTException:"},{"line_number":174,"context_line":"            assert True, \"JDSSRESTException has been caught\""},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_f4c7820f","line":172,"range":{"start_line":172,"start_character":11,"end_line":172,"end_character":64},"updated":"2016-12-12 13:55:44.000000000","message":"Always use self.assert*. In this case sels.assertRaises() would solve.","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        info \u003d self.ra.create_lun(POOL, VOLUME_NAME, VOLUME_SIZE)"},{"line_number":182,"context_line":"        self.assertIsNone(info)"},{"line_number":183,"context_line":"        self.ra.rproxy.request.return_value \u003d RETURN1"},{"line_number":184,"context_line":"        try:"},{"line_number":185,"context_line":"            self.ra.create_lun(POOL, VOLUME_NAME, VOLUME_SIZE)"},{"line_number":186,"context_line":"            assert False, \"JDSSRESTException hasn\u0027t been caught\""},{"line_number":187,"context_line":"        except exception.JDSSRESTException:"},{"line_number":188,"context_line":"            assert True, \"JDSSRESTException has been caught\""},{"line_number":189,"context_line":"        self.ra.rproxy.request.return_value \u003d RETURN5"},{"line_number":190,"context_line":"        try:"},{"line_number":191,"context_line":"            self.ra.create_lun(POOL, VOLUME_NAME, VOLUME_SIZE)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_546f56fb","line":188,"range":{"start_line":184,"start_character":0,"end_line":188,"end_character":60},"updated":"2016-12-12 13:55:44.000000000","message":"Same","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        except exception.JDSSRESTException:"},{"line_number":327,"context_line":"            assert True, \"JDSSRESTException hasn\u0027t been caught\""},{"line_number":328,"context_line":"        self.ra.rproxy.request.return_value \u003d RETURN3"},{"line_number":329,"context_line":"        # try:"},{"line_number":330,"context_line":"        #     self.ra.modify_target(POOL, TARGET_NAME)"},{"line_number":331,"context_line":"        #     assert False, \"JDSSRESTException has been caught\""},{"line_number":332,"context_line":"        # except exception.JDSSRESTException:"},{"line_number":333,"context_line":"        #     assert True, \"JDSSRESTException hasn\u0027t been caught\""},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def test_get_target_ip_settings(self):"},{"line_number":336,"context_line":"        self.ra.rproxy.request.return_value \u003d RETURN3"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_d47b66bc","line":333,"range":{"start_line":329,"start_character":0,"end_line":333,"end_character":65},"updated":"2016-12-12 13:55:44.000000000","message":"Remove","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        info \u003d self.ra.set_target_ip_settings(POOL, TARGET_NAME, SETTINGS)"},{"line_number":356,"context_line":"        self.assertIsNone(info)"},{"line_number":357,"context_line":"        RESULT[\u0027conflicted\u0027] \u003d False"},{"line_number":358,"context_line":"        # self.ra.rproxy.request.side_effect \u003d [RETURN3, RETURN5]"},{"line_number":359,"context_line":"        # try:"},{"line_number":360,"context_line":"        #     self.ra.set_target_ip_settings(POOL, TARGET_NAME, SETTINGS)"},{"line_number":361,"context_line":"        #     assert False, \"JDSSRESTException hasn\u0027t been caught\""},{"line_number":362,"context_line":"        # except exception.JDSSRESTException:"},{"line_number":363,"context_line":"        #     assert True, \"JDSSRESTException has been caught\""},{"line_number":364,"context_line":"        # RESULT[\u0027conflicted\u0027] \u003d False"},{"line_number":365,"context_line":"        self.ra.rproxy.request.side_effect \u003d [RETURN3, RETURN1]"},{"line_number":366,"context_line":"        try:"},{"line_number":367,"context_line":"            self.ra.set_target_ip_settings(POOL, TARGET_NAME, SETTINGS)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_3432da5e","line":364,"range":{"start_line":358,"start_character":0,"end_line":364,"end_character":38},"updated":"2016-12-12 13:55:44.000000000","message":"If you are not using you should remove this.","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"}],"cinder/volume/drivers/open_e/__init__.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1912d482037c3578f02a7fd7146e0432afe7d6ba","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from cinder import exception"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class JDSSException(exception.CinderException):"},{"line_number":20,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_ed663228","line":19,"updated":"2016-11-24 15:07:54.000000000","message":"Please, move it to cinder.exception module","commit_id":"65bea4b57f3224242c2639b15b40c549cf3bd011"}],"cinder/volume/drivers/open_e/iscsi.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1912d482037c3578f02a7fd7146e0432afe7d6ba","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def do_setup(self, context):"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        self.jovian_iscsi_target_portal_port \u003d str("},{"line_number":74,"context_line":"            self.configuration.safe_get(\u0027jovian_iscsi_target_portal_port\u0027))"},{"line_number":75,"context_line":"        self.conf[\u0027jovian_iscsi_target_portal_port\u0027] \u003d \\"},{"line_number":76,"context_line":"            self.jovian_iscsi_target_portal_port"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_0d452e6f","line":73,"updated":"2016-11-24 15:07:54.000000000","message":"Why do we need copy configuration object to driver instance?","commit_id":"65bea4b57f3224242c2639b15b40c549cf3bd011"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"905d9be7c43536a9e4739564f9b93828c6698b57","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from cinder import exception"},{"line_number":18,"context_line":"from cinder.volume import driver"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import math"},{"line_number":21,"context_line":"import random"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_0f44fd18","line":18,"updated":"2016-11-27 20:36:45.000000000","message":"See import order guidelines:\n\nhttp://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4cf6a899797469c062896766c8f5fdbf36aed8ec","unresolved":false,"context_lines":[{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class JovianISCSIDriver(driver.ISCSIDriver):"},{"line_number":40,"context_line":"    \"\"\"Executes volume driver commands on Open-E JovianDSS V7.\"\"\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_d20c69ee","line":39,"updated":"2016-11-28 05:34:22.000000000","message":"should have the VERSION on this object. and comments detailing the versioning.","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4cf6a899797469c062896766c8f5fdbf36aed8ec","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.re_tmp_snapshot \u003d re.compile(r\u0027tmp_snapshot:(.+),\u0027)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.ra \u003d None"},{"line_number":48,"context_line":"        self.db \u003d kwargs.get(\u0027db\u0027)"},{"line_number":49,"context_line":"        self.conf \u003d dict()"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        LOG.debug(\u0027JovianDSS: Enter JovianISCSIDriver\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_32f83dc3","line":48,"updated":"2016-11-28 05:34:22.000000000","message":"we shouldn\u0027t need the db object.","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"905d9be7c43536a9e4739564f9b93828c6698b57","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        self.jovian_iscsi_target_portal_port \u003d str("},{"line_number":73,"context_line":"            self.configuration.safe_get(\u0027jovian_iscsi_target_portal_port\u0027))"},{"line_number":74,"context_line":"        self.conf[\u0027jovian_iscsi_target_portal_port\u0027] \u003d \\"},{"line_number":75,"context_line":"            self.jovian_iscsi_target_portal_port"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.pool \u003d self.configuration.safe_get(\u0027jovian_pool\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_2f4d393e","line":74,"updated":"2016-11-27 20:36:45.000000000","message":"Use () instead of \\","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4cf6a899797469c062896766c8f5fdbf36aed8ec","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        :param volume: volume reference"},{"line_number":156,"context_line":"        :return: model update dict for volume reference"},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        vname \u003d volume[\u0027id\u0027]"},{"line_number":160,"context_line":"        LOG.debug(\u0027JovianDSS: Creating volume {}.\u0027.format(volume[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_d2238956","line":157,"updated":"2016-11-28 05:34:22.000000000","message":"you might want to look at supporting volume types as well here.","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4cf6a899797469c062896766c8f5fdbf36aed8ec","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        :param volume: volume reference"},{"line_number":183,"context_line":"        \"\"\""},{"line_number":184,"context_line":"        volume_name \u003d volume[\u0027id\u0027]"},{"line_number":185,"context_line":"        # TODO(andrei.perepiolkin@open-e.com): remove this logs"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        LOG.debug(\u0027JovianDSS: Delete volume {}.\u0027.format(volume[\u0027id\u0027]))"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_5218591e","line":185,"updated":"2016-11-28 05:34:22.000000000","message":"remove this TODO or the log.debug.  Since this is the first version of this driver.","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4cf6a899797469c062896766c8f5fdbf36aed8ec","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        try:"},{"line_number":282,"context_line":"            self.ra.create_snapshot(self.pool, src_vref_name,"},{"line_number":283,"context_line":"                                    tmp_snapshot_name)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        except jexc.JDSSException:"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_32e67d15","line":283,"updated":"2016-11-28 05:34:22.000000000","message":"the cloned volume can be larger than the original volume.  You need to account for that somewhere in here.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/hpe/hpe_3par_common.py#L1991","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"4cf6a899797469c062896766c8f5fdbf36aed8ec","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                self.pool,"},{"line_number":329,"context_line":"                volume[\u0027id\u0027],"},{"line_number":330,"context_line":"                snapshot[\u0027id\u0027],"},{"line_number":331,"context_line":"                snapshot[\u0027volume_id\u0027])"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        except jexc.JDSSException as err:"},{"line_number":334,"context_line":"            if \u0027unable to create volume\u0027 in err.args[0]:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_12d0a11e","line":331,"updated":"2016-11-28 05:34:22.000000000","message":"The requested volume can also be larger than the snapshot. \n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/hpe/hpe_3par_common.py#L2210","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"905d9be7c43536a9e4739564f9b93828c6698b57","unresolved":false,"context_lines":[{"line_number":534,"context_line":"            \u0027storage_protocol\u0027: \u0027iSCSI\u0027,"},{"line_number":535,"context_line":"            \u0027total_capacity_gb\u0027: total_capacity,"},{"line_number":536,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity,"},{"line_number":537,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":538,"context_line":"            \u0027volume_backend_name\u0027: self.backend_name,"},{"line_number":539,"context_line":"            \u0027QoS_support\u0027: False,"},{"line_number":540,"context_line":"            \u0027location_info\u0027: location_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_6f53b1e2","line":537,"updated":"2016-11-27 20:36:45.000000000","message":"Please read reserved_percentage from cinder.conf rather than hard code it to 0.","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"905d9be7c43536a9e4739564f9b93828c6698b57","unresolved":false,"context_lines":[{"line_number":734,"context_line":"        return {"},{"line_number":735,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":736,"context_line":"            \u0027data\u0027: iscsi_properties,"},{"line_number":737,"context_line":"            \u0027status\u0027: \"in-use\""},{"line_number":738,"context_line":"        }"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    def terminate_connection(self, volume, connector, force\u003dFalse, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_cf64c5ba","line":737,"updated":"2016-11-27 20:36:45.000000000","message":"Why are you returning status here?  Driver should not return this.","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"905d9be7c43536a9e4739564f9b93828c6698b57","unresolved":false,"context_lines":[{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    def terminate_connection(self, volume, connector, force\u003dFalse, **kwargs):"},{"line_number":741,"context_line":"        return {"},{"line_number":742,"context_line":"            \u0027status\u0027: \"available\""},{"line_number":743,"context_line":"        }"},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"    def attach_volume(self,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_ef5501c2","line":742,"updated":"2016-11-27 20:36:45.000000000","message":"Driver should not return status in this function.","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"905d9be7c43536a9e4739564f9b93828c6698b57","unresolved":false,"context_lines":[{"line_number":760,"context_line":"                      instance_uuid,"},{"line_number":761,"context_line":"                      host_name,"},{"line_number":762,"context_line":"                      mount_point))"},{"line_number":763,"context_line":"        pass"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"    def detach_volume(self,"},{"line_number":766,"context_line":"                      context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_0f5b1df7","line":763,"updated":"2016-11-27 20:36:45.000000000","message":"Remove pass.","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"905d9be7c43536a9e4739564f9b93828c6698b57","unresolved":false,"context_lines":[{"line_number":771,"context_line":""},{"line_number":772,"context_line":"        LOG.debug(\"JovianDSS: Detach volume:\""},{"line_number":773,"context_line":"                  \" context:{}, volume:{}\".format(context, volume))"},{"line_number":774,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_2f745966","line":774,"updated":"2016-11-27 20:36:45.000000000","message":"Remove pass.","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"93c6c63f518bebff44f45b3ecdbd2ee3d907230f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    \"\"\"Executes volume driver commands on Open-E JovianDSS V7.\"\"\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":43,"context_line":"    CI_WIKI_NAME \u003d \"Open-E_JovianDSS_CI\""},{"line_number":44,"context_line":"    VERSION \u003d \"1.0.1\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_175746cb","line":43,"updated":"2016-11-29 23:50:18.000000000","message":"thanks for adding this.","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4476f0fac4ab4f0394bd3d976e599d02e2bb8b4","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":43,"context_line":"    CI_WIKI_NAME \u003d \"Open-E_JovianDSS_CI\""},{"line_number":44,"context_line":"    VERSION \u003d \"1.0.1\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":47,"context_line":"        super(JovianISCSIDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_f5f539cb","line":44,"updated":"2016-11-30 16:50:55.000000000","message":"You have VERSION \u003d \u00271.0.0\u0027 above and \"1.0.1\" here -- probably remove the first one.","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4476f0fac4ab4f0394bd3d976e599d02e2bb8b4","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        except exception.JDSSRESTException as ex:"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"            err_msg \u003d (\u0027JovianDSS: Unable to create target %(target)s \u0027"},{"line_number":590,"context_line":"                       \u0027because of %{error}s.\u0027 %"},{"line_number":591,"context_line":"                       {\u0027target\u0027: target_name, \u0027error\u0027: six.text_type(ex)})"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"            LOG.debug(err_msg, resource\u003dvolume)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_f5ca996d","line":590,"updated":"2016-11-30 16:50:55.000000000","message":"pylint fails due to bad format string:\n\n2016-11-29 23:23:39.933420 | cinder/volume/drivers/open_e/iscsi.py:589: [E1300, JovianISCSIDriver._create_new_target_volume] Unsupported format character \u0027{\u0027 (0x7b) at index 58","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4476f0fac4ab4f0394bd3d976e599d02e2bb8b4","unresolved":false,"context_lines":[{"line_number":603,"context_line":"            except exception.JDSSRESTException as ex:"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"                err_msg \u003d (_(\u0027JovianDSS: Unable to create\u0027"},{"line_number":606,"context_line":"                             \u0027 user %{user}s for target %{target}s\u0027"},{"line_number":607,"context_line":"                             \u0027 because of %{error}s.\u0027) %"},{"line_number":608,"context_line":"                           {"},{"line_number":609,"context_line":"                               \u0027target\u0027: target_name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_359c1169","line":606,"updated":"2016-11-30 16:50:55.000000000","message":"%(user)s %(target)s  %(error)s","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4476f0fac4ab4f0394bd3d976e599d02e2bb8b4","unresolved":false,"context_lines":[{"line_number":625,"context_line":"                err_msg \u003d (\u0027JovianDSS: Unable to attach\u0027"},{"line_number":626,"context_line":"                           \u0027target %(target)s to\u0027"},{"line_number":627,"context_line":"                           \u0027volume %(volume)s \u0027"},{"line_number":628,"context_line":"                           \u0027because of %{error}s.\u0027 %"},{"line_number":629,"context_line":"                           {\u0027target\u0027: target_name,"},{"line_number":630,"context_line":"                            \u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":631,"context_line":"                            \u0027error\u0027: six.text_type(ex)})"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_f59ff94d","line":628,"updated":"2016-11-30 16:50:55.000000000","message":"pylint fails due to bad format string:\n\n2016-11-29 23:23:39.933468 | cinder/volume/drivers/open_e/iscsi.py:625: [E1300, JovianISCSIDriver._create_new_target_volume] Unsupported format character \u0027{\u0027 (0x7b) at index 77","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4476f0fac4ab4f0394bd3d976e599d02e2bb8b4","unresolved":false,"context_lines":[{"line_number":683,"context_line":"        zvol_info \u003d self.ra.get_zvol_info(self.pool, vname)"},{"line_number":684,"context_line":"        if zvol_info is None:"},{"line_number":685,"context_line":"            LOG.debug(\u0027JovianDSS: Unable to get zvol lun for\u0027"},{"line_number":686,"context_line":"                      \u0027 volume {}.\u0027.format(vname))"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":689,"context_line":"                \u0027JovianDSS: Unable to get\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_35c1712f","line":686,"updated":"2016-11-30 16:50:55.000000000","message":"Please use %s instead of .format().","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4476f0fac4ab4f0394bd3d976e599d02e2bb8b4","unresolved":false,"context_lines":[{"line_number":687,"context_line":""},{"line_number":688,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":689,"context_line":"                \u0027JovianDSS: Unable to get\u0027"},{"line_number":690,"context_line":"                \u0027 zvolume lun for volume {}.\u0027.format(vname))"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"        iscsi_properties \u003d dict()"},{"line_number":693,"context_line":"        iscsi_properties[\u0027target_discovered\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_95e6c5e6","line":690,"updated":"2016-11-30 16:50:55.000000000","message":"Please use %s instead of .format().","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a4476f0fac4ab4f0394bd3d976e599d02e2bb8b4","unresolved":false,"context_lines":[{"line_number":726,"context_line":"        iscsi_properties \u003d self._get_iscsi_properties(volume)"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"        LOG.debug(\"JovianDSS: \""},{"line_number":729,"context_line":"                  \"providing connection info {}\".format(iscsi_properties))"},{"line_number":730,"context_line":"        return {"},{"line_number":731,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":732,"context_line":"            \u0027data\u0027: iscsi_properties,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_f5cd395e","line":729,"updated":"2016-11-30 16:50:55.000000000","message":"Please use %s instead of .format().","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"93c6c63f518bebff44f45b3ecdbd2ee3d907230f","unresolved":false,"context_lines":[{"line_number":734,"context_line":""},{"line_number":735,"context_line":"    def terminate_connection(self, volume, connector, force\u003dFalse, **kwargs):"},{"line_number":736,"context_line":"        \"\"\"Disallow connection from connector.\"\"\""},{"line_number":737,"context_line":"        # TODO(andrei.perepiolkin@open-e.com): change the password."},{"line_number":738,"context_line":"        return"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    def attach_volume(self,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_f78baa1c","line":737,"updated":"2016-11-29 23:50:18.000000000","message":"you should ensure that the volume is no longer exported from the backend, otherwise an iscsi rescan on the host will make the volume show back up, and will be orphaned.","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from cinder.volume.drivers.open_e.jovian_common import jdss_common as jcom"},{"line_number":28,"context_line":"from cinder.volume.drivers.open_e.jovian_common import rest"},{"line_number":29,"context_line":"from cinder.volume.drivers.open_e import options"},{"line_number":30,"context_line":"from oslo_log import log as logging"},{"line_number":31,"context_line":"from oslo_utils import netutils as o_netutils"},{"line_number":32,"context_line":"from oslo_utils import units as o_units"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_fee1072b","line":30,"updated":"2016-12-06 14:16:21.000000000","message":"Please, change imports according to [1]\n\n[1] http://docs.openstack.org/developer/hacking/#imports","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        self.conf[\u0027jovian_password\u0027] \u003d self.configuration.safe_get("},{"line_number":107,"context_line":"            \u0027jovian_password\u0027)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        self.jovian_chap_username \u003d \\"},{"line_number":110,"context_line":"            self.configuration.safe_get(\u0027jovian_chap_username\u0027)"},{"line_number":111,"context_line":"        self.conf[\u0027jovian_chap_username\u0027] \u003d self.configuration.safe_get("},{"line_number":112,"context_line":"            \u0027jovian_chap_username\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_9e4e5339","line":109,"updated":"2016-12-06 14:16:21.000000000","message":"Please, use brackets () instead of \\","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        except exception.JDSSRESTException as ex:"},{"line_number":170,"context_line":"            msg \u003d _LE(\"Create volume error. Because %s.\")"},{"line_number":171,"context_line":"            LOG.error(msg, ex.message)"},{"line_number":172,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":173,"context_line":"                message\u003d(\u0027JovianDSS: Failed to create volume %s.\u0027,"},{"line_number":174,"context_line":"                         volume[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_1e0883d9","line":171,"updated":"2016-12-06 14:16:21.000000000","message":"LOG.error \u003d\u003e LOG.exception","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":173,"context_line":"                message\u003d(\u0027JovianDSS: Failed to create volume %s.\u0027,"},{"line_number":174,"context_line":"                         volume[\u0027id\u0027]))"},{"line_number":175,"context_line":"        ret \u003d {}"},{"line_number":176,"context_line":"        if provider_auth is not None:"},{"line_number":177,"context_line":"            ret[\u0027provider_auth\u0027] \u003d provider_auth"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_5e259b59","line":175,"updated":"2016-12-06 14:16:21.000000000","message":"Could be simplified to:\nret \u003d {\u0027provider_location\u0027: provider_location}","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":203,"context_line":"            self.ra.delete_lun(self.pool, volume_name)"},{"line_number":204,"context_line":"        except exception.JDSSRESTException as err:"},{"line_number":205,"context_line":"            if \"volume is busy\" \u003d\u003d err.args[0]:"},{"line_number":206,"context_line":"                LOG.error(_LE(\u0027Failed to delete volume %s\u0027), volume[\u0027id\u0027])"},{"line_number":207,"context_line":"                raise exception.VolumeIsBusy("},{"line_number":208,"context_line":"                    data\u003d(\u0027Failed to delete volume %s\u0027, volume[\u0027id\u0027]))"},{"line_number":209,"context_line":"            raise exception.VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_1ebde3d7","line":206,"updated":"2016-12-06 14:16:21.000000000","message":"LOG.error \u003d\u003e LOG.exception","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        if \u0027origin\u0027 in volume_info and \u0027replication_driver_data\u0027 in volume:"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"            if (volume_info[\"origin\"] is not None) and\\"},{"line_number":217,"context_line":"                    (volume[\u0027replication_driver_data\u0027] is not None):"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"                rdd_data \u003d volume[\u0027replication_driver_data\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_3ec0df4f","line":216,"updated":"2016-12-06 14:16:21.000000000","message":"\\ \u003d\u003e ()","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                            origin_snapshot)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"                    except exception.JDSSRESTException as err:"},{"line_number":243,"context_line":"                        LOG.debug("},{"line_number":244,"context_line":"                            \"Unable to delete temporal snapshot %(snapshot)s\""},{"line_number":245,"context_line":"                            \" of volume %(volume) with error %(err).\", {"},{"line_number":246,"context_line":"                                \"snapshot\": origin_snapshot,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_beccef89","line":243,"updated":"2016-12-06 14:16:21.000000000","message":"The same","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                               new_size * o_units.Gi)"},{"line_number":265,"context_line":"        except exception.JDSSException:"},{"line_number":266,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":267,"context_line":"                message\u003d(\u0027Failed to extend volume %s.\u0027, volume[\u0027id\u0027]))"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":270,"context_line":"        \"\"\"Create a clone of the specified volume."}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_5eaafb85","line":267,"updated":"2016-12-06 14:16:21.000000000","message":"message should be localizable","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                          \u0027volume\u0027: tmp_snapshot_name})"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":297,"context_line":"                \u0027Failed to create tmp snapshot %(snapshot) for volume\u0027"},{"line_number":298,"context_line":"                \u0027%(volume)\u0027, {"},{"line_number":299,"context_line":"                    \u0027snapshot\u0027: tmp_snapshot_name,"},{"line_number":300,"context_line":"                    \u0027volume\u0027: tmp_snapshot_name})"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_7eadf799","line":297,"updated":"2016-12-06 14:16:21.000000000","message":"The same","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            if \u0027unable to create volume\u0027 in err.args[0]:"},{"line_number":311,"context_line":"                LOG.error(_LE(\u0027Failed to create volume %s.\u0027), volume_name)"},{"line_number":312,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":313,"context_line":"                    \"Unable to create volume.\")"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if src_vref[\u0027size\u0027] \u003c volume[\u0027size\u0027]:"},{"line_number":316,"context_line":"            self.extend_volume(volume, int(volume[\u0027size\u0027]))"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_de9e0b62","line":313,"updated":"2016-12-06 14:16:21.000000000","message":"The same","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                              \u0027snap\u0027: snapshot[\u0027id\u0027]})"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":352,"context_line":"                    \u0027Failed to create volume %(vol)s from snapshot %(snap)s\u0027, {"},{"line_number":353,"context_line":"                        \u0027vol\u0027: volume[\u0027id\u0027],"},{"line_number":354,"context_line":"                        \u0027snap\u0027: snapshot[\u0027id\u0027]})"},{"line_number":355,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_1e8b2320","line":352,"updated":"2016-12-06 14:16:21.000000000","message":"Same","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                snapshot[\u0027id\u0027])"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        except exception.JDSSRESTException as err:"},{"line_number":375,"context_line":"            msg \u003d _LE(\u0027JovianDSS: Failed to create snapshot %(snap)s\u0027"},{"line_number":376,"context_line":"                      \u0027for volume %(vol)s %(msg)s.\u0027) % {"},{"line_number":377,"context_line":"                          \u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":378,"context_line":"                          \u0027vol\u0027: snapshot[\u0027volume_id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_7e84170a","line":375,"updated":"2016-12-06 14:16:21.000000000","message":"ditto","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                        \u0027vol\u0027: snapshot[\u0027volume_id\u0027],"},{"line_number":402,"context_line":"                        \u0027err\u0027: err.message}"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"            LOG.debug(msg)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":407,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_fe702742","line":404,"updated":"2016-12-06 14:16:21.000000000","message":"LOG.debug \u003d\u003e LOG.exception","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":572,"context_line":"                       \u0027because of %(error)s.\u0027 %"},{"line_number":573,"context_line":"                       {\u0027target\u0027: target_name, \u0027error\u0027: ex.message})"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"            LOG.debug(err_msg, resource\u003dvolume)"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"            raise exception.VolumeBackendAPIException(data\u003derr_msg)"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_dec36b36","line":575,"updated":"2016-12-06 14:16:21.000000000","message":"ditto","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":640,"context_line":"                if self.ra.attach_target_vol("},{"line_number":641,"context_line":"                    self.pool,"},{"line_number":642,"context_line":"                    target_name,"},{"line_number":643,"context_line":"                    volume[\"id\"]) \\"},{"line_number":644,"context_line":"                        is False:"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"                    msg \u003d _(\u0027Unable to attach volume %(vol)s to\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_9ed493ec","line":643,"updated":"2016-12-06 14:16:21.000000000","message":"\\ \u003d\u003e ()","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":647,"context_line":"                            \u0027 target %(targ)s\u0027) % {"},{"line_number":648,"context_line":"                                \u0027vol\u0027: volume[id],"},{"line_number":649,"context_line":"                                \u0027targ\u0027: target_name}"},{"line_number":650,"context_line":"                    LOG.debug(msg)"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"                    raise exception.VolumeBackendAPIException("},{"line_number":653,"context_line":"                        message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_3e0a9f8a","line":650,"updated":"2016-12-06 14:16:21.000000000","message":"LOG.debug \u003d\u003e LOG.error","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":655,"context_line":"        else:"},{"line_number":656,"context_line":"            self._create_new_target_volume(volume, target_name)"},{"line_number":657,"context_line":""},{"line_number":658,"context_line":"        return"},{"line_number":659,"context_line":""},{"line_number":660,"context_line":"    def _remove_target_volume(self, volume):"},{"line_number":661,"context_line":"        \"\"\"_remove_target_volume"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_def1ab96","line":658,"updated":"2016-12-06 14:16:21.000000000","message":"no need return here","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":698,"context_line":"            LOG.debug(\u0027Failed to remove resource %(targ) because of %(err).\u0027, {"},{"line_number":699,"context_line":"                \u0027targ\u0027: target_name,"},{"line_number":700,"context_line":"                \u0027err\u0027: str(ex.args[0])})"},{"line_number":701,"context_line":"        return"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"    def _get_iscsi_properties(self, volume):"},{"line_number":704,"context_line":"        \"\"\"Return dict according to cinder/driver.py implementation."}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_de48cbce","line":701,"updated":"2016-12-06 14:16:21.000000000","message":"ditto","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":720,"context_line":"        iscsi_properties \u003d dict()"},{"line_number":721,"context_line":"        iscsi_properties[\u0027target_discovered\u0027] \u003d False"},{"line_number":722,"context_line":"        iscsi_properties[\u0027target_iqn\u0027] \u003d self.jovian_target_prefix + vname"},{"line_number":723,"context_line":"        iscsi_properties[\u0027target_portal\u0027] \u003d \\"},{"line_number":724,"context_line":"            self.jovian_host + \":\" + self.jovian_iscsi_target_portal_port"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"        auth \u003d volume[\u0027provider_auth\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_3e18dfd2","line":723,"updated":"2016-12-06 14:16:21.000000000","message":"\\ \u003d\u003e ()","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":761,"context_line":"                  \"with ip list %(ip_list)s.\" %"},{"line_number":762,"context_line":"                  {\u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":763,"context_line":"                   \u0027ip\u0027: connector[\u0027ip\u0027],"},{"line_number":764,"context_line":"                   \u0027ip_list\u0027: str(ip_settings[\u0027allow_ip\u0027])})"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"        if connector[\u0027ip\u0027] not in ip_settings[\u0027allow_ip\u0027]:"},{"line_number":767,"context_line":"            ip_settings[\u0027allow_ip\u0027].append(connector[\u0027ip\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_5e591b8d","line":764,"updated":"2016-12-06 14:16:21.000000000","message":"Please, use six.text_type instead of str","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":768,"context_line":"            self.ra.set_target_ip_settings(self.pool, target_name, ip_settings)"},{"line_number":769,"context_line":""},{"line_number":770,"context_line":"        LOG.debug(\"JovianDSS: \""},{"line_number":771,"context_line":"                  \"providing connection info %s\", str(iscsi_properties))"},{"line_number":772,"context_line":"        return {"},{"line_number":773,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":774,"context_line":"            \u0027data\u0027: iscsi_properties,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_9e573357","line":771,"updated":"2016-12-06 14:16:21.000000000","message":"ditto","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                       \u0027ip_list\u0027: str(ip_settings[\u0027allow_ip\u0027])})"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"            self.ra.set_target_ip_settings(self.pool, target_name, ip_settings)"},{"line_number":801,"context_line":"        return"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def attach_volume(self,"},{"line_number":804,"context_line":"                      context,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_3ecd3f31","line":801,"updated":"2016-12-06 14:16:21.000000000","message":"Please, remove return","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":800,"context_line":"            self.ra.set_target_ip_settings(self.pool, target_name, ip_settings)"},{"line_number":801,"context_line":"        return"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def attach_volume(self,"},{"line_number":804,"context_line":"                      context,"},{"line_number":805,"context_line":"                      volume,"},{"line_number":806,"context_line":"                      instance_uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_3ec29fe9","line":803,"updated":"2016-12-06 14:16:21.000000000","message":"You can use cinder.utils.trace_method here and below","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.re_tmp_snapshot \u003d re.compile(r\u0027tmp_snapshot:(.+),\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.ra \u003d None"},{"line_number":55,"context_line":"        self.conf \u003d dict()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        LOG.debug(\u0027JovianDSS: Enter JovianISCSIDriver\u0027)"},{"line_number":58,"context_line":"        self.configuration.append_config_values("}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_6f3b9fd1","line":55,"range":{"start_line":55,"start_character":19,"end_line":55,"end_character":26},"updated":"2016-12-12 13:55:44.000000000","message":"{}","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.configuration.append_config_values("},{"line_number":63,"context_line":"            options.jdss_volume_opts)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.test \u003d True"},{"line_number":66,"context_line":"        pass"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_2f6b67ba","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":24},"updated":"2016-12-12 13:55:44.000000000","message":"Are you using this?","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            options.jdss_volume_opts)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        self.test \u003d True"},{"line_number":66,"context_line":"        pass"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @property"},{"line_number":69,"context_line":"    def backend_name(self):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_8f663beb","line":66,"range":{"start_line":66,"start_character":8,"end_line":66,"end_character":12},"updated":"2016-12-12 13:55:44.000000000","message":"Not neededed","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        pass"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @property"},{"line_number":69,"context_line":"    def backend_name(self):"},{"line_number":70,"context_line":"        \"\"\"Return backend name.\"\"\""},{"line_number":71,"context_line":"        backend_name \u003d None"},{"line_number":72,"context_line":"        if self.configuration:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_cf8af363","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":20},"updated":"2016-12-12 13:55:44.000000000","message":"volume_backend_name","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        if not self.ra.is_pool_exists(self.pool):"},{"line_number":128,"context_line":"            msg \u003d _LE(\"Setup is incorrect, please check connection settings.\")"},{"line_number":129,"context_line":"            LOG.error(msg)"},{"line_number":130,"context_line":"            raise exception.VolumeDriverException(\"Bad configuration expected\")"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        if o_netutils.is_valid_ip(self.jovian_host) is False:"},{"line_number":133,"context_line":"            err_msg \u003d (\u0027JovianDSS: Invalid value of jovian_host property:\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_05c6d047","line":130,"range":{"start_line":130,"start_character":50,"end_line":130,"end_character":51},"updated":"2016-12-14 15:52:01.000000000","message":"Needs _()","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            raise exception.VolumeDriverException(\"Bad configuration expected\")"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        if o_netutils.is_valid_ip(self.jovian_host) is False:"},{"line_number":133,"context_line":"            err_msg \u003d (\u0027JovianDSS: Invalid value of jovian_host property:\u0027"},{"line_number":134,"context_line":"                       \u0027%(addr)s, IP address expected.\u0027 %"},{"line_number":135,"context_line":"                       {\u0027addr\u0027: self.jovian_host})"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_45de0812","line":133,"range":{"start_line":133,"start_character":23,"end_line":133,"end_character":24},"updated":"2016-12-14 15:52:01.000000000","message":"_()","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        except exception.JDSSRESTException as ex:"},{"line_number":171,"context_line":"            msg \u003d _LE(\"Create volume error. Because %s.\")"},{"line_number":172,"context_line":"            LOG.exception(msg, ex.message)"},{"line_number":173,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":174,"context_line":"                message\u003d(\u0027JovianDSS: Failed to create volume %s.\u0027,"},{"line_number":175,"context_line":"                         volume[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_e53b9436","line":172,"range":{"start_line":172,"start_character":30,"end_line":172,"end_character":41},"updated":"2016-12-14 15:52:01.000000000","message":"Don\u0027t pass an exception into a LOG.exception call. That will log the exception info twice.\n\nMay be better to just have one string for the raised exception and the LOG.exception call. Then just let the logger log the exception details.","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            msg \u003d _LE(\"Create volume error. Because %s.\")"},{"line_number":172,"context_line":"            LOG.exception(msg, ex.message)"},{"line_number":173,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":174,"context_line":"                message\u003d(\u0027JovianDSS: Failed to create volume %s.\u0027,"},{"line_number":175,"context_line":"                         volume[\u0027id\u0027]))"},{"line_number":176,"context_line":"        ret \u003d {\u0027provider_location\u0027: provider_location}"},{"line_number":177,"context_line":"        if provider_auth is not None:"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_85ff4066","line":174,"range":{"start_line":174,"start_character":24,"end_line":174,"end_character":25},"updated":"2016-12-14 15:52:01.000000000","message":"_()","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                              \u0027snap\u0027: snapshot[\u0027id\u0027]})"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":319,"context_line":"                    _LE(\u0027Failed to create volume %(vol)s from snapshot\u0027"},{"line_number":320,"context_line":"                        \u0027%(snap)s\u0027) % {"},{"line_number":321,"context_line":"                        \u0027vol\u0027: volume[\u0027id\u0027],"},{"line_number":322,"context_line":"                        \u0027snap\u0027: snapshot[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_c5dcd8e6","line":319,"range":{"start_line":319,"start_character":20,"end_line":319,"end_character":24},"updated":"2016-12-14 15:52:01.000000000","message":"_()","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                snapshot[\u0027id\u0027])"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        except exception.JDSSRESTException as err:"},{"line_number":349,"context_line":"            msg \u003d _LE(\u0027JovianDSS: Failed to create snapshot %(snap)s\u0027"},{"line_number":350,"context_line":"                      \u0027for volume %(vol)s %(msg)s.\u0027) % {"},{"line_number":351,"context_line":"                          \u0027snap\u0027: snapshot[\u0027id\u0027],"},{"line_number":352,"context_line":"                          \u0027vol\u0027: snapshot[\u0027volume_id\u0027],"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_05e7b0b0","line":349,"range":{"start_line":349,"start_character":18,"end_line":349,"end_character":21},"updated":"2016-12-14 15:52:01.000000000","message":"Since this is used in the exception, it should just be _()","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                           {"},{"line_number":565,"context_line":"                               \u0027target\u0027: target_name,"},{"line_number":566,"context_line":"                               \u0027user\u0027: chap_cred[\u0027name\u0027],"},{"line_number":567,"context_line":"                               \u0027error\u0027: six.text_type(ex)})"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"                LOG.exception(err_msg, resource\u003dvolume)"},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_85458071","line":567,"range":{"start_line":567,"start_character":40,"end_line":567,"end_character":58},"updated":"2016-12-14 15:52:01.000000000","message":"The full exception detail shouldn\u0027t be returned in the raised exception message.","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":646,"context_line":"                                      volume[\u0027id\u0027])"},{"line_number":647,"context_line":"        except exception.JDSSRESTException as ex:"},{"line_number":648,"context_line":"            msg \u003d (_LE(\u0027Failed to Terminate_connection for target %(targ)s\u0027"},{"line_number":649,"context_line":"                       \u0027because of: %(err)s\u0027) % {"},{"line_number":650,"context_line":"                   \u0027targ\u0027: target_name,"},{"line_number":651,"context_line":"                   \u0027err\u0027: ex.message})"},{"line_number":652,"context_line":"            LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_6051320e","line":649,"range":{"start_line":649,"start_character":46,"end_line":649,"end_character":48},"updated":"2016-12-14 15:52:01.000000000","message":"Move this into the LOG.exception call and let the logger perform the string formatting. Remove ex.message since LOG.exception will log the full exception details.","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":652,"context_line":"            LOG.exception(msg)"},{"line_number":653,"context_line":"        except exception.JDSSRESTResourceNotFoundException as ex:"},{"line_number":654,"context_line":"            msg \u003d (_LE(\u0027Failed to remove resource %(targ)s because of %(err)s.\u0027"},{"line_number":655,"context_line":"                   \"\") % {"},{"line_number":656,"context_line":"                   \u0027targ\u0027: target_name,"},{"line_number":657,"context_line":"                   \u0027err\u0027: ex.message})"},{"line_number":658,"context_line":"            LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_a05b4a2d","line":655,"range":{"start_line":655,"start_character":23,"end_line":655,"end_character":24},"updated":"2016-12-14 15:52:01.000000000","message":"Same","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":672,"context_line":"                      \u0027\u0027, {"},{"line_number":673,"context_line":"                          \u0027targ\u0027: target_name,"},{"line_number":674,"context_line":"                          \u0027err\u0027: six.text_type(ex.args[0])})"},{"line_number":675,"context_line":"        return"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"    def _get_iscsi_properties(self, volume):"},{"line_number":678,"context_line":"        \"\"\"Return dict according to cinder/driver.py implementation."}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_c06926c0","line":675,"range":{"start_line":675,"start_character":8,"end_line":675,"end_character":14},"updated":"2016-12-14 15:52:01.000000000","message":"return not needed here.","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":685,"context_line":"        zvol_info \u003d self.ra.get_zvol_info(self.pool, vname)"},{"line_number":686,"context_line":"        if zvol_info is None:"},{"line_number":687,"context_line":"            LOG.error(_LE(\u0027JovianDSS: Unable to get zvol lun for\u0027"},{"line_number":688,"context_line":"                          \u0027 volume %s.\u0027) % vname)"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":691,"context_line":"                \u0027JovianDSS: Unable to get\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_409c36c0","line":688,"range":{"start_line":688,"start_character":40,"end_line":688,"end_character":42},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":688,"context_line":"                          \u0027 volume %s.\u0027) % vname)"},{"line_number":689,"context_line":""},{"line_number":690,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":691,"context_line":"                \u0027JovianDSS: Unable to get\u0027"},{"line_number":692,"context_line":"                \u0027 zvolume lun for volume %s.\u0027 % vname)"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"        iscsi_properties \u003d dict()"},{"line_number":695,"context_line":"        iscsi_properties[\u0027target_discovered\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_e092a29e","line":692,"range":{"start_line":691,"start_character":16,"end_line":692,"end_character":53},"updated":"2016-12-14 15:52:01.000000000","message":"Since these are pretty much the same, it would be better to have one message (using _() for translation) that is used for the LOG.error call and for the VolumeBackendAPIException message.","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":732,"context_line":"        ip_settings \u003d self.ra.get_target_ip_settings(self.pool, target_name)"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"        LOG.debug(\"JovianDSS: initialize_connection for %(volume)s %(ip)s.\""},{"line_number":735,"context_line":"                  \"with ip list %(ip_list)s.\" %"},{"line_number":736,"context_line":"                  {\u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":737,"context_line":"                   \u0027ip\u0027: connector[\u0027ip\u0027],"},{"line_number":738,"context_line":"                   \u0027ip_list\u0027: six.text_type(ip_settings[\u0027allow_ip\u0027])})"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_00e95e14","line":735,"range":{"start_line":735,"start_character":46,"end_line":735,"end_character":47},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        LOG.debug(\"JovianDSS: \""},{"line_number":745,"context_line":"                  \"providing connection info %s\","},{"line_number":746,"context_line":"                  six.text_type(iscsi_properties))"},{"line_number":747,"context_line":"        return {"},{"line_number":748,"context_line":"            \u0027driver_volume_type\u0027: \u0027iscsi\u0027,"},{"line_number":749,"context_line":"            \u0027data\u0027: iscsi_properties,"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_a0450a18","line":746,"range":{"start_line":746,"start_character":18,"end_line":746,"end_character":31},"updated":"2016-12-14 15:52:01.000000000","message":"Not needed, remove use of six.","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":767,"context_line":"            ip_settings[\u0027allow_ip\u0027].remove(connector[\u0027ip\u0027])"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"            LOG.debug(\"JovianDSS: terminate_connection for %(volume)s %(ip)s.\""},{"line_number":770,"context_line":"                      \"from ip list %(ip_list)s.\" %"},{"line_number":771,"context_line":"                      {\u0027volume\u0027: volume[\u0027id\u0027],"},{"line_number":772,"context_line":"                       \u0027ip\u0027: connector[\u0027ip\u0027],"},{"line_number":773,"context_line":"                       \u0027ip_list\u0027: six.text_type(ip_settings[\u0027allow_ip\u0027])})"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_405fd6e4","line":770,"range":{"start_line":770,"start_character":49,"end_line":770,"end_character":51},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"99fe8b6bfc09d95fde6377271da18e968d783c81","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import math"},{"line_number":19,"context_line":"import random"},{"line_number":20,"context_line":"import re"},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":"import string"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from os_brick.initiator import connector"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_97e924e9","line":21,"updated":"2016-12-14 20:33:06.000000000","message":"six import should be in the below group since it\u0027s not in the Python standard lib.","commit_id":"2732ed47b25d0e14828f5b50266696d7e6b9d55c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"99fe8b6bfc09d95fde6377271da18e968d783c81","unresolved":false,"context_lines":[{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        :raise: :py:exc:`NotImplementedError`"},{"line_number":386,"context_line":"        \"\"\""},{"line_number":387,"context_line":"        raise NotImplementedError"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def _get_provider_auth(self):"},{"line_number":390,"context_line":"        \"\"\"Get provider authentication for the volume."}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_f72fb885","line":387,"updated":"2016-12-14 20:33:06.000000000","message":"Should be NotImplementedError().","commit_id":"2732ed47b25d0e14828f5b50266696d7e6b9d55c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                _(\"Bad configuration expected\"))"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        if o_netutils.is_valid_ip(self.jovian_host) is False:"},{"line_number":132,"context_line":"            err_msg \u003d (_(\u0027JovianDSS: Invalid value of jovian_host property:\u0027"},{"line_number":133,"context_line":"                       \u0027%(addr)s, IP address expected.\u0027) %"},{"line_number":134,"context_line":"                       {\u0027addr\u0027: self.jovian_host})"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_7bf0e5fe","line":132,"updated":"2016-12-15 03:59:04.000000000","message":"Change to _LE so it goes to LOG.error below.  Additional comment on line 137 suggest that this message should not go to the exception.","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                       \u0027%(addr)s, IP address expected.\u0027) %"},{"line_number":134,"context_line":"                       {\u0027addr\u0027: self.jovian_host})"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            LOG.debug(err_msg)"},{"line_number":137,"context_line":"            raise exception.InvalidConfigurationValue(err_msg)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # TODO(andrei.perepiolkin@open-e.com): Provide additional checks"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_7b2d4594","line":136,"updated":"2016-12-15 03:59:04.000000000","message":"Change to LOG.error(err_msg)\n\nerr_msg has _ so it should not be in debug msg.","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                       {\u0027addr\u0027: self.jovian_host})"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            LOG.debug(err_msg)"},{"line_number":137,"context_line":"            raise exception.InvalidConfigurationValue(err_msg)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    # TODO(andrei.perepiolkin@open-e.com): Provide additional checks"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_db43b940","line":137,"updated":"2016-12-15 03:59:04.000000000","message":"Please specify \"value\" and \"option\" for the above exception.\n\nclass InvalidConfigurationValue(Invalid):\n    message \u003d _(\u0027Value \"%(value)s\" is not valid for \u0027\n                \u0027configuration option \"%(option)s\"\u0027)","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        except exception.JDSSRESTException:"},{"line_number":170,"context_line":"            msg \u003d _(\"Create volume %s failed.\") % vname"},{"line_number":171,"context_line":"            LOG.exception(msg)"},{"line_number":172,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        ret \u003d {\u0027provider_location\u0027: provider_location}"},{"line_number":175,"context_line":"        if provider_auth is not None:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_5b6089a5","line":172,"updated":"2016-12-15 03:59:04.000000000","message":"VolumeBackendAPIException(data\u003dmsg)","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        except exception.JDSSRESTException as err:"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":203,"context_line":"                _(\"Fail during volume deletion.\"))"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def extend_volume(self, volume, new_size):"},{"line_number":206,"context_line":"        \"\"\"Extend an existing volume."}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_bb5b5df5","line":203,"updated":"2016-12-15 03:59:04.000000000","message":"Failed","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                               new_size * o_units.Gi)"},{"line_number":217,"context_line":"        except exception.JDSSException:"},{"line_number":218,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":219,"context_line":"                _(\u0027Failed to extend volume %s.\u0027) % volume[\u0027id\u0027])"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def create_cloned_volume(self, volume, src_vref):"},{"line_number":222,"context_line":"        \"\"\"Create a clone of the specified volume."}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_db22d951","line":219,"updated":"2016-12-15 03:59:04.000000000","message":"data\u003dmsg","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                    _(\u0027Failed to create volume %(vol)s from snapshot\u0027"},{"line_number":318,"context_line":"                        \u0027%(snap)s\u0027) % {"},{"line_number":319,"context_line":"                        \u0027vol\u0027: volume[\u0027id\u0027],"},{"line_number":320,"context_line":"                        \u0027snap\u0027: snapshot[\u0027id\u0027]})"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        volume_bar \u003d copy.copy(volume)"},{"line_number":323,"context_line":"        volume_bar[\u0027id\u0027] \u003d volume[\u0027id\u0027] + \u0027-clone\u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_7b0c65ed","line":320,"updated":"2016-12-15 03:59:04.000000000","message":"data\u003dmsg","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"            LOG.exception(msg)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def delete_snapshot(self, snapshot):"},{"line_number":357,"context_line":"        \"\"\"Delete snapshot of existing volume."}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_1b0291b4","line":354,"updated":"2016-12-15 03:59:04.000000000","message":"data\u003dmsg","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":373,"context_line":""},{"line_number":374,"context_line":"            LOG.exception(msg)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def local_path(self, volume):"},{"line_number":379,"context_line":"        \"\"\"Return local path to existing local volume."}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_bbe0bdfb","line":376,"updated":"2016-12-15 03:59:04.000000000","message":"data\u003dmsg","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":543,"context_line":""},{"line_number":544,"context_line":"            LOG.exception(err_msg, resource\u003dvolume)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            raise exception.VolumeBackendAPIException(err_msg)"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"        if use_chap:"},{"line_number":549,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_9bb22105","line":546,"updated":"2016-12-15 03:59:04.000000000","message":"data\u003derr_msg","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":"                    LOG.error(msg)"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"                    raise exception.VolumeBackendAPIException(msg)"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        else:"},{"line_number":619,"context_line":"            self._create_new_target_volume(volume, target_name)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_1bc7f164","line":616,"updated":"2016-12-15 03:59:04.000000000","message":"data\u003dmsg","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":670,"context_line":"                   vname)"},{"line_number":671,"context_line":"            LOG.error(msg)"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"        iscsi_properties \u003d dict()"},{"line_number":676,"context_line":"        iscsi_properties[\u0027target_discovered\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_fb94f543","line":673,"updated":"2016-12-15 03:59:04.000000000","message":"data\u003dmsg","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f791e536292164349a58279eab01eac88f8794c1","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                              \u0027snap\u0027: snapshot[\u0027id\u0027]})"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":321,"context_line":"                    _(\u0027Failed to create volume %(vol)s from snapshot\u0027"},{"line_number":322,"context_line":"                        \u0027%(snap)s\u0027) % {"},{"line_number":323,"context_line":"                        \u0027vol\u0027: volume[\u0027id\u0027],"},{"line_number":324,"context_line":"                        \u0027snap\u0027: snapshot[\u0027id\u0027]})"}],"source_content_type":"text/x-python","patch_set":29,"id":"1a6eadb0_082dc594","line":321,"updated":"2016-12-15 18:11:19.000000000","message":"data\u003d_(\u0027xxxx\u0027)","commit_id":"6e91f596572f2513cbfcf99959f4714bdfc89fb8"}],"cinder/volume/drivers/open_e/jdss_exception.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1912d482037c3578f02a7fd7146e0432afe7d6ba","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class JDSSException(Exception):"},{"line_number":18,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_680f702e","line":17,"updated":"2016-11-24 15:07:54.000000000","message":"Please, move it to cinder.exception module","commit_id":"65bea4b57f3224242c2639b15b40c549cf3bd011"}],"cinder/volume/drivers/open_e/jovian_common/__init__.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1912d482037c3578f02a7fd7146e0432afe7d6ba","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright (c) 2016 Open-E, Inc."},{"line_number":2,"context_line":"#    All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_285bb82f","line":1,"updated":"2016-11-24 15:07:54.000000000","message":"You don\u0027t need a license header in empty files","commit_id":"65bea4b57f3224242c2639b15b40c549cf3bd011"}],"cinder/volume/drivers/open_e/jovian_common/exception.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1912d482037c3578f02a7fd7146e0432afe7d6ba","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from ..jdss_exception import JDSSException"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class JDSSRESTException(JDSSException):"},{"line_number":20,"context_line":"    pass"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_a847c849","line":19,"updated":"2016-11-24 15:07:54.000000000","message":"The same","commit_id":"65bea4b57f3224242c2639b15b40c549cf3bd011"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"905d9be7c43536a9e4739564f9b93828c6698b57","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class UnknownPool(JDSSException):"},{"line_number":41,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a74a57a_cf3da590","line":41,"updated":"2016-11-27 20:36:45.000000000","message":"I would expect to see some specify messages if you override CinderException.\n\nAlso can you move all these to cinder/exception.py?","commit_id":"3b4ccff5c934fc0b996753f2226e7bff6dcf740e"}],"cinder/volume/drivers/open_e/jovian_common/jdss_common.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1912d482037c3578f02a7fd7146e0432afe7d6ba","unresolved":false,"context_lines":[{"line_number":23,"context_line":"max_volume_name_size \u003d 32"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def command(cmd):"},{"line_number":27,"context_line":"    import os"},{"line_number":28,"context_line":"    pipe \u003d os.popen(\u0027{ \u0027 + cmd + \u0027; } 2\u003e\u00261\u0027, \u0027r\u0027)"},{"line_number":29,"context_line":"    text \u003d pipe.read()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_08599cfe","line":26,"updated":"2016-11-24 15:07:54.000000000","message":"Please, use oslo.privsep to run external commands","commit_id":"65bea4b57f3224242c2639b15b40c549cf3bd011"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1912d482037c3578f02a7fd7146e0432afe7d6ba","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return False"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def iscsiadm_discovery_target(target_name, host):"},{"line_number":79,"context_line":"    res \u003d command(\u0027iscsiadm -m discovery -t st -p {}\u0027.format(host))"},{"line_number":80,"context_line":"    t0 \u003d time()"},{"line_number":81,"context_line":"    while target_name not in res:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_a868a888","line":78,"updated":"2016-11-24 15:07:54.000000000","message":"Can we re-use os-brick here?","commit_id":"65bea4b57f3224242c2639b15b40c549cf3bd011"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Common resources for JovianDSS driver.\"\"\""},{"line_number":17,"context_line":"max_volume_name_size \u003d 96"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def origin_snapshot(origin_str):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_7e6fb7fb","line":17,"updated":"2016-12-06 14:16:21.000000000","message":"Constants should be named in UPPER_CASE","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Common resources for JovianDSS driver.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def origin_snapshot(origin_str):"},{"line_number":20,"context_line":"    return origin_str.split(\"@\")[1]"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_2069fa8b","line":17,"updated":"2016-12-14 15:52:01.000000000","message":"These don\u0027t appear to be used anywhere. I think this whole file can be removed.","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"}],"cinder/volume/drivers/open_e/jovian_common/rest.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1912d482037c3578f02a7fd7146e0432afe7d6ba","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from . import rest_proxy"},{"line_number":17,"context_line":"from . import jdss_common as jcom"},{"line_number":18,"context_line":"from . import exception as jexc"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_e82f003c","line":16,"updated":"2016-11-24 15:07:54.000000000","message":"According to [1] Do not make relative imports\n\n[1] http://docs.openstack.org/developer/hacking/","commit_id":"65bea4b57f3224242c2639b15b40c549cf3bd011"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1912d482037c3578f02a7fd7146e0432afe7d6ba","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        :param config: config is like dict"},{"line_number":27,"context_line":"        \"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        self.LOG \u003d LOG"},{"line_number":30,"context_line":"        self.url \u003d config.get(\u0027jovian_rest_protocol\u0027, \u0027https\u0027) + \u0027://\u0027 + \\"},{"line_number":31,"context_line":"            config.get(\u0027jovian_host\u0027) + \u0027:\u0027 + \\"},{"line_number":32,"context_line":"            str(config.get(\u0027jovian_rest_port\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_0827dc64","line":29,"updated":"2016-11-24 15:07:54.000000000","message":"I don\u0027t thins that we really need instance-level logger","commit_id":"65bea4b57f3224242c2639b15b40c549cf3bd011"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, config):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        self.url \u003d config.get(\u0027jovian_rest_protocol\u0027, \u0027https\u0027) + \u0027://\u0027 + \\"},{"line_number":33,"context_line":"            config.get(\u0027jovian_host\u0027) + \u0027:\u0027 + \\"},{"line_number":34,"context_line":"            str(config.get(\u0027jovian_rest_port\u0027))"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_fe7bc7bb","line":32,"updated":"2016-12-06 14:16:21.000000000","message":"\\ \u003d\u003e ()","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ba016726a395ca863ab43e8fbd6ae84c68470bb7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        path \u003d self.api_path + \u0027/pools/\u0027 + pool_name"},{"line_number":52,"context_line":"        req \u003d self.url + path"},{"line_number":53,"context_line":"        LOG.debug(\"JovianDSS: check pool: {}\".format(req))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        resp \u003d self.rproxy.request(\u0027GET\u0027, req)"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_5e43db6b","line":53,"updated":"2016-12-06 14:16:21.000000000","message":"Please, don\u0027t use format call for log messages","commit_id":"1cdc941afe806d814c3da3804794b9dfaf02686b"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"cd26b68a903b1170abbc0c3cb34761afb54d5888","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                                          volume_name)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def extend_lun(self, pool_name, volume_name, volume_size):"},{"line_number":122,"context_line":"        \"\"\"create_volume."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        PUT /pools/\u003cstring:poolname\u003e/volumes/\u003cstring:volume_name\u003e"},{"line_number":125,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a6eadb0_8a3dbbbd","line":122,"range":{"start_line":122,"start_character":11,"end_line":122,"end_character":24},"updated":"2016-12-13 20:10:33.000000000","message":"extend_volume","commit_id":"215cbc0d8517bf35d9cc6dde7787d1b17a8313be"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"cd26b68a903b1170abbc0c3cb34761afb54d5888","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            raise exception.JDSSRESTException("},{"line_number":144,"context_line":"                \u0027Failed to extend volume %s\u0027 % resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        raise exception.JDSSRESTException(\u0027Failed to create volume.\u0027)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def is_lun(self, pool_name, volume_name):"},{"line_number":149,"context_line":"        \"\"\"is_lun."}],"source_content_type":"text/x-python","patch_set":17,"id":"1a6eadb0_6a0dbf3d","line":146,"range":{"start_line":146,"start_character":53,"end_line":146,"end_character":59},"updated":"2016-12-13 20:10:33.000000000","message":"s/create/extend","commit_id":"215cbc0d8517bf35d9cc6dde7787d1b17a8313be"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"cd26b68a903b1170abbc0c3cb34761afb54d5888","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        LOG.debug(\"JovianDSS: check target [url]: %s.\", req)"},{"line_number":353,"context_line":"        resp \u003d self.rproxy.request(\u0027GET\u0027, req)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        if resp[\"error\"] is not None or not ("},{"line_number":356,"context_line":"                resp[\"code\"] \u003d\u003d 200 or resp[\"code\"] \u003d\u003d 201):"},{"line_number":357,"context_line":"            return False"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        if \"name\" in resp[\"data\"]:"},{"line_number":360,"context_line":"            if resp[\"data\"][\"name\"] \u003d\u003d target_name:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a6eadb0_5586e413","line":357,"range":{"start_line":355,"start_character":8,"end_line":357,"end_character":24},"updated":"2016-12-13 20:10:33.000000000","message":"You don\u0027t need this since you\u0027re returning false anyway if the condition below is not satisfied.","commit_id":"215cbc0d8517bf35d9cc6dde7787d1b17a8313be"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"cd26b68a903b1170abbc0c3cb34761afb54d5888","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        if \"name\" in resp[\"data\"]:"},{"line_number":360,"context_line":"            if resp[\"data\"][\"name\"] \u003d\u003d target_name:"},{"line_number":361,"context_line":"                LOG.debug("},{"line_number":362,"context_line":"                    \"JovianDSS: Request: %s SCCESS, taget found.\", req)"},{"line_number":363,"context_line":"                return True"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a6eadb0_f58ff020","line":362,"range":{"start_line":362,"start_character":44,"end_line":362,"end_character":50},"updated":"2016-12-13 20:10:33.000000000","message":"SUCCESS?","commit_id":"215cbc0d8517bf35d9cc6dde7787d1b17a8313be"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"cd26b68a903b1170abbc0c3cb34761afb54d5888","unresolved":false,"context_lines":[{"line_number":867,"context_line":"        else:"},{"line_number":868,"context_line":"            resp \u003d self.rproxy.request(\u0027DELETE\u0027, req)"},{"line_number":869,"context_line":""},{"line_number":870,"context_line":"        if ((resp[\"code\"] \u003d\u003d 200) or"},{"line_number":871,"context_line":"                (resp[\"code\"] \u003d\u003d 201) or"},{"line_number":872,"context_line":"                (resp[\"code\"] \u003d\u003d 204)):"},{"line_number":873,"context_line":"            LOG.debug("},{"line_number":874,"context_line":"                \"JovianDSS: Snapshot DELETE SUCCESS exiting. %s\" % req)"},{"line_number":875,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a6eadb0_700dae3d","line":872,"range":{"start_line":870,"start_character":8,"end_line":872,"end_character":39},"updated":"2016-12-13 20:10:33.000000000","message":"This verification (or others very similar to this) is being repeated in all functions as well as \"req \u003d self.url + path\". Why don\u0027t you create a function to avoid these duplicated code?\nIt would make it more readable and organized.","commit_id":"215cbc0d8517bf35d9cc6dde7787d1b17a8313be"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.rproxy \u003d rest_proxy.JovianRESTProxy(config)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def is_pool_exists(self, pool_name):"},{"line_number":46,"context_line":"        \"\"\"is_pool_exists."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        GET"},{"line_number":49,"context_line":"        /pools/\u003cstring:poolname\u003e"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_80272e63","line":46,"range":{"start_line":46,"start_character":11,"end_line":46,"end_character":25},"updated":"2016-12-14 15:52:01.000000000","message":"Don\u0027t repeat method name for docstring descriptions.","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        req \u003d self.url + path"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        LOG.debug(\"JovianDSS: create lun: %s.\" % req)"},{"line_number":106,"context_line":"        resp \u003d self.rproxy.request(\u0027POST\u0027, req, json_data\u003djbody)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        if resp[\"error\"] is None and ("}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_60d77223","line":105,"range":{"start_line":105,"start_character":46,"end_line":105,"end_character":48},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        req \u003d self.url + path"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        LOG.debug(\"JovianDSS: extend lun: %s.\" % req)"},{"line_number":137,"context_line":"        resp \u003d self.rproxy.request(\u0027PUT\u0027, req, json_data\u003djbody)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if resp[\"error\"] is None and resp[\"code\"] \u003d\u003d 201:"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_c0e846e5","line":136,"range":{"start_line":136,"start_character":46,"end_line":136,"end_character":48},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":259,"context_line":"            if \u0027errno\u0027 in resp[\u0027error\u0027]:"},{"line_number":260,"context_line":"                if resp[\u0027error\u0027][\u0027errno\u0027] \u003d\u003d 1000:"},{"line_number":261,"context_line":"                    if \u0027volume has children\u0027 in resp[\u0027error\u0027][\u0027message\u0027]:"},{"line_number":262,"context_line":"                        LOG.error(_LE(\u0027Failed to delete volume %s\u0027) %"},{"line_number":263,"context_line":"                                  volume_name)"},{"line_number":264,"context_line":"                        message \u003d ("},{"line_number":265,"context_line":"                            _(\u0027Failed to delete volume %s\u0027) % volume_name)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_20c57a5a","line":262,"range":{"start_line":262,"start_character":67,"end_line":262,"end_character":69},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                raise exception.JDSSRESTException(resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        else:"},{"line_number":299,"context_line":"            raise exception.JDSSRESTException(\"Pool isn\u0027t exist\")"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def get_zvol_info(self, pool_name, lun_name):"},{"line_number":302,"context_line":"        \"\"\"get_zvol_info."}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_a0afca92","line":299,"range":{"start_line":299,"start_character":46,"end_line":299,"end_character":47},"updated":"2016-12-14 15:52:01.000000000","message":"_()","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        # of different error cases"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        raise exception.JDSSRESTException("},{"line_number":336,"context_line":"            \u0027Failed to get zvol %s.\u0027 % resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def is_target(self, pool_name, target_name):"},{"line_number":339,"context_line":"        \"\"\"is_target."}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_00a15ea3","line":336,"range":{"start_line":336,"start_character":12,"end_line":336,"end_character":13},"updated":"2016-12-14 15:52:01.000000000","message":"_()","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        # TODO(andrei.perepiolkin@open-e.com): provide additional handling"},{"line_number":408,"context_line":"        # of different error cases"},{"line_number":409,"context_line":"        msg \u003d _LE(\u0027Failed to create target %s.\u0027) % resp[\u0027error\u0027][\u0027message\u0027]"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        raise exception.JDSSRESTException(msg)"},{"line_number":412,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_809ace61","line":409,"range":{"start_line":409,"start_character":14,"end_line":409,"end_character":17},"updated":"2016-12-14 15:52:01.000000000","message":"_()","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":595,"context_line":"        req \u003d self.url + path"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"        LOG.debug("},{"line_number":598,"context_line":"            \"JovianDSS: User %(name)s Pwd %(pwd)s for target %(targ)s.\" % {"},{"line_number":599,"context_line":"                \u0027name\u0027: chap_cred[\"name\"],"},{"line_number":600,"context_line":"                \u0027pwd\u0027: chap_cred[\"password\"],"},{"line_number":601,"context_line":"                \u0027targ\u0027: target_name})"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_60ba12c2","line":598,"range":{"start_line":598,"start_character":71,"end_line":598,"end_character":73},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":612,"context_line":"        # of different error cases"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        raise exception.JDSSRESTException("},{"line_number":615,"context_line":"            \u0027Failed to set target user %s.\u0027 % resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"    def is_target_lun(self, pool_name, target_name, lun_name):"},{"line_number":618,"context_line":"        \"\"\"is_target_lun."}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_a0b42ad1","line":615,"range":{"start_line":615,"start_character":12,"end_line":615,"end_character":13},"updated":"2016-12-14 15:52:01.000000000","message":"_()","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":677,"context_line":"        # of different error cases"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        raise exception.JDSSRESTException("},{"line_number":680,"context_line":"            \u0027Failed to attach volume %s.\u0027 % resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"    def detach_target_vol(self, pool_name, target_name, lun_name):"},{"line_number":683,"context_line":"        \"\"\"detach_target_vol."}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_00c6be47","line":680,"range":{"start_line":680,"start_character":12,"end_line":680,"end_character":13},"updated":"2016-12-14 15:52:01.000000000","message":"_()","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":699,"context_line":""},{"line_number":700,"context_line":"        LOG.debug("},{"line_number":701,"context_line":"            \"JovianDSS: Detach lun %(lun)s from target %(targ)s to: %(url)s\""},{"line_number":702,"context_line":"            \"\" % {"},{"line_number":703,"context_line":"                \u0027lun\u0027: lun_name,"},{"line_number":704,"context_line":"                \u0027targ\u0027: target_name,"},{"line_number":705,"context_line":"                \u0027url\u0027: path})"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_60e132d0","line":702,"range":{"start_line":702,"start_character":15,"end_line":702,"end_character":16},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":742,"context_line":"            \u0027snapshot_name\u0027: snapshot_name"},{"line_number":743,"context_line":"        }"},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"        LOG.debug(\"JovianDSS: create snapshot [url]: %s\" % req)"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"        resp \u003d self.rproxy.request(\u0027POST\u0027, req, json_data\u003djbody)"},{"line_number":748,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_c0d20600","line":745,"range":{"start_line":745,"start_character":56,"end_line":745,"end_character":57},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":779,"context_line":""},{"line_number":780,"context_line":"        req \u003d self.url + path"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"        LOG.debug(\"JovianDSS: create volume from snapshot: %s\" % req)"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"        resp \u003d self.rproxy.request(\u0027POST\u0027, req, json_data\u003djbody)"},{"line_number":785,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_00ddde0d","line":782,"range":{"start_line":782,"start_character":62,"end_line":782,"end_character":64},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        req \u003d self.url + path"},{"line_number":812,"context_line":"        LOG.debug("},{"line_number":813,"context_line":"            \"JovianDSS: Get snapshot properties: %s\" % req)"},{"line_number":814,"context_line":""},{"line_number":815,"context_line":"        resp \u003d self.rproxy.request(\u0027GET\u0027, req)"},{"line_number":816,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_e0f46288","line":813,"range":{"start_line":813,"start_character":53,"end_line":813,"end_character":54},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":850,"context_line":"                \u0027/volumes/\u0027 + volume_name + \u0027/snapshots/\u0027 + snapshot_name)"},{"line_number":851,"context_line":""},{"line_number":852,"context_line":"        req \u003d self.url + path"},{"line_number":853,"context_line":"        LOG.debug(\"JovianDSS: delete snapshot: %s\" % req)"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        jbody \u003d {}"},{"line_number":856,"context_line":"        if recursively_children is True:"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_402c3602","line":853,"range":{"start_line":853,"start_character":50,"end_line":853,"end_character":52},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":871,"context_line":"                (resp[\"code\"] \u003d\u003d 201) or"},{"line_number":872,"context_line":"                (resp[\"code\"] \u003d\u003d 204)):"},{"line_number":873,"context_line":"            LOG.debug("},{"line_number":874,"context_line":"                \"JovianDSS: Snapshot DELETE SUCCESS exiting. %s\" % req)"},{"line_number":875,"context_line":"            return"},{"line_number":876,"context_line":"        # TODO(andrei.perepiolkin@open-e.com): analise error"},{"line_number":877,"context_line":"        raise exception.JDSSRESTException(_(\u0027Unable to delete snapshot\u0027))"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_c04046a8","line":874,"range":{"start_line":874,"start_character":65,"end_line":874,"end_character":66},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":914,"context_line":""},{"line_number":915,"context_line":"        req \u003d self.url + path"},{"line_number":916,"context_line":"        LOG.debug("},{"line_number":917,"context_line":"            \"JovianDSS: Get snapshot properties: %s.\" % req)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"        resp \u003d self.rproxy.request(\u0027GET\u0027, req)"},{"line_number":920,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_20465abf","line":917,"range":{"start_line":917,"start_character":54,"end_line":917,"end_character":55},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":988,"context_line":"        \"\"\""},{"line_number":989,"context_line":"        path \u003d self.api_path + \u0027/pools/\u0027 + pool_name"},{"line_number":990,"context_line":"        req \u003d self.url + path"},{"line_number":991,"context_line":"        LOG.debug(\"JovianDSS: get pool fsprops: %s.\" % req)"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"        resp \u003d self.rproxy.request(\u0027GET\u0027, req)"},{"line_number":994,"context_line":"        if resp[\"error\"] is None and resp[\"code\"] \u003d\u003d 200:"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_e022a200","line":991,"range":{"start_line":991,"start_character":53,"end_line":991,"end_character":54},"updated":"2016-12-14 15:52:01.000000000","message":"% \u003e ,","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"99fe8b6bfc09d95fde6377271da18e968d783c81","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\"\"\"REST cmd interoperation class for JovianDSS driver.\"\"\""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder.i18n import _, _LE"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_8c791bcb","line":20,"updated":"2016-12-14 20:33:06.000000000","message":"The six import and oslo_log imports should be in the same group, since they are both non-stdlib imports.","commit_id":"2732ed47b25d0e14828f5b50266696d7e6b9d55c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        if resp[\"error\"] is not None:"},{"line_number":142,"context_line":"            raise exception.JDSSRESTException("},{"line_number":143,"context_line":"                \u0027Failed to extend volume %s\u0027 % resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        raise exception.JDSSRESTException(\u0027Failed to extend volume.\u0027)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_d8fadf74","line":143,"updated":"2016-12-15 03:59:04.000000000","message":"Need _ like line 117.","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            raise exception.JDSSRESTException("},{"line_number":143,"context_line":"                \u0027Failed to extend volume %s\u0027 % resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        raise exception.JDSSRESTException(\u0027Failed to extend volume.\u0027)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def is_lun(self, pool_name, volume_name):"},{"line_number":148,"context_line":"        \"\"\"Check if volume exists."}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_98330762","line":145,"updated":"2016-12-15 03:59:04.000000000","message":"Same","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                        LOG.error(_LE(\u0027Failed to delete volume %s\u0027),"},{"line_number":262,"context_line":"                                  volume_name)"},{"line_number":263,"context_line":"                        message \u003d ("},{"line_number":264,"context_line":"                            _(\u0027Failed to delete volume %s\u0027) % volume_name)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"                        raise exception.VolumeIsBusy(message\u003dmessage)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_f8da3be7","line":264,"updated":"2016-12-15 03:59:04.000000000","message":"See comment below.  No need for line 263-264.","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                        message \u003d ("},{"line_number":264,"context_line":"                            _(\u0027Failed to delete volume %s\u0027) % volume_name)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"                        raise exception.VolumeIsBusy(message\u003dmessage)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        if resp[\u0027error\u0027] is not None:"},{"line_number":269,"context_line":"            if \u0027errno\u0027 in resp[\u0027error\u0027]:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_384af3ac","line":266,"updated":"2016-12-15 03:59:04.000000000","message":"exception.VolumeIsBusy(volume_name\u003dvolume_name)","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            if resp[\u0027error\u0027] is None and resp[\u0027code\u0027] \u003d\u003d 200:"},{"line_number":293,"context_line":"                return resp[\u0027data\u0027]"},{"line_number":294,"context_line":"            else:"},{"line_number":295,"context_line":"                raise exception.JDSSRESTException(resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        else:"},{"line_number":298,"context_line":"            raise exception.JDSSRESTException(_(\"Pool isn\u0027t exist\"))"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_388f53cd","line":295,"updated":"2016-12-15 03:59:04.000000000","message":"Need _\n\nmsg \u003d _(\u0027Failed to get targets: %s\u0027) % resp[\u0027error\u0027][\u0027message\u0027]\n\nraise exception.JDSSRESTException(msg)","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                raise exception.JDSSRESTException(resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        else:"},{"line_number":298,"context_line":"            raise exception.JDSSRESTException(_(\"Pool isn\u0027t exist\"))"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def get_zvol_info(self, pool_name, lun_name):"},{"line_number":301,"context_line":"        \"\"\"Get volume info."}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_d8b2df93","line":298,"updated":"2016-12-15 03:59:04.000000000","message":"s/isn\u0027t/doesn\u0027t","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        # TODO(andrei.perepiolkin@open-e.com): provide additional handling"},{"line_number":407,"context_line":"        # of different error cases"},{"line_number":408,"context_line":"        msg \u003d _(\u0027Failed to create target %s.\u0027), resp[\u0027error\u0027][\u0027message\u0027]"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"        raise exception.JDSSRESTException(msg)"},{"line_number":411,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_d879ffc9","line":408,"updated":"2016-12-15 03:59:04.000000000","message":"This should be \"%\" instead of \",\".  Otherwise the message won\u0027t come out properly.","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":477,"context_line":""},{"line_number":478,"context_line":"        if resp[\u0027error\u0027] is not None or resp[\u0027code\u0027] !\u003d 201:"},{"line_number":479,"context_line":"            if resp[\u0027error\u0027][\u0027message\u0027]:"},{"line_number":480,"context_line":"                raise exception.JDSSRESTException(resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":481,"context_line":"            else:"},{"line_number":482,"context_line":"                raise exception.JDSSRESTException(_(\u0027Something wrong\u0027))"},{"line_number":483,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_d8273fc8","line":480,"updated":"2016-12-15 03:59:04.000000000","message":"Need _","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":510,"context_line":"                resp[\u0027code\u0027] \u003d\u003d 200 or"},{"line_number":511,"context_line":"                resp[\u0027code\u0027] \u003d\u003d 201):"},{"line_number":512,"context_line":"            if resp[\u0027error\u0027][\u0027message\u0027]:"},{"line_number":513,"context_line":"                raise exception.JDSSRESTException(resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":514,"context_line":"            else:"},{"line_number":515,"context_line":"                raise exception.JDSSRESTException("},{"line_number":516,"context_line":"                    _(\u0027Unable to get target %s info.\u0027) % target_name)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_382bd395","line":513,"updated":"2016-12-15 03:59:04.000000000","message":"Need _","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":550,"context_line":"                resp[\u0027code\u0027] \u003d\u003d 201):"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"            if resp[\u0027error\u0027][\u0027message\u0027]:"},{"line_number":553,"context_line":"                raise exception.JDSSRESTException(resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":554,"context_line":"            else:"},{"line_number":555,"context_line":"                raise exception.JDSSRESTException("},{"line_number":556,"context_line":"                    _(\u0027Unable to get target %s settings.\u0027) % target_name)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_9810675b","line":553,"updated":"2016-12-15 03:59:04.000000000","message":"Need _","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                resp[\u0027code\u0027] \u003d\u003d 200 or"},{"line_number":569,"context_line":"                resp[\u0027code\u0027] \u003d\u003d 201):"},{"line_number":570,"context_line":"            if resp[\u0027error\u0027][\u0027message\u0027]:"},{"line_number":571,"context_line":"                raise exception.JDSSRESTException(resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":572,"context_line":"            else:"},{"line_number":573,"context_line":"                raise exception.JDSSRESTException("},{"line_number":574,"context_line":"                    _(\u0027Unable to set target %s settings.\u0027) % target_name)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_d80e5f3a","line":571,"updated":"2016-12-15 03:59:04.000000000","message":"Need _","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":611,"context_line":"        # of different error cases"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"        raise exception.JDSSRESTException("},{"line_number":614,"context_line":"            _LE(\u0027Failed to set target user %s.\u0027) % resp[\u0027error\u0027][\u0027message\u0027])"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"    def is_target_lun(self, pool_name, target_name, lun_name):"},{"line_number":617,"context_line":"        \"\"\"Check whether specified volume attached to specified target."}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_f80b1b28","line":614,"updated":"2016-12-15 03:59:04.000000000","message":"Please use _(\u0027xxxx\u0027).  Remove LE","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f791e536292164349a58279eab01eac88f8794c1","unresolved":false,"context_lines":[{"line_number":260,"context_line":"                    if \u0027volume has children\u0027 in resp[\u0027error\u0027][\u0027message\u0027]:"},{"line_number":261,"context_line":"                        LOG.error(_LE(\u0027Failed to delete volume %s\u0027),"},{"line_number":262,"context_line":"                                  volume_name)"},{"line_number":263,"context_line":"                        message \u003d ("},{"line_number":264,"context_line":"                            _(\u0027Failed to delete volume %s\u0027) % volume_name)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"                        raise exception.VolumeIsBusy(message\u003dmessage)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"1a6eadb0_68df1969","line":264,"range":{"start_line":263,"start_character":0,"end_line":264,"end_character":74},"updated":"2016-12-15 18:11:19.000000000","message":"Remove this line.  VolumeIsBusy below needs to set volume_name, not message.","commit_id":"6e91f596572f2513cbfcf99959f4714bdfc89fb8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f791e536292164349a58279eab01eac88f8794c1","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                        message \u003d ("},{"line_number":264,"context_line":"                            _(\u0027Failed to delete volume %s\u0027) % volume_name)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"                        raise exception.VolumeIsBusy(message\u003dmessage)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        if resp[\u0027error\u0027] is not None:"},{"line_number":269,"context_line":"            if \u0027errno\u0027 in resp[\u0027error\u0027]:"}],"source_content_type":"text/x-python","patch_set":29,"id":"1a6eadb0_88955588","line":266,"updated":"2016-12-15 18:11:19.000000000","message":"exception.VolumeIsBusy(volume_name\u003dvolume_name)","commit_id":"6e91f596572f2513cbfcf99959f4714bdfc89fb8"}],"cinder/volume/drivers/open_e/jovian_common/rest_proxy.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"93c6c63f518bebff44f45b3ecdbd2ee3d907230f","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, LOG, config):"},{"line_number":32,"context_line":"        \"\"\":param config: config is like dict.\"\"\""},{"line_number":33,"context_line":"        disable_warnings(InsecureRequestWarning)"},{"line_number":34,"context_line":"        self.LOG \u003d LOG"},{"line_number":35,"context_line":"        self.user \u003d config.get(\u0027jovian_user\u0027, \u0027admin\u0027)"},{"line_number":36,"context_line":"        self.password \u003d config.get(\u0027jovian_password\u0027, \u0027admin\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_b7a9327e","line":33,"updated":"2016-11-29 23:50:18.000000000","message":"There is already a mechanism built into Cinder to do this.\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/manager.py#L133","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"99fe8b6bfc09d95fde6377271da18e968d783c81","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import requests"},{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import exception"},{"line_number":24,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_cc7f93a9","line":21,"updated":"2016-12-14 20:33:06.000000000","message":"The six import and oslo_log imports should be in the same group, since they are both non-stdlib imports.","commit_id":"2732ed47b25d0e14828f5b50266696d7e6b9d55c"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b92ccfa33fad8e53b57cf1d6dd233d94ff153978","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            except requests.ConnectionError as err:"},{"line_number":85,"context_line":"                LOG.debug(\"Unable to execute: %s\", err)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"            msg \u003d (_(\u0027%(times)s faild in a row\u0027) % {\u0027times\u0027: i})"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        raise exception.JDSSRESTProxyException(msg)"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a6eadb0_b89c435e","line":87,"updated":"2016-12-15 03:59:04.000000000","message":"nit: s/faild/failed","commit_id":"c9a65f4c9ad676d574fcfe5a58efd5b84510ad8c"}],"cinder/volume/drivers/open_e/options.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"d1a964580a297af8d994d677c7b5535f641a5ebf","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    cfg.BoolOpt(\u0027jovian_sparse\u0027,"},{"line_number":71,"context_line":"                default\u003dFalse,"},{"line_number":72,"context_line":"                help\u003d\u0027Enables or disables the creation of sparse\u0027"},{"line_number":73,"context_line":"                     \u0027 (thin-provisioned) volumes\u0027),"},{"line_number":74,"context_line":"]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_57d0def7","line":73,"updated":"2016-11-29 23:51:40.000000000","message":"both of these options really should be volume type extra spec.","commit_id":"694a461a98d3a128e7f965d0bb43a945e7c56d6c"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"jdss_iscsi_opts \u003d ["},{"line_number":42,"context_line":"    cfg.IntOpt(\u0027jovian_iscsi_target_portal_port\u0027,"},{"line_number":43,"context_line":"               default\u003d3260,"},{"line_number":44,"context_line":"               help\u003d\u0027Open-E JovianDSS target portal port\u0027),"},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027jovian_pool\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_ef95efe3","line":42,"range":{"start_line":42,"start_character":16,"end_line":42,"end_character":47},"updated":"2016-12-12 13:55:44.000000000","message":"You should use the common config for iscsi drivers any time it applies. Please see: https://github.com/openstack/cinder/blob/2a247e89e568945e71893ee5edb237e120fe1533/cinder/volume/driver.py#L41-L269","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    cfg.StrOpt(\u0027jovian_target_group_prefix\u0027,"},{"line_number":52,"context_line":"               default\u003d\u0027cinder/\u0027,"},{"line_number":53,"context_line":"               help\u003d\u0027Prefix for iSCSI target groups on Open-E JovianDSS SA\u0027),"},{"line_number":54,"context_line":"    cfg.BoolOpt(\u0027jovian_chap_auth\u0027,"},{"line_number":55,"context_line":"                default\u003dFalse,"},{"line_number":56,"context_line":"                help\u003d\u0027Use CHAP authentication.\u0027),"},{"line_number":57,"context_line":"    cfg.StrOpt(\u0027jovian_chap_username\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_efbc0f6e","line":54,"range":{"start_line":54,"start_character":17,"end_line":54,"end_character":33},"updated":"2016-12-12 13:55:44.000000000","message":"Same.","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"61d52b6d57e347399f778e23f2f9f6fe16b1911c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    cfg.BoolOpt(\u0027jovian_chap_auth\u0027,"},{"line_number":55,"context_line":"                default\u003dFalse,"},{"line_number":56,"context_line":"                help\u003d\u0027Use CHAP authentication.\u0027),"},{"line_number":57,"context_line":"    cfg.StrOpt(\u0027jovian_chap_username\u0027,"},{"line_number":58,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":59,"context_line":"               help\u003d\u0027CHAP user name for for iSCSI connection\u0027),"},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027jovian_chap_pass_len\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_8f871bb4","line":57,"range":{"start_line":57,"start_character":16,"end_line":57,"end_character":36},"updated":"2016-12-12 13:55:44.000000000","message":"Same","commit_id":"59e00f6b36e6493f97894f85c4970c985761d0a3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":26,"context_line":"               default\u003d\u0027https\u0027,"},{"line_number":27,"context_line":"               choices\u003d[\u0027http\u0027, \u0027https\u0027],"},{"line_number":28,"context_line":"               help\u003d\u0027Use http or https for REST connection (default https)\u0027),"},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027jovian_rest_send_repeats\u0027,"},{"line_number":30,"context_line":"               default\u003d3,"},{"line_number":31,"context_line":"               help\u003d\u0027Number of retries to send REST request.\u0027),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027jovian_user\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_805bae86","line":29,"range":{"start_line":29,"start_character":8,"end_line":29,"end_character":14},"updated":"2016-12-14 15:52:01.000000000","message":"IntOpt","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c5333eb8926c13579270f83d2c0c643dde1438ac","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    cfg.StrOpt(\u0027jovian_target_group_prefix\u0027,"},{"line_number":46,"context_line":"               default\u003d\u0027cinder/\u0027,"},{"line_number":47,"context_line":"               help\u003d\u0027Prefix for iSCSI target groups on Open-E JovianDSS SA\u0027),"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027jovian_chap_pass_len\u0027,"},{"line_number":49,"context_line":"               default\u003d12,"},{"line_number":50,"context_line":"               help\u003d\u0027Length of the random string for CHAP password.\u0027),"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"1a6eadb0_00507e5c","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":14},"updated":"2016-12-14 15:52:01.000000000","message":"IntOpt","commit_id":"baae9d2f0282d7aeadfd9a881a4e67d73dadb4fa"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"99fe8b6bfc09d95fde6377271da18e968d783c81","unresolved":false,"context_lines":[{"line_number":18,"context_line":"jdss_connection_opts \u003d ["},{"line_number":19,"context_line":"    cfg.StrOpt(\u0027jovian_host\u0027,"},{"line_number":20,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":21,"context_line":"               help\u003d\u0027IP address of Open-E JovianDSS SA\u0027),"},{"line_number":22,"context_line":"    cfg.IntOpt(\u0027jovian_rest_port\u0027,"},{"line_number":23,"context_line":"               default\u003d82,"},{"line_number":24,"context_line":"               help\u003d\u0027HTTP port to connect to OpenE JovianDSS REST API server\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_2c51e736","line":21,"updated":"2016-12-14 20:33:06.000000000","message":"IP address, or does this also take a DNS hostname?\n\nAccepting hostnames is preferable, it should be an IPOpt if that is not possible.","commit_id":"2732ed47b25d0e14828f5b50266696d7e6b9d55c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"99fe8b6bfc09d95fde6377271da18e968d783c81","unresolved":false,"context_lines":[{"line_number":47,"context_line":"               help\u003d\u0027Prefix for iSCSI target groups on Open-E JovianDSS SA\u0027),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027jovian_chap_pass_len\u0027,"},{"line_number":49,"context_line":"               default\u003d12,"},{"line_number":50,"context_line":"               help\u003d\u0027Length of the random string for CHAP password.\u0027),"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"]"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_ec536f37","line":50,"updated":"2016-12-14 20:33:06.000000000","message":"Why is this configurable?  I don\u0027t think this should be an option.","commit_id":"2732ed47b25d0e14828f5b50266696d7e6b9d55c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"99fe8b6bfc09d95fde6377271da18e968d783c81","unresolved":false,"context_lines":[{"line_number":52,"context_line":"]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"jdss_volume_opts \u003d ["},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027jovian_blocksize\u0027,"},{"line_number":56,"context_line":"               default\u003d\u00278KB\u0027,"},{"line_number":57,"context_line":"               help\u003d\u0027Block size for volumes (512B - 128KB)\u0027),"},{"line_number":58,"context_line":"    cfg.BoolOpt(\u0027jovian_sparse\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_0c1a6b7d","line":55,"updated":"2016-12-14 20:33:06.000000000","message":"Where is this option used?  It needs validation for whether the configured size is valid, but I\u0027m not sure it\u0027s used anywhere.","commit_id":"2732ed47b25d0e14828f5b50266696d7e6b9d55c"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"99fe8b6bfc09d95fde6377271da18e968d783c81","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    cfg.StrOpt(\u0027jovian_blocksize\u0027,"},{"line_number":56,"context_line":"               default\u003d\u00278KB\u0027,"},{"line_number":57,"context_line":"               help\u003d\u0027Block size for volumes (512B - 128KB)\u0027),"},{"line_number":58,"context_line":"    cfg.BoolOpt(\u0027jovian_sparse\u0027,"},{"line_number":59,"context_line":"                default\u003dFalse,"},{"line_number":60,"context_line":"                help\u003d\u0027Enables or disables the creation of sparse\u0027"},{"line_number":61,"context_line":"                     \u0027 (thin-provisioned) volumes\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_2c1f276d","line":58,"updated":"2016-12-14 20:33:06.000000000","message":"Where is this option used?","commit_id":"2732ed47b25d0e14828f5b50266696d7e6b9d55c"}]}
