)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"fc068c10cc204d448aecc14e629a1d7a63c5be92","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: Ie83dab4858729353865268231352033934dafdc2"},{"line_number":28,"context_line":"Implements: blueprint nvme-volume-driver"},{"line_number":29,"context_line":"Depends-On: I049f1d701c99612959d8262342aa63a043a97db0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"5fc1f717_eea7dba6","line":29,"updated":"2019-03-08 02:18:26.000000000","message":"The change I049f1d701c99612959d8262342aa63a043a97db0 is already merged, can delete this. And there is another fix pending:\n\nDepends-On: Ibe37a14f67ce7452f088d7913a76c6233202ccea","commit_id":"874f4ab23d55dcdd6e8e27cf0fee8d804b556166"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"b53b1c7714ce27219547170088bd09574fa9dc22","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: Ie83dab4858729353865268231352033934dafdc2"},{"line_number":28,"context_line":"Implements: blueprint nvme-volume-driver"},{"line_number":29,"context_line":"Depends-On: I049f1d701c99612959d8262342aa63a043a97db0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"5fc1f717_e867bd50","line":29,"in_reply_to":"5fc1f717_eea7dba6","updated":"2019-03-09 01:00:11.000000000","message":"deleted change I049f1d701c99612959d8262342aa63a043a97db0. Didn\u0027t add Depends-On: Ibe37a14f67ce7452f088d7913a76c6233202ccea it is merged with master.","commit_id":"874f4ab23d55dcdd6e8e27cf0fee8d804b556166"}],"cinder/exception.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"60b3ebf01fe4957b3bd9e84fd18f207e8e31f986","unresolved":false,"context_lines":[{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"# RSD driver"},{"line_number":1400,"context_line":"class RsdRetryableException(VolumeDriverException):"},{"line_number":1401,"context_line":"    message \u003d _(\"RSD retryable exception: %(reason)s\")"}],"source_content_type":"text/x-python","patch_set":38,"id":"ffb9cba7_6d468624","line":1400,"updated":"2019-04-24 14:32:59.000000000","message":"You can put this exception class in the driver code -- it doesn\u0027t need to be a cinder-wide exception.","commit_id":"5c02fe8d23feafeb58ee94654da146e33b978dff"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"b3e7fa3dbc359d144c0c4e966431670bda412611","unresolved":false,"context_lines":[{"line_number":1397,"context_line":""},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"# RSD driver"},{"line_number":1400,"context_line":"class RsdRetryableException(VolumeDriverException):"},{"line_number":1401,"context_line":"    message \u003d _(\"RSD retryable exception: %(reason)s\")"}],"source_content_type":"text/x-python","patch_set":38,"id":"ffb9cba7_646e7f96","line":1400,"in_reply_to":"ffb9cba7_6d468624","updated":"2019-04-28 20:28:06.000000000","message":"Done","commit_id":"5c02fe8d23feafeb58ee94654da146e33b978dff"}],"cinder/tests/unit/volume/drivers/test_rsd.py":[{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"ec928cd6c229aa6d2ac9dee1b194f67ad1e865c8","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.assertEqual(storages, [])"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def test_get_volume(self):"},{"line_number":179,"context_line":"        uuid \u003d \"/84cff9ea-de0f-4841-8645-58620adf49b2\""},{"line_number":180,"context_line":"        url \u003d \"/redfish/v1/Storage/StorageService\""},{"line_number":181,"context_line":"        volume_url \u003d url + uuid"},{"line_number":182,"context_line":"        mock_stor_serv \u003d mock.Mock()"},{"line_number":183,"context_line":"        mock_vol_serv \u003d mock.Mock()"},{"line_number":184,"context_line":"        self.mock_rsd_lib.get_storage_service \u003d \\"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f769fc5_e618a376","line":181,"range":{"start_line":179,"start_character":8,"end_line":181,"end_character":30},"updated":"2018-12-24 16:34:52.000000000","message":"use self.* instead","commit_id":"5ac356c102ee20ef695ef57cfd237ad9c643b33c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"e8bf1b6fd403ec0164496117119407d33e2fcaf1","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        self.assertEqual(storages, [])"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def test_get_volume(self):"},{"line_number":179,"context_line":"        uuid \u003d \"/84cff9ea-de0f-4841-8645-58620adf49b2\""},{"line_number":180,"context_line":"        url \u003d \"/redfish/v1/Storage/StorageService\""},{"line_number":181,"context_line":"        volume_url \u003d url + uuid"},{"line_number":182,"context_line":"        mock_stor_serv \u003d mock.Mock()"},{"line_number":183,"context_line":"        mock_vol_serv \u003d mock.Mock()"},{"line_number":184,"context_line":"        self.mock_rsd_lib.get_storage_service \u003d \\"}],"source_content_type":"text/x-python","patch_set":22,"id":"1f769fc5_c405557c","line":181,"range":{"start_line":179,"start_character":8,"end_line":181,"end_character":30},"in_reply_to":"1f769fc5_e618a376","updated":"2018-12-26 08:15:58.000000000","message":"fixed","commit_id":"5ac356c102ee20ef695ef57cfd237ad9c643b33c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        super(RsdClientTestCase, self).setUp()"},{"line_number":61,"context_line":"        self.mock_rsd_lib \u003d mock.Mock()"},{"line_number":62,"context_line":"        self.mock_rsd_lib._rsd_api_version \u003d \"2.4.0\""},{"line_number":63,"context_line":"        self.mock_rsd_lib_factory \u003d \\"},{"line_number":64,"context_line":"            mock.MagicMock(return_value\u003dself.mock_rsd_lib)"},{"line_number":65,"context_line":"        fake_RSDLib.factory \u003d self.mock_rsd_lib_factory"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_eea5b8b6","line":63,"range":{"start_line":63,"start_character":35,"end_line":63,"end_character":37},"updated":"2019-01-04 22:13:46.000000000","message":"Please try to avoid using \\ for line continuation.  If you can do this without it, it would be appreciated.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        super(RsdClientTestCase, self).setUp()"},{"line_number":61,"context_line":"        self.mock_rsd_lib \u003d mock.Mock()"},{"line_number":62,"context_line":"        self.mock_rsd_lib._rsd_api_version \u003d \"2.4.0\""},{"line_number":63,"context_line":"        self.mock_rsd_lib_factory \u003d \\"},{"line_number":64,"context_line":"            mock.MagicMock(return_value\u003dself.mock_rsd_lib)"},{"line_number":65,"context_line":"        fake_RSDLib.factory \u003d self.mock_rsd_lib_factory"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_73755398","line":63,"range":{"start_line":63,"start_character":35,"end_line":63,"end_character":37},"in_reply_to":"ffd0ebdf_eea5b8b6","updated":"2019-01-07 03:48:23.000000000","message":"thanks for pointing out, all fixed.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a33621ceeffe7d20dda27b70c65f10916557d92f","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                                                       size_in_bytes,"},{"line_number":295,"context_line":"                                                       source_snap\u003dstor_uuid)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        self.assertEqual(stor_url, self.resource_url)"},{"line_number":298,"context_line":"        mock_stor.volumes.create_volume.assert_called_with("},{"line_number":299,"context_line":"            size_in_bytes,"},{"line_number":300,"context_line":"            capacity_sources\u003dNone,"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_10f2c407","line":297,"range":{"start_line":297,"start_character":25,"end_line":297,"end_character":52},"updated":"2019-01-10 17:53:14.000000000","message":"Should be (EXPECTED, ACTUAL)","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1156a5632862b4374b9251306b16526d7a42c3e6","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                                                       size_in_bytes,"},{"line_number":295,"context_line":"                                                       source_snap\u003dstor_uuid)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        self.assertEqual(stor_url, self.resource_url)"},{"line_number":298,"context_line":"        mock_stor.volumes.create_volume.assert_called_with("},{"line_number":299,"context_line":"            size_in_bytes,"},{"line_number":300,"context_line":"            capacity_sources\u003dNone,"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_b055f81f","line":297,"range":{"start_line":297,"start_character":25,"end_line":297,"end_character":52},"in_reply_to":"bfdaf3ff_10f2c407","updated":"2019-01-10 20:48:25.000000000","message":"Done","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"}],"cinder/volume/drivers/nvme.py":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_config import cfg"},{"line_number":27,"context_line":"from oslo_log import log as logging"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import json"},{"line_number":30,"context_line":"import requests"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_16afdb7f","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":15},"updated":"2018-12-03 09:09:57.000000000","message":"These need to be the first imports\nFollow\nhttps://docs.openstack.org/hacking/latest/user/hacking.html","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_config import cfg"},{"line_number":27,"context_line":"from oslo_log import log as logging"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import json"},{"line_number":30,"context_line":"import requests"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a2d1f0fb","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":15},"in_reply_to":"3f79a3b5_16afdb7f","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                help\u003d\u0027Verify SSL certificate to PODM service\u0027),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"GIGABYTE \u003d 1024 * 1024 * 1024"},{"line_number":50,"context_line":"NQN_PREFIX \u003d \u0027nqn.2014-08.org.nvmexpress:uuid:\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_76ce4f59","line":49,"range":{"start_line":49,"start_character":0,"end_line":49,"end_character":29},"updated":"2018-12-03 09:09:57.000000000","message":"i think using oslo_utils.units would be better","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                help\u003d\u0027Verify SSL certificate to PODM service\u0027),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"GIGABYTE \u003d 1024 * 1024 * 1024"},{"line_number":50,"context_line":"NQN_PREFIX \u003d \u0027nqn.2014-08.org.nvmexpress:uuid:\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e2c7e83d","line":49,"range":{"start_line":49,"start_character":0,"end_line":49,"end_character":29},"in_reply_to":"3f79a3b5_76ce4f59","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _get_storages(self, filter_nvme\u003dTrue):"},{"line_number":88,"context_line":"        ret \u003d []"},{"line_number":89,"context_line":"        for storage in self.rsdlib\\"},{"line_number":90,"context_line":"                .get_storage_service_collection().get_members():"},{"line_number":91,"context_line":"            if filter_nvme:"},{"line_number":92,"context_line":"                drives \u003d storage.drives.get_members()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_dc3f4521","line":89,"range":{"start_line":89,"start_character":34,"end_line":89,"end_character":35},"updated":"2018-12-03 09:09:57.000000000","message":"try using parenthesis instead ()\nhttps://www.python.org/dev/peps/pep-0008/#id19","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _get_storages(self, filter_nvme\u003dTrue):"},{"line_number":88,"context_line":"        ret \u003d []"},{"line_number":89,"context_line":"        for storage in self.rsdlib\\"},{"line_number":90,"context_line":"                .get_storage_service_collection().get_members():"},{"line_number":91,"context_line":"            if filter_nvme:"},{"line_number":92,"context_line":"                drives \u003d storage.drives.get_members()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_c2cc2c61","line":89,"range":{"start_line":89,"start_character":34,"end_line":89,"end_character":35},"in_reply_to":"3f79a3b5_dc3f4521","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                .get_storage_service_collection().get_members():"},{"line_number":91,"context_line":"            if filter_nvme:"},{"line_number":92,"context_line":"                drives \u003d storage.drives.get_members()"},{"line_number":93,"context_line":"                if drives and \\"},{"line_number":94,"context_line":"                        any(map(lambda ident: \u0027nvme\u0027 in ident.durable_name,"},{"line_number":95,"context_line":"                                drives[0].identifiers)):"},{"line_number":96,"context_line":"                    ret.append(storage)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_fc3a4130","line":93,"range":{"start_line":93,"start_character":30,"end_line":93,"end_character":31},"updated":"2018-12-03 09:09:57.000000000","message":"same","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                .get_storage_service_collection().get_members():"},{"line_number":91,"context_line":"            if filter_nvme:"},{"line_number":92,"context_line":"                drives \u003d storage.drives.get_members()"},{"line_number":93,"context_line":"                if drives and \\"},{"line_number":94,"context_line":"                        any(map(lambda ident: \u0027nvme\u0027 in ident.durable_name,"},{"line_number":95,"context_line":"                                drives[0].identifiers)):"},{"line_number":96,"context_line":"                    ret.append(storage)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_62fd186f","line":93,"range":{"start_line":93,"start_character":30,"end_line":93,"end_character":31},"in_reply_to":"3f79a3b5_fc3a4130","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _get_volume(self, volume_url):"},{"line_number":107,"context_line":"        ss \u003d self._get_storage(volume_url)"},{"line_number":108,"context_line":"        assert(\"Volumes\" in volume_url)"},{"line_number":109,"context_line":"        assert(volume_url.count(\"/\") \u003d\u003d 6)"},{"line_number":110,"context_line":"        volume \u003d ss.volumes.get_member(volume_url)"},{"line_number":111,"context_line":"        return volume"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9cbead7b","line":109,"range":{"start_line":108,"start_character":8,"end_line":109,"end_character":42},"updated":"2018-12-03 09:09:57.000000000","message":"i think using assert here isn\u0027t a good idea.\ncan we use something like\n\nif \"volumes\" in volume_url:\n    raise (any suitable exception)","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _get_volume(self, volume_url):"},{"line_number":107,"context_line":"        ss \u003d self._get_storage(volume_url)"},{"line_number":108,"context_line":"        assert(\"Volumes\" in volume_url)"},{"line_number":109,"context_line":"        assert(volume_url.count(\"/\") \u003d\u003d 6)"},{"line_number":110,"context_line":"        volume \u003d ss.volumes.get_member(volume_url)"},{"line_number":111,"context_line":"        return volume"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_22f72091","line":109,"range":{"start_line":108,"start_character":8,"end_line":109,"end_character":42},"in_reply_to":"3f79a3b5_9cbead7b","updated":"2018-12-04 02:28:36.000000000","message":"Removed the asserts, it\u0027s for development purpose.","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        except Exception as e:"},{"line_number":125,"context_line":"            LOG.exception(e)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":128,"context_line":"            data\u003d(_(\u0027Unable to create new volume %d GiB\u0027) % size_in_gb))"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def delete_volume(self, volume_url):"},{"line_number":131,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9f6d3fd0","line":128,"range":{"start_line":127,"start_character":8,"end_line":128,"end_character":72},"updated":"2018-12-03 09:09:57.000000000","message":"will this be raised in any case?","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        except Exception as e:"},{"line_number":125,"context_line":"            LOG.exception(e)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":128,"context_line":"            data\u003d(_(\u0027Unable to create new volume %d GiB\u0027) % size_in_gb))"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def delete_volume(self, volume_url):"},{"line_number":131,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8225d417","line":128,"range":{"start_line":127,"start_character":8,"end_line":128,"end_character":72},"in_reply_to":"3f79a3b5_9f6d3fd0","updated":"2018-12-04 02:28:36.000000000","message":"No, only if no volume_url is returned @120.","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        return True"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def get_node_url_by_uuid(self, uuid):"},{"line_number":144,"context_line":"        uuid \u003d uuid.upper()"},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            nodes \u003d self.rsdlib.get_node_collection().get_members()"},{"line_number":147,"context_line":"            for node in nodes:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9c28ed9e","line":144,"range":{"start_line":144,"start_character":8,"end_line":144,"end_character":27},"updated":"2018-12-03 09:09:57.000000000","message":"why are we converting it to uppercase?","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        return True"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def get_node_url_by_uuid(self, uuid):"},{"line_number":144,"context_line":"        uuid \u003d uuid.upper()"},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            nodes \u003d self.rsdlib.get_node_collection().get_members()"},{"line_number":147,"context_line":"            for node in nodes:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e235a845","line":144,"range":{"start_line":144,"start_character":8,"end_line":144,"end_character":27},"in_reply_to":"3f79a3b5_9c28ed9e","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"0e8332776aa72be164461f32d561a73719f7e96b","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        return True"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def get_node_url_by_uuid(self, uuid):"},{"line_number":144,"context_line":"        uuid \u003d uuid.upper()"},{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            nodes \u003d self.rsdlib.get_node_collection().get_members()"},{"line_number":147,"context_line":"            for node in nodes:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e73da5e6","line":144,"range":{"start_line":144,"start_character":8,"end_line":144,"end_character":27},"in_reply_to":"3f79a3b5_e235a845","updated":"2018-12-04 16:12:57.000000000","message":"I just checked that uuid from os-brick nvme connector is lowercase. But uuid from RSD is uppercase.\n\nSo revert this change.","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            nodes \u003d self.rsdlib.get_node_collection().get_members()"},{"line_number":147,"context_line":"            for node in nodes:"},{"line_number":148,"context_line":"                if node and node.system\\"},{"line_number":149,"context_line":"                        and node.system.uuid\\"},{"line_number":150,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid:"},{"line_number":151,"context_line":"                    return node.path"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_7c40715f","line":148,"range":{"start_line":148,"start_character":39,"end_line":148,"end_character":40},"updated":"2018-12-03 09:09:57.000000000","message":"use paranthesis ()","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        try:"},{"line_number":146,"context_line":"            nodes \u003d self.rsdlib.get_node_collection().get_members()"},{"line_number":147,"context_line":"            for node in nodes:"},{"line_number":148,"context_line":"                if node and node.system\\"},{"line_number":149,"context_line":"                        and node.system.uuid\\"},{"line_number":150,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid:"},{"line_number":151,"context_line":"                    return node.path"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0231c456","line":148,"range":{"start_line":148,"start_character":39,"end_line":148,"end_character":40},"in_reply_to":"3f79a3b5_7c40715f","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            nodes \u003d self.rsdlib.get_node_collection().get_members()"},{"line_number":147,"context_line":"            for node in nodes:"},{"line_number":148,"context_line":"                if node and node.system\\"},{"line_number":149,"context_line":"                        and node.system.uuid\\"},{"line_number":150,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid:"},{"line_number":151,"context_line":"                    return node.path"},{"line_number":152,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_1c57fd2a","line":149,"range":{"start_line":149,"start_character":44,"end_line":149,"end_character":45},"updated":"2018-12-03 09:09:57.000000000","message":"same","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            nodes \u003d self.rsdlib.get_node_collection().get_members()"},{"line_number":147,"context_line":"            for node in nodes:"},{"line_number":148,"context_line":"                if node and node.system\\"},{"line_number":149,"context_line":"                        and node.system.uuid\\"},{"line_number":150,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid:"},{"line_number":151,"context_line":"                    return node.path"},{"line_number":152,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a23fb021","line":149,"range":{"start_line":149,"start_character":44,"end_line":149,"end_character":45},"in_reply_to":"3f79a3b5_1c57fd2a","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            for node in nodes:"},{"line_number":148,"context_line":"                if node and node.system\\"},{"line_number":149,"context_line":"                        and node.system.uuid\\"},{"line_number":150,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid:"},{"line_number":151,"context_line":"                    return node.path"},{"line_number":152,"context_line":"        except Exception as e:"},{"line_number":153,"context_line":"            LOG.exception(e)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9c11cd62","line":150,"range":{"start_line":150,"start_character":28,"end_line":150,"end_character":60},"updated":"2018-12-03 09:09:57.000000000","message":"can\u0027t we compare both these values without converting both to uppercase?","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            for node in nodes:"},{"line_number":148,"context_line":"                if node and node.system\\"},{"line_number":149,"context_line":"                        and node.system.uuid\\"},{"line_number":150,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid:"},{"line_number":151,"context_line":"                    return node.path"},{"line_number":152,"context_line":"        except Exception as e:"},{"line_number":153,"context_line":"            LOG.exception(e)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_c23aec30","line":150,"range":{"start_line":150,"start_character":28,"end_line":150,"end_character":60},"in_reply_to":"3f79a3b5_9c11cd62","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"0e8332776aa72be164461f32d561a73719f7e96b","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            for node in nodes:"},{"line_number":148,"context_line":"                if node and node.system\\"},{"line_number":149,"context_line":"                        and node.system.uuid\\"},{"line_number":150,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid:"},{"line_number":151,"context_line":"                    return node.path"},{"line_number":152,"context_line":"        except Exception as e:"},{"line_number":153,"context_line":"            LOG.exception(e)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a71c8d7c","line":150,"range":{"start_line":150,"start_character":28,"end_line":150,"end_character":60},"in_reply_to":"3f79a3b5_c23aec30","updated":"2018-12-04 16:12:57.000000000","message":"I just checked that uuid from os-brick nvme connector is lowercase. But uuid from RSD is uppercase.\n\nSo revert this change.","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            storages \u003d self._get_storages()"},{"line_number":163,"context_line":"            for storage in storages:"},{"line_number":164,"context_line":"                for pool in storage.storage_pools.get_members():"},{"line_number":165,"context_line":"                    total_capacity_gb +\u003d \\"},{"line_number":166,"context_line":"                        float(pool.capacity.allocated_bytes or 0) / GIGABYTE"},{"line_number":167,"context_line":"                    allocated_capacity_gb +\u003d \\"},{"line_number":168,"context_line":"                        float(pool.capacity.consumed_bytes or 0) / GIGABYTE"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9f445f50","line":165,"range":{"start_line":165,"start_character":41,"end_line":165,"end_character":42},"updated":"2018-12-03 09:09:57.000000000","message":"same","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            storages \u003d self._get_storages()"},{"line_number":163,"context_line":"            for storage in storages:"},{"line_number":164,"context_line":"                for pool in storage.storage_pools.get_members():"},{"line_number":165,"context_line":"                    total_capacity_gb +\u003d \\"},{"line_number":166,"context_line":"                        float(pool.capacity.allocated_bytes or 0) / GIGABYTE"},{"line_number":167,"context_line":"                    allocated_capacity_gb +\u003d \\"},{"line_number":168,"context_line":"                        float(pool.capacity.consumed_bytes or 0) / GIGABYTE"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_620bd87e","line":165,"range":{"start_line":165,"start_character":41,"end_line":165,"end_character":42},"in_reply_to":"3f79a3b5_9f445f50","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                for pool in storage.storage_pools.get_members():"},{"line_number":165,"context_line":"                    total_capacity_gb +\u003d \\"},{"line_number":166,"context_line":"                        float(pool.capacity.allocated_bytes or 0) / GIGABYTE"},{"line_number":167,"context_line":"                    allocated_capacity_gb +\u003d \\"},{"line_number":168,"context_line":"                        float(pool.capacity.consumed_bytes or 0) / GIGABYTE"},{"line_number":169,"context_line":"                total_volumes +\u003d len(storage.volumes.members_identities)"},{"line_number":170,"context_line":"            free_capacity_gb \u003d total_capacity_gb - allocated_capacity_gb"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_bf47db51","line":167,"range":{"start_line":167,"start_character":45,"end_line":167,"end_character":46},"updated":"2018-12-03 09:09:57.000000000","message":"same","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                for pool in storage.storage_pools.get_members():"},{"line_number":165,"context_line":"                    total_capacity_gb +\u003d \\"},{"line_number":166,"context_line":"                        float(pool.capacity.allocated_bytes or 0) / GIGABYTE"},{"line_number":167,"context_line":"                    allocated_capacity_gb +\u003d \\"},{"line_number":168,"context_line":"                        float(pool.capacity.consumed_bytes or 0) / GIGABYTE"},{"line_number":169,"context_line":"                total_volumes +\u003d len(storage.volumes.members_identities)"},{"line_number":170,"context_line":"            free_capacity_gb \u003d total_capacity_gb - allocated_capacity_gb"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_820e348c","line":167,"range":{"start_line":167,"start_character":45,"end_line":167,"end_character":46},"in_reply_to":"3f79a3b5_bf47db51","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    def _get_nqn_endpoints(self, endpoint_urls):"},{"line_number":186,"context_line":"        ret \u003d []"},{"line_number":187,"context_line":"        for endpoint_url in endpoint_urls:"},{"line_number":188,"context_line":"            endpoint_json \u003d \\"},{"line_number":189,"context_line":"                json.loads(self.rsdlib._conn.get(endpoint_url).text)"},{"line_number":190,"context_line":"            for ident in endpoint_json[\"Identifiers\"]:"},{"line_number":191,"context_line":"                if ident[\"DurableNameFormat\"] \u003d\u003d \"NQN\":"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_7f6aa3b4","line":188,"range":{"start_line":188,"start_character":28,"end_line":188,"end_character":29},"updated":"2018-12-03 09:09:57.000000000","message":"same","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    def _get_nqn_endpoints(self, endpoint_urls):"},{"line_number":186,"context_line":"        ret \u003d []"},{"line_number":187,"context_line":"        for endpoint_url in endpoint_urls:"},{"line_number":188,"context_line":"            endpoint_json \u003d \\"},{"line_number":189,"context_line":"                json.loads(self.rsdlib._conn.get(endpoint_url).text)"},{"line_number":190,"context_line":"            for ident in endpoint_json[\"Identifiers\"]:"},{"line_number":191,"context_line":"                if ident[\"DurableNameFormat\"] \u003d\u003d \"NQN\":"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_2205e068","line":188,"range":{"start_line":188,"start_character":28,"end_line":188,"end_character":29},"in_reply_to":"3f79a3b5_7f6aa3b4","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        self.configuration.append_config_values(RSD_OPTS)"},{"line_number":294,"context_line":"        self.rsdClient \u003d None"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def check_for_setup_error(self):"},{"line_number":297,"context_line":"        self.rsdClient \u003d RsdClient.initialize("},{"line_number":298,"context_line":"            self.configuration.podm_url,"},{"line_number":299,"context_line":"            self.configuration.podm_username,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_df6417b7","line":296,"range":{"start_line":296,"start_character":8,"end_line":296,"end_character":29},"updated":"2018-12-03 09:09:57.000000000","message":"i think this should be do_setup() ?","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        self.configuration.append_config_values(RSD_OPTS)"},{"line_number":294,"context_line":"        self.rsdClient \u003d None"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def check_for_setup_error(self):"},{"line_number":297,"context_line":"        self.rsdClient \u003d RsdClient.initialize("},{"line_number":298,"context_line":"            self.configuration.podm_url,"},{"line_number":299,"context_line":"            self.configuration.podm_username,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_42081c7e","line":296,"range":{"start_line":296,"start_character":8,"end_line":296,"end_character":29},"in_reply_to":"3f79a3b5_df6417b7","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        return {\u0027provider_location\u0027: volume_url}"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def delete_volume(self, volume):"},{"line_number":309,"context_line":"        volume_name \u003d utils.convert_str(volume.name)"},{"line_number":310,"context_line":"        volume_url \u003d volume[\u0027provider_location\u0027]"},{"line_number":311,"context_line":"        if_success \u003d self.rsdClient.delete_volume(volume_url)"},{"line_number":312,"context_line":"        if not if_success:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_7f22a355","line":309,"range":{"start_line":309,"start_character":22,"end_line":309,"end_character":52},"updated":"2018-12-03 09:09:57.000000000","message":"is the name not returned as string?","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"53dd496078e31e28cca1690e9a8b22d369f01137","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        return {\u0027provider_location\u0027: volume_url}"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def delete_volume(self, volume):"},{"line_number":309,"context_line":"        volume_name \u003d utils.convert_str(volume.name)"},{"line_number":310,"context_line":"        volume_url \u003d volume[\u0027provider_location\u0027]"},{"line_number":311,"context_line":"        if_success \u003d self.rsdClient.delete_volume(volume_url)"},{"line_number":312,"context_line":"        if not if_success:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_35cf55b7","line":309,"range":{"start_line":309,"start_character":22,"end_line":309,"end_character":52},"in_reply_to":"3f79a3b5_0248e4b2","updated":"2018-12-04 05:11:00.000000000","message":"Since ceph uses librbd, there was an issue that created the requirement of converting name to string. (you can refer the comment above it)\nyou can refer [1] as it is a reference driver.\n(you can use volume.name instead of volume[\u0027name\u0027])\n\n[1] https://github.com/openstack/cinder/blob/master/cinder/volume/drivers/lvm.py#L127","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"f8582c7437fb22b7a6b5b218a174717a25a772dd","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        return {\u0027provider_location\u0027: volume_url}"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def delete_volume(self, volume):"},{"line_number":309,"context_line":"        volume_name \u003d utils.convert_str(volume.name)"},{"line_number":310,"context_line":"        volume_url \u003d volume[\u0027provider_location\u0027]"},{"line_number":311,"context_line":"        if_success \u003d self.rsdClient.delete_volume(volume_url)"},{"line_number":312,"context_line":"        if not if_success:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_58056867","line":309,"range":{"start_line":309,"start_character":22,"end_line":309,"end_character":52},"in_reply_to":"3f79a3b5_35cf55b7","updated":"2018-12-04 07:07:08.000000000","message":"Done, thanks!","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        return {\u0027provider_location\u0027: volume_url}"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def delete_volume(self, volume):"},{"line_number":309,"context_line":"        volume_name \u003d utils.convert_str(volume.name)"},{"line_number":310,"context_line":"        volume_url \u003d volume[\u0027provider_location\u0027]"},{"line_number":311,"context_line":"        if_success \u003d self.rsdClient.delete_volume(volume_url)"},{"line_number":312,"context_line":"        if not if_success:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0248e4b2","line":309,"range":{"start_line":309,"start_character":22,"end_line":309,"end_character":52},"in_reply_to":"3f79a3b5_7f22a355","updated":"2018-12-04 02:28:36.000000000","message":"I\u0027m not certain about it. I just follow the existing implementations, like https://github.com/openstack/cinder/blob/master/cinder/volume/drivers/rbd.py#L930","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                                         volume_name\u003dvolume_name)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def _update_volume_stats(self):"},{"line_number":317,"context_line":"        backend_name \u003d\\"},{"line_number":318,"context_line":"            self.configuration.safe_get(\u0027volume_backend_name\u0027) or \u0027RSD\u0027"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        ret \u003d self.rsdClient.get_stats()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_1f192f23","line":317,"range":{"start_line":317,"start_character":22,"end_line":317,"end_character":23},"updated":"2018-12-03 09:09:57.000000000","message":"same","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                                         volume_name\u003dvolume_name)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def _update_volume_stats(self):"},{"line_number":317,"context_line":"        backend_name \u003d\\"},{"line_number":318,"context_line":"            self.configuration.safe_get(\u0027volume_backend_name\u0027) or \u0027RSD\u0027"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        ret \u003d self.rsdClient.get_stats()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_021a24c7","line":317,"range":{"start_line":317,"start_character":22,"end_line":317,"end_character":23},"in_reply_to":"3f79a3b5_1f192f23","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":353,"context_line":"        node_url \u003d self.rsdClient.get_node_url_by_uuid(uuid)"},{"line_number":354,"context_line":"        if not node_url:"},{"line_number":355,"context_line":"            msg \u003d _(\"initialize_connection error: no node_url from uuid %s!\")\\"},{"line_number":356,"context_line":"                % uuid[0]"},{"line_number":357,"context_line":"            LOG.exception(msg)"},{"line_number":358,"context_line":"            raise exception.VolumeBackendAPIException(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_5fd4871e","line":355,"range":{"start_line":355,"start_character":77,"end_line":355,"end_character":78},"updated":"2018-12-03 09:09:57.000000000","message":"same","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":353,"context_line":"        node_url \u003d self.rsdClient.get_node_url_by_uuid(uuid)"},{"line_number":354,"context_line":"        if not node_url:"},{"line_number":355,"context_line":"            msg \u003d _(\"initialize_connection error: no node_url from uuid %s!\")\\"},{"line_number":356,"context_line":"                % uuid[0]"},{"line_number":357,"context_line":"            LOG.exception(msg)"},{"line_number":358,"context_line":"            raise exception.VolumeBackendAPIException(msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_c213ccb0","line":355,"range":{"start_line":355,"start_character":77,"end_line":355,"end_character":78},"in_reply_to":"3f79a3b5_5fd4871e","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"0d638f1dd12fff7e3c1ea2f8a79b03f600ef840a","unresolved":false,"context_lines":[{"line_number":358,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        volume_url \u003d volume[\u0027provider_location\u0027]"},{"line_number":361,"context_line":"        target_ip, target_port, target_nqn, initiator_nqn \u003d\\"},{"line_number":362,"context_line":"            self.rsdClient.attach_volume_to_node(volume_url, node_url)"},{"line_number":363,"context_line":"        conn_info \u003d {"},{"line_number":364,"context_line":"            \u0027driver_volume_type\u0027: \u0027nvmeof\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_bfcd9b92","line":361,"range":{"start_line":361,"start_character":59,"end_line":361,"end_character":60},"updated":"2018-12-03 09:09:57.000000000","message":"same","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"9b9a3dd6e4327fc0db1f7dea341ab97a27401034","unresolved":false,"context_lines":[{"line_number":358,"context_line":"            raise exception.VolumeBackendAPIException(msg)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        volume_url \u003d volume[\u0027provider_location\u0027]"},{"line_number":361,"context_line":"        target_ip, target_port, target_nqn, initiator_nqn \u003d\\"},{"line_number":362,"context_line":"            self.rsdClient.attach_volume_to_node(volume_url, node_url)"},{"line_number":363,"context_line":"        conn_info \u003d {"},{"line_number":364,"context_line":"            \u0027driver_volume_type\u0027: \u0027nvmeof\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8273941b","line":361,"range":{"start_line":361,"start_character":59,"end_line":361,"end_character":60},"in_reply_to":"3f79a3b5_bfcd9b92","updated":"2018-12-04 02:28:36.000000000","message":"Done","commit_id":"79b6302e08f2112f3dc51d759808ccb83b2fb301"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"53dd496078e31e28cca1690e9a8b22d369f01137","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import requests"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from rsd_lib import RSDLib"},{"line_number":22,"context_line":"from sushy import exceptions as sushy_exceptions"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from cinder import exception"},{"line_number":25,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b595a595","line":22,"range":{"start_line":22,"start_character":5,"end_line":22,"end_character":10},"updated":"2018-12-04 05:11:00.000000000","message":"I saw this description on the git page of sushy,\n\"Therefore, the scope of the library has been limited to what is supported by the OpenStack Ironic project.\"\nCan we use any other cinder specific library here?","commit_id":"acb8c09a244f5158d1a35d2b77140553213b446b"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"f8582c7437fb22b7a6b5b218a174717a25a772dd","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import requests"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from rsd_lib import RSDLib"},{"line_number":22,"context_line":"from sushy import exceptions as sushy_exceptions"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from cinder import exception"},{"line_number":25,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_385f4c79","line":22,"range":{"start_line":22,"start_character":5,"end_line":22,"end_character":10},"in_reply_to":"3f79a3b5_b595a595","updated":"2018-12-04 07:07:08.000000000","message":"We use rsd_lib to interact with RSD backend, and it is the only way currently. Internally rsd_lib calls sushy, and unexpectedly it leaks some exceptions from sushy.\n\nIf we find out another way to identify that RSD fails to create a volume with certain size, we can change.\n\nWe will add comments in `create_volume()`.","commit_id":"acb8c09a244f5158d1a35d2b77140553213b446b"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"53dd496078e31e28cca1690e9a8b22d369f01137","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder import interface"},{"line_number":27,"context_line":"from cinder import utils"},{"line_number":28,"context_line":"from cinder.volume import driver"},{"line_number":29,"context_line":"from oslo_config import cfg"},{"line_number":30,"context_line":"from oslo_log import log as logging"},{"line_number":31,"context_line":"from oslo_utils import units"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f53c7dbe","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":28},"updated":"2018-12-04 05:11:00.000000000","message":"These are third party imports, move these with rsd_lib and sushy imports","commit_id":"acb8c09a244f5158d1a35d2b77140553213b446b"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"f8582c7437fb22b7a6b5b218a174717a25a772dd","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder import interface"},{"line_number":27,"context_line":"from cinder import utils"},{"line_number":28,"context_line":"from cinder.volume import driver"},{"line_number":29,"context_line":"from oslo_config import cfg"},{"line_number":30,"context_line":"from oslo_log import log as logging"},{"line_number":31,"context_line":"from oslo_utils import units"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_d83f3821","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":28},"in_reply_to":"3f79a3b5_f53c7dbe","updated":"2018-12-04 07:07:08.000000000","message":"Done","commit_id":"acb8c09a244f5158d1a35d2b77140553213b446b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9d41b3e6f8e970b4b7918f5dd804b10c6408c7d1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_0bba0edf","line":1,"updated":"2018-12-05 15:28:30.000000000","message":"This file should probably be rsd.py or podm.py as appropriate... calling it nvme.py is a bit misleading IMO.","commit_id":"d270ffcba58e6dddb6db59e54690da4dd5afc2ae"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9d4a252c5bef3273ba948033d07d9114891ecd6e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_ffb18191","line":1,"in_reply_to":"3f79a3b5_0bba0edf","updated":"2018-12-10 05:36:59.000000000","message":"+1","commit_id":"d270ffcba58e6dddb6db59e54690da4dd5afc2ae"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"49ef300abcb306176f79be07c20397569a553fed","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_8a436d12","line":1,"in_reply_to":"3f79a3b5_0bba0edf","updated":"2018-12-06 02:23:37.000000000","message":"Done","commit_id":"d270ffcba58e6dddb6db59e54690da4dd5afc2ae"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"9d41b3e6f8e970b4b7918f5dd804b10c6408c7d1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"               help\u003d\u0027Username of PODM service\u0027),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027podm_password\u0027,"},{"line_number":42,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":43,"context_line":"               help\u003d\u0027Password of PODM service\u0027),"},{"line_number":44,"context_line":"    cfg.BoolOpt(\u0027podm_verify\u0027,"},{"line_number":45,"context_line":"                default\u003dFalse,"},{"line_number":46,"context_line":"                help\u003d\u0027Verify SSL certificate to PODM service\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_cbaf369a","line":43,"updated":"2018-12-05 15:28:30.000000000","message":"Must be marked secret.","commit_id":"d270ffcba58e6dddb6db59e54690da4dd5afc2ae"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"49ef300abcb306176f79be07c20397569a553fed","unresolved":false,"context_lines":[{"line_number":40,"context_line":"               help\u003d\u0027Username of PODM service\u0027),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027podm_password\u0027,"},{"line_number":42,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":43,"context_line":"               help\u003d\u0027Password of PODM service\u0027),"},{"line_number":44,"context_line":"    cfg.BoolOpt(\u0027podm_verify\u0027,"},{"line_number":45,"context_line":"                default\u003dFalse,"},{"line_number":46,"context_line":"                help\u003d\u0027Verify SSL certificate to PODM service\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_4a49d52d","line":43,"in_reply_to":"3f79a3b5_cbaf369a","updated":"2018-12-06 02:23:37.000000000","message":"Done","commit_id":"d270ffcba58e6dddb6db59e54690da4dd5afc2ae"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"43522bfc8fd5d7fc8c803f96eba44a354c980ffe","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                        .get_storage_service_collection().get_members()):"},{"line_number":89,"context_line":"            if filter_nvme:"},{"line_number":90,"context_line":"                drives \u003d storage.drives.get_members()"},{"line_number":91,"context_line":"                if drives and (any(map(lambda ident: \u0027nvme\u0027"},{"line_number":92,"context_line":"                                       in ident.durable_name,"},{"line_number":93,"context_line":"                                       drives[0].identifiers))):"},{"line_number":94,"context_line":"                    ret.append(storage)"},{"line_number":95,"context_line":"            else:"},{"line_number":96,"context_line":"                ret.append(storage)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_aa9e7bb3","line":93,"range":{"start_line":91,"start_character":39,"end_line":93,"end_character":61},"updated":"2018-12-05 12:03:59.000000000","message":"Would it be better to use \"\u0027nvme\u0027 in drive.protocol.lower()\" rather than nvme in durable_name?","commit_id":"d270ffcba58e6dddb6db59e54690da4dd5afc2ae"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"49ef300abcb306176f79be07c20397569a553fed","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                        .get_storage_service_collection().get_members()):"},{"line_number":89,"context_line":"            if filter_nvme:"},{"line_number":90,"context_line":"                drives \u003d storage.drives.get_members()"},{"line_number":91,"context_line":"                if drives and (any(map(lambda ident: \u0027nvme\u0027"},{"line_number":92,"context_line":"                                       in ident.durable_name,"},{"line_number":93,"context_line":"                                       drives[0].identifiers))):"},{"line_number":94,"context_line":"                    ret.append(storage)"},{"line_number":95,"context_line":"            else:"},{"line_number":96,"context_line":"                ret.append(storage)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_6a461122","line":93,"range":{"start_line":91,"start_character":39,"end_line":93,"end_character":61},"in_reply_to":"3f79a3b5_aa9e7bb3","updated":"2018-12-06 02:23:37.000000000","message":"I think so, thanks.\nDone.","commit_id":"d270ffcba58e6dddb6db59e54690da4dd5afc2ae"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"43522bfc8fd5d7fc8c803f96eba44a354c980ffe","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        try:"},{"line_number":269,"context_line":"            nodes \u003d self.rsdlib.get_node_collection().get_members()"},{"line_number":270,"context_line":"            for node in nodes:"},{"line_number":271,"context_line":"                if (node and node.system"},{"line_number":272,"context_line":"                        and node.system.uuid"},{"line_number":273,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid):"},{"line_number":274,"context_line":"                    return node.path"},{"line_number":275,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_0a868f61","line":272,"range":{"start_line":271,"start_character":20,"end_line":272,"end_character":44},"updated":"2018-12-05 12:03:59.000000000","message":"Is this all necessary or is just node.system.uuid.upper() enough?","commit_id":"d270ffcba58e6dddb6db59e54690da4dd5afc2ae"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"49ef300abcb306176f79be07c20397569a553fed","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        try:"},{"line_number":269,"context_line":"            nodes \u003d self.rsdlib.get_node_collection().get_members()"},{"line_number":270,"context_line":"            for node in nodes:"},{"line_number":271,"context_line":"                if (node and node.system"},{"line_number":272,"context_line":"                        and node.system.uuid"},{"line_number":273,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid):"},{"line_number":274,"context_line":"                    return node.path"},{"line_number":275,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_0afe7db4","line":272,"range":{"start_line":271,"start_character":20,"end_line":272,"end_character":44},"in_reply_to":"3f79a3b5_0a868f61","updated":"2018-12-06 02:23:37.000000000","message":"I think it\u0027s necessary. For example, if there is an invalid node in RSD without a system. And if we don\u0027t check that every level down to the uuid is not None, all other nodes in this for-loop will be skipped with KeyError.","commit_id":"d270ffcba58e6dddb6db59e54690da4dd5afc2ae"}],"cinder/volume/drivers/rsd.py":[{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9d4a252c5bef3273ba948033d07d9114891ecd6e","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def storage_supports_nvme(storage):"},{"line_number":57,"context_line":"    drives \u003d storage.drives.get_members()"},{"line_number":58,"context_line":"    if drives and (any(map(lambda drive: \u0027nvme\u0027"},{"line_number":59,"context_line":"                           in drive.protocol.lower(),"},{"line_number":60,"context_line":"                           drives))):"},{"line_number":61,"context_line":"        return True"},{"line_number":62,"context_line":"    else:"},{"line_number":63,"context_line":"        return False"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class RsdClient(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_e45c5859","line":63,"range":{"start_line":57,"start_character":0,"end_line":63,"end_character":20},"updated":"2018-12-10 05:36:59.000000000","message":"I think the fact drivers support nvme and the fact volumes support NVMeoF are different. You may want to check whether the storage service supports NVMeoF.","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"b0f08a1dbd5e7c0f7f7e5ab91194c6d3004f9cee","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def storage_supports_nvme(storage):"},{"line_number":57,"context_line":"    drives \u003d storage.drives.get_members()"},{"line_number":58,"context_line":"    if drives and (any(map(lambda drive: \u0027nvme\u0027"},{"line_number":59,"context_line":"                           in drive.protocol.lower(),"},{"line_number":60,"context_line":"                           drives))):"},{"line_number":61,"context_line":"        return True"},{"line_number":62,"context_line":"    else:"},{"line_number":63,"context_line":"        return False"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"class RsdClient(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_32260eb5","line":63,"range":{"start_line":57,"start_character":0,"end_line":63,"end_character":20},"in_reply_to":"3f79a3b5_e45c5859","updated":"2018-12-10 07:28:33.000000000","message":"Still don\u0027t know how to check nvmeof support yet, maybe I need to leave a TODO here first.","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9d4a252c5bef3273ba948033d07d9114891ecd6e","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                          storage_service)"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            LOG.error(\"initialize: Empty storage service.\")"},{"line_number":109,"context_line":"        if not storage:"},{"line_number":110,"context_line":"            candidates \u003d []"},{"line_number":111,"context_line":"            try:"},{"line_number":112,"context_line":"                for _storage in (rsdlib"},{"line_number":113,"context_line":"                                 .get_storage_service_collection()"},{"line_number":114,"context_line":"                                 .get_members()):"},{"line_number":115,"context_line":"                    if storage_supports_nvme(_storage):"},{"line_number":116,"context_line":"                        candidates.append(_storage.path)"},{"line_number":117,"context_line":"            except Exception:"},{"line_number":118,"context_line":"                pass"},{"line_number":119,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":120,"context_line":"                data\u003d(_(\"initialize: Storage service failed, \""},{"line_number":121,"context_line":"                        \"candidates: %s\") % \", \".join(candidates)))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        return cls(rsdlib, storage)"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_e45bf885","line":121,"range":{"start_line":109,"start_character":0,"end_line":121,"end_character":67},"updated":"2018-12-10 05:36:59.000000000","message":"Why do we need this segment? Do we use candidates later?","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"b0f08a1dbd5e7c0f7f7e5ab91194c6d3004f9cee","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                          storage_service)"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            LOG.error(\"initialize: Empty storage service.\")"},{"line_number":109,"context_line":"        if not storage:"},{"line_number":110,"context_line":"            candidates \u003d []"},{"line_number":111,"context_line":"            try:"},{"line_number":112,"context_line":"                for _storage in (rsdlib"},{"line_number":113,"context_line":"                                 .get_storage_service_collection()"},{"line_number":114,"context_line":"                                 .get_members()):"},{"line_number":115,"context_line":"                    if storage_supports_nvme(_storage):"},{"line_number":116,"context_line":"                        candidates.append(_storage.path)"},{"line_number":117,"context_line":"            except Exception:"},{"line_number":118,"context_line":"                pass"},{"line_number":119,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":120,"context_line":"                data\u003d(_(\"initialize: Storage service failed, \""},{"line_number":121,"context_line":"                        \"candidates: %s\") % \", \".join(candidates)))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        return cls(rsdlib, storage)"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_323b6ec6","line":121,"range":{"start_line":109,"start_character":0,"end_line":121,"end_character":67},"in_reply_to":"3f79a3b5_e45bf885","updated":"2018-12-10 07:28:33.000000000","message":"If the storage service is not configured correctly, we just print candidates to help user to set the podm_storage_service option, and raise an exception to mark this driver failed.","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9d4a252c5bef3273ba948033d07d9114891ecd6e","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                data\u003d(_(\"initialize: Storage service failed, \""},{"line_number":121,"context_line":"                        \"candidates: %s\") % \", \".join(candidates)))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        return cls(rsdlib, storage)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _get_node(self, node_url):"},{"line_number":126,"context_line":"        return self.rsdlib.get_node(node_url)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_e4c0d8fb","line":123,"updated":"2018-12-10 05:36:59.000000000","message":"If storage is null, we should raise an exception.","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"b0f08a1dbd5e7c0f7f7e5ab91194c6d3004f9cee","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                data\u003d(_(\"initialize: Storage service failed, \""},{"line_number":121,"context_line":"                        \"candidates: %s\") % \", \".join(candidates)))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        return cls(rsdlib, storage)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _get_node(self, node_url):"},{"line_number":126,"context_line":"        return self.rsdlib.get_node(node_url)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_924cc274","line":123,"in_reply_to":"3f79a3b5_e4c0d8fb","updated":"2018-12-10 07:28:33.000000000","message":"already raised, see @119","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9d4a252c5bef3273ba948033d07d9114891ecd6e","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    def delete_vol_or_snap(self, volume_url):"},{"line_number":297,"context_line":"        try:"},{"line_number":298,"context_line":"            volume \u003d self._get_volume(volume_url)"},{"line_number":299,"context_line":"            if volume.links.endpoints:"},{"line_number":300,"context_line":"                return False"},{"line_number":301,"context_line":"            # TODO(Yingxin) check \"Operation not permitted\" for snapshot and"},{"line_number":302,"context_line":"            # return False"},{"line_number":303,"context_line":"            volume.delete()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_441f4c6d","line":300,"range":{"start_line":299,"start_character":0,"end_line":300,"end_character":28},"updated":"2018-12-10 05:36:59.000000000","message":"You should throw an exception or log some eror messages here.","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"b0f08a1dbd5e7c0f7f7e5ab91194c6d3004f9cee","unresolved":false,"context_lines":[{"line_number":296,"context_line":"    def delete_vol_or_snap(self, volume_url):"},{"line_number":297,"context_line":"        try:"},{"line_number":298,"context_line":"            volume \u003d self._get_volume(volume_url)"},{"line_number":299,"context_line":"            if volume.links.endpoints:"},{"line_number":300,"context_line":"                return False"},{"line_number":301,"context_line":"            # TODO(Yingxin) check \"Operation not permitted\" for snapshot and"},{"line_number":302,"context_line":"            # return False"},{"line_number":303,"context_line":"            volume.delete()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_929a82c0","line":300,"range":{"start_line":299,"start_character":0,"end_line":300,"end_character":28},"in_reply_to":"3f79a3b5_441f4c6d","updated":"2018-12-10 07:28:33.000000000","message":"No, we don\u0027t know which exception to raise here, it could be VolumeIsBusy or SnapshotIsBusy or else.\n\nThe callers need to handle the \"false\" case correctly. see @484 and @604","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9d4a252c5bef3273ba948033d07d9114891ecd6e","unresolved":false,"context_lines":[{"line_number":480,"context_line":"        volume_url \u003d volume[\u0027provider_location\u0027]"},{"line_number":481,"context_line":"        if not volume_url:"},{"line_number":482,"context_line":"            return"},{"line_number":483,"context_line":"        if_success \u003d self.rsdClient.delete_vol_or_snap(volume_url)"},{"line_number":484,"context_line":"        if not if_success:"},{"line_number":485,"context_line":"            raise exception.VolumeIsBusy(_(\"Volume is already attached\"),"},{"line_number":486,"context_line":"                                         volume_name\u003dvolume.name)"},{"line_number":487,"context_line":"        provider_snap_url \u003d volume.metadata.get(\"rsd_provider_snap\")"},{"line_number":488,"context_line":"        if provider_snap_url:"},{"line_number":489,"context_line":"            if_success \u003d self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":490,"context_line":"            if not if_success:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_44d50cb4","line":487,"range":{"start_line":483,"start_character":0,"end_line":487,"end_character":68},"updated":"2018-12-10 05:36:59.000000000","message":"Seems we should delete temp snapshot at first, and then volume.","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"b0f08a1dbd5e7c0f7f7e5ab91194c6d3004f9cee","unresolved":false,"context_lines":[{"line_number":480,"context_line":"        volume_url \u003d volume[\u0027provider_location\u0027]"},{"line_number":481,"context_line":"        if not volume_url:"},{"line_number":482,"context_line":"            return"},{"line_number":483,"context_line":"        if_success \u003d self.rsdClient.delete_vol_or_snap(volume_url)"},{"line_number":484,"context_line":"        if not if_success:"},{"line_number":485,"context_line":"            raise exception.VolumeIsBusy(_(\"Volume is already attached\"),"},{"line_number":486,"context_line":"                                         volume_name\u003dvolume.name)"},{"line_number":487,"context_line":"        provider_snap_url \u003d volume.metadata.get(\"rsd_provider_snap\")"},{"line_number":488,"context_line":"        if provider_snap_url:"},{"line_number":489,"context_line":"            if_success \u003d self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":490,"context_line":"            if not if_success:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_f233b6c1","line":487,"range":{"start_line":483,"start_character":0,"end_line":487,"end_character":68},"in_reply_to":"3f79a3b5_44d50cb4","updated":"2018-12-10 07:28:33.000000000","message":"if snapshot is deleted first, then the volume created from this snapshot needs to be inflated, which introduces extra overhead to copy data blobs. And this operation may be simply denied at rsd-lib layer.\n\nBut if the volume is deleted first, only the thin-provisioned layer needs to be deleted.","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9d4a252c5bef3273ba948033d07d9114891ecd6e","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        spool[\u0027total_capacity_gb\u0027] \u003d total_capacity_gb"},{"line_number":510,"context_line":"        spool[\u0027free_capacity_gb\u0027] \u003d free_capacity_gb"},{"line_number":511,"context_line":"        spool[\u0027allocated_capacity_gb\u0027] \u003d allocated_capacity_gb"},{"line_number":512,"context_line":"        spool[\u0027thin_provisioning_support\u0027] \u003d False"},{"line_number":513,"context_line":"        spool[\u0027thick_provisioning_support\u0027] \u003d True"},{"line_number":514,"context_line":"        spool[\u0027multiattach\u0027] \u003d False"},{"line_number":515,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_c4e27c9b","line":512,"updated":"2018-12-10 05:36:59.000000000","message":"This may be True.","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"b0f08a1dbd5e7c0f7f7e5ab91194c6d3004f9cee","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        spool[\u0027total_capacity_gb\u0027] \u003d total_capacity_gb"},{"line_number":510,"context_line":"        spool[\u0027free_capacity_gb\u0027] \u003d free_capacity_gb"},{"line_number":511,"context_line":"        spool[\u0027allocated_capacity_gb\u0027] \u003d allocated_capacity_gb"},{"line_number":512,"context_line":"        spool[\u0027thin_provisioning_support\u0027] \u003d False"},{"line_number":513,"context_line":"        spool[\u0027thick_provisioning_support\u0027] \u003d True"},{"line_number":514,"context_line":"        spool[\u0027multiattach\u0027] \u003d False"},{"line_number":515,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_d27d5a70","line":512,"in_reply_to":"3f79a3b5_c4e27c9b","updated":"2018-12-10 07:28:33.000000000","message":"agreed","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"5d77258d69e1d76cbfaea4515af489bbbb5f470f","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        spool[\u0027total_capacity_gb\u0027] \u003d total_capacity_gb"},{"line_number":510,"context_line":"        spool[\u0027free_capacity_gb\u0027] \u003d free_capacity_gb"},{"line_number":511,"context_line":"        spool[\u0027allocated_capacity_gb\u0027] \u003d allocated_capacity_gb"},{"line_number":512,"context_line":"        spool[\u0027thin_provisioning_support\u0027] \u003d False"},{"line_number":513,"context_line":"        spool[\u0027thick_provisioning_support\u0027] \u003d True"},{"line_number":514,"context_line":"        spool[\u0027multiattach\u0027] \u003d False"},{"line_number":515,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_d82686d3","line":512,"in_reply_to":"3f79a3b5_d27d5a70","updated":"2018-12-13 11:43:33.000000000","message":"Done","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"9d4a252c5bef3273ba948033d07d9114891ecd6e","unresolved":false,"context_lines":[{"line_number":626,"context_line":"            try:"},{"line_number":627,"context_line":"                self.rsdClient.extend_volume(new_vol_url, size_in_gb)"},{"line_number":628,"context_line":"            except Exception as e:"},{"line_number":629,"context_line":"                self.rsdClient.delete_vol_or_snap(new_vol_url)"},{"line_number":630,"context_line":"                self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":631,"context_line":"                raise e"},{"line_number":632,"context_line":"        volume.save()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_248810c2","line":630,"range":{"start_line":629,"start_character":0,"end_line":630,"end_character":68},"updated":"2018-12-10 05:36:59.000000000","message":"Delete snapshot firstly and then volume.","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"b0f08a1dbd5e7c0f7f7e5ab91194c6d3004f9cee","unresolved":false,"context_lines":[{"line_number":626,"context_line":"            try:"},{"line_number":627,"context_line":"                self.rsdClient.extend_volume(new_vol_url, size_in_gb)"},{"line_number":628,"context_line":"            except Exception as e:"},{"line_number":629,"context_line":"                self.rsdClient.delete_vol_or_snap(new_vol_url)"},{"line_number":630,"context_line":"                self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":631,"context_line":"                raise e"},{"line_number":632,"context_line":"        volume.save()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_b239bea1","line":630,"range":{"start_line":629,"start_character":0,"end_line":630,"end_character":68},"in_reply_to":"3f79a3b5_248810c2","updated":"2018-12-10 07:28:33.000000000","message":"same with above.","commit_id":"df24286b910b996458a7bfc348db34c7f1877dba"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"ec928cd6c229aa6d2ac9dee1b194f67ad1e865c8","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        return cls(rsdlib)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _get_storage(self, storage_url):"},{"line_number":88,"context_line":"        ss_url \u003d \"/\".join(storage_url.split(\"/\", 5)[:5])"},{"line_number":89,"context_line":"        storage_service \u003d self.rsdlib.get_storage_service(ss_url)"},{"line_number":90,"context_line":"        return storage_service"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1f769fc5_a67aab85","line":88,"range":{"start_line":88,"start_character":49,"end_line":88,"end_character":55},"updated":"2018-12-24 16:34:52.000000000","message":"It might be better to use -1 or -2 instead. It avoids the issue of making assumptions of the compositions of the url.","commit_id":"5ac356c102ee20ef695ef57cfd237ad9c643b33c"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"e8bf1b6fd403ec0164496117119407d33e2fcaf1","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        return cls(rsdlib)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _get_storage(self, storage_url):"},{"line_number":88,"context_line":"        ss_url \u003d \"/\".join(storage_url.split(\"/\", 5)[:5])"},{"line_number":89,"context_line":"        storage_service \u003d self.rsdlib.get_storage_service(ss_url)"},{"line_number":90,"context_line":"        return storage_service"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1f769fc5_244529b4","line":88,"range":{"start_line":88,"start_character":49,"end_line":88,"end_character":55},"in_reply_to":"1f769fc5_a67aab85","updated":"2018-12-26 08:15:58.000000000","message":"This method is designed to accept the exact storage service url, or the volume/snapshot url that contains storage service url. So it is not possible to use -1/-2 to trim the url.\n\nIt can be fixed later if we can confirm the possibilities of different compositions of this url.","commit_id":"5ac356c102ee20ef695ef57cfd237ad9c643b33c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    @classmethod"},{"line_number":62,"context_line":"    def initialize(cls, url, username, password, verify):"},{"line_number":63,"context_line":"        try:"},{"line_number":64,"context_line":"            rsdlib \u003d RSDLib(url, username, password, verify\u003dverify).factory()"},{"line_number":65,"context_line":"        except Exception as e:"},{"line_number":66,"context_line":"            # error credentials may throw unexpected exception"},{"line_number":67,"context_line":"            LOG.exception(e)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_aeeb30ae","line":64,"range":{"start_line":64,"start_character":21,"end_line":64,"end_character":27},"updated":"2019-01-04 22:13:46.000000000","message":"Shouldn\u0027t there be a check before this to make sure that RSDLib is available?  If not a more friendly error message indicating that RSDLib isn\u0027t installed should be reported.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    @classmethod"},{"line_number":62,"context_line":"    def initialize(cls, url, username, password, verify):"},{"line_number":63,"context_line":"        try:"},{"line_number":64,"context_line":"            rsdlib \u003d RSDLib(url, username, password, verify\u003dverify).factory()"},{"line_number":65,"context_line":"        except Exception as e:"},{"line_number":66,"context_line":"            # error credentials may throw unexpected exception"},{"line_number":67,"context_line":"            LOG.exception(e)"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_b04e51bf","line":64,"range":{"start_line":64,"start_character":21,"end_line":64,"end_character":27},"in_reply_to":"ffd0ebdf_aeeb30ae","updated":"2019-01-07 03:48:23.000000000","message":"Agree, added.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    def _get_providing_pool(self, volume):"},{"line_number":114,"context_line":"        len_cs \u003d len(volume.capacity_sources)"},{"line_number":115,"context_line":"        if len_cs !\u003d 1:"},{"line_number":116,"context_line":"            raise RuntimeError(\"Volume %s has %d capacity_sources!\""},{"line_number":117,"context_line":"                               % (volume.path, len_cs))"},{"line_number":118,"context_line":"        len_pp \u003d len(volume.capacity_sources[0].providing_pools)"},{"line_number":119,"context_line":"        if len_pp !\u003d 1:"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_2e4500b4","line":116,"range":{"start_line":116,"start_character":18,"end_line":116,"end_character":30},"updated":"2019-01-04 22:13:46.000000000","message":"Exceptions should be used instead of RuntimeErrors.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    def _get_providing_pool(self, volume):"},{"line_number":114,"context_line":"        len_cs \u003d len(volume.capacity_sources)"},{"line_number":115,"context_line":"        if len_cs !\u003d 1:"},{"line_number":116,"context_line":"            raise RuntimeError(\"Volume %s has %d capacity_sources!\""},{"line_number":117,"context_line":"                               % (volume.path, len_cs))"},{"line_number":118,"context_line":"        len_pp \u003d len(volume.capacity_sources[0].providing_pools)"},{"line_number":119,"context_line":"        if len_pp !\u003d 1:"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_d04bd5ad","line":116,"range":{"start_line":116,"start_character":18,"end_line":116,"end_character":30},"in_reply_to":"ffd0ebdf_2e4500b4","updated":"2019-01-07 03:48:23.000000000","message":"fixed with exception.ValidationError","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                \"Replica\": {\"@odata.id\": source_snap}"},{"line_number":143,"context_line":"            }]"},{"line_number":144,"context_line":"            if source_vol:"},{"line_number":145,"context_line":"                raise RuntimeError(\"Cannot specify both \""},{"line_number":146,"context_line":"                                   \"source_snap\u003d%s and \""},{"line_number":147,"context_line":"                                   \"source_vol\u003d%s!\""},{"line_number":148,"context_line":"                                   % (source_snap, source_vol))"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_ae87b0d7","line":145,"range":{"start_line":145,"start_character":22,"end_line":145,"end_character":34},"updated":"2019-01-04 22:13:46.000000000","message":"Just going to make a blanket statement here.  These should be exceptions using something like VolumeBackendAPIException or something that you add to cinder/exceptions.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                \"Replica\": {\"@odata.id\": source_snap}"},{"line_number":143,"context_line":"            }]"},{"line_number":144,"context_line":"            if source_vol:"},{"line_number":145,"context_line":"                raise RuntimeError(\"Cannot specify both \""},{"line_number":146,"context_line":"                                   \"source_snap\u003d%s and \""},{"line_number":147,"context_line":"                                   \"source_vol\u003d%s!\""},{"line_number":148,"context_line":"                                   % (source_snap, source_vol))"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_f0d939f4","line":145,"range":{"start_line":145,"start_character":22,"end_line":145,"end_character":34},"in_reply_to":"ffd0ebdf_ae87b0d7","updated":"2019-01-07 03:48:23.000000000","message":"fixed with exception.InvalidInput","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    LOG.warning(\"skipped storage %s for creation error %s\","},{"line_number":180,"context_line":"                                storage.path, e)"},{"line_number":181,"context_line":"        except Exception as e:"},{"line_number":182,"context_line":"            LOG.exception(e)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":185,"context_line":"            data\u003d(_(\u0027Unable to create new volume with %d GiB\u0027) % size_in_gb))"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_6e52286a","line":182,"range":{"start_line":182,"start_character":12,"end_line":182,"end_character":28},"updated":"2019-01-04 22:13:46.000000000","message":"Should give some context here that this was a failure at volume creation time.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    LOG.warning(\"skipped storage %s for creation error %s\","},{"line_number":180,"context_line":"                                storage.path, e)"},{"line_number":181,"context_line":"        except Exception as e:"},{"line_number":182,"context_line":"            LOG.exception(e)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":185,"context_line":"            data\u003d(_(\u0027Unable to create new volume with %d GiB\u0027) % size_in_gb))"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_90f46d5d","line":182,"range":{"start_line":182,"start_character":12,"end_line":182,"end_character":28},"in_reply_to":"ffd0ebdf_6e52286a","updated":"2019-01-07 03:48:23.000000000","message":"done.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":289,"context_line":"                volume \u003d self._get_volume(volume_url)"},{"line_number":290,"context_line":"            except sushy_exceptions.ResourceNotFoundError:"},{"line_number":291,"context_line":"                if ignore_non_exist:"},{"line_number":292,"context_line":"                    LOG.warning(\"Deleted non exist vol/snap %s\", volume_url)"},{"line_number":293,"context_line":"                    return True"},{"line_number":294,"context_line":"                else:"},{"line_number":295,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_0eab5c1d","line":292,"range":{"start_line":292,"start_character":45,"end_line":292,"end_character":50},"updated":"2019-01-04 22:13:46.000000000","message":"existent","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":289,"context_line":"                volume \u003d self._get_volume(volume_url)"},{"line_number":290,"context_line":"            except sushy_exceptions.ResourceNotFoundError:"},{"line_number":291,"context_line":"                if ignore_non_exist:"},{"line_number":292,"context_line":"                    LOG.warning(\"Deleted non exist vol/snap %s\", volume_url)"},{"line_number":293,"context_line":"                    return True"},{"line_number":294,"context_line":"                else:"},{"line_number":295,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_b0aad116","line":292,"range":{"start_line":292,"start_character":45,"end_line":292,"end_character":50},"in_reply_to":"ffd0ebdf_0eab5c1d","updated":"2019-01-07 03:48:23.000000000","message":"thanks, done.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid):"},{"line_number":316,"context_line":"                    return node.path"},{"line_number":317,"context_line":"        except Exception as e:"},{"line_number":318,"context_line":"            LOG.exception(e)"},{"line_number":319,"context_line":"        return \"\""},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def get_stats(self):"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_6e7308e9","line":318,"range":{"start_line":318,"start_character":12,"end_line":318,"end_character":28},"updated":"2019-01-04 22:13:46.000000000","message":"This message needs more context.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                        and node.system.uuid.upper() \u003d\u003d uuid):"},{"line_number":316,"context_line":"                    return node.path"},{"line_number":317,"context_line":"        except Exception as e:"},{"line_number":318,"context_line":"            LOG.exception(e)"},{"line_number":319,"context_line":"        return \"\""},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def get_stats(self):"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_d0a7554f","line":318,"range":{"start_line":318,"start_character":12,"end_line":318,"end_character":28},"in_reply_to":"ffd0ebdf_6e7308e9","updated":"2019-01-07 03:48:23.000000000","message":"added context","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                     allocated_capacity_gb,"},{"line_number":341,"context_line":"                     total_volumes)"},{"line_number":342,"context_line":"        except Exception as e:"},{"line_number":343,"context_line":"            LOG.exception(e)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        return (free_capacity_gb,"},{"line_number":346,"context_line":"                total_capacity_gb,"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_4e5f2441","line":343,"range":{"start_line":343,"start_character":11,"end_line":343,"end_character":28},"updated":"2019-01-04 22:13:46.000000000","message":"Same comment here.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                     allocated_capacity_gb,"},{"line_number":341,"context_line":"                     total_volumes)"},{"line_number":342,"context_line":"        except Exception as e:"},{"line_number":343,"context_line":"            LOG.exception(e)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        return (free_capacity_gb,"},{"line_number":346,"context_line":"                total_capacity_gb,"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_70622919","line":343,"range":{"start_line":343,"start_character":11,"end_line":343,"end_character":28},"in_reply_to":"ffd0ebdf_4e5f2441","updated":"2019-01-07 03:48:23.000000000","message":"added context","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":403,"context_line":"                    \"Attach volume error: %d host nqns\" % len(n_endpoints))"},{"line_number":404,"context_line":"            host_nqn, v_endpoint \u003d n_endpoints[0]"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"            LOG.info(\u0027Retrieved target IP %s, target Port %s, target NQN %s \u0027"},{"line_number":407,"context_line":"                     \u0027and initiator NQN %s\u0027,"},{"line_number":408,"context_line":"                     target_ip, target_port, target_nqn, host_nqn)"},{"line_number":409,"context_line":"            return (target_ip, target_port, target_nqn, host_nqn)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_0e2efca4","line":406,"range":{"start_line":406,"start_character":16,"end_line":406,"end_character":20},"updated":"2019-01-04 22:13:46.000000000","message":"This should be LOG.debug level","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":403,"context_line":"                    \"Attach volume error: %d host nqns\" % len(n_endpoints))"},{"line_number":404,"context_line":"            host_nqn, v_endpoint \u003d n_endpoints[0]"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"            LOG.info(\u0027Retrieved target IP %s, target Port %s, target NQN %s \u0027"},{"line_number":407,"context_line":"                     \u0027and initiator NQN %s\u0027,"},{"line_number":408,"context_line":"                     target_ip, target_port, target_nqn, host_nqn)"},{"line_number":409,"context_line":"            return (target_ip, target_port, target_nqn, host_nqn)"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_73feb306","line":406,"range":{"start_line":406,"start_character":16,"end_line":406,"end_character":20},"in_reply_to":"ffd0ebdf_0e2efca4","updated":"2019-01-07 03:48:23.000000000","message":"It is an import message here to record that a volume is attached and connection is prepared at Cinder side.\n\nSome reason to print it as info:\n* it is not printed frequently, only once during attachment.\n* useful to correlate backend, cinder or nova issues if nova-side cannot connect.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                     target_ip, target_port, target_nqn, host_nqn)"},{"line_number":409,"context_line":"            return (target_ip, target_port, target_nqn, host_nqn)"},{"line_number":410,"context_line":"        except Exception as e:"},{"line_number":411,"context_line":"            LOG.exception(e)"},{"line_number":412,"context_line":"            try:"},{"line_number":413,"context_line":"                node.refresh()"},{"line_number":414,"context_line":"                node.detach_endpoint(volume.path)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_ce19d488","line":411,"range":{"start_line":411,"start_character":11,"end_line":411,"end_character":28},"updated":"2019-01-04 22:13:46.000000000","message":"Same here.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                     target_ip, target_port, target_nqn, host_nqn)"},{"line_number":409,"context_line":"            return (target_ip, target_port, target_nqn, host_nqn)"},{"line_number":410,"context_line":"        except Exception as e:"},{"line_number":411,"context_line":"            LOG.exception(e)"},{"line_number":412,"context_line":"            try:"},{"line_number":413,"context_line":"                node.refresh()"},{"line_number":414,"context_line":"                node.detach_endpoint(volume.path)"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_932c779a","line":411,"range":{"start_line":411,"start_character":11,"end_line":411,"end_character":28},"in_reply_to":"ffd0ebdf_ce19d488","updated":"2019-01-07 03:48:23.000000000","message":"Done","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":426,"context_line":"                         \u0027volume\u0027: volume_url}))"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def detach_volume_from_node(self, volume_url, node_url):"},{"line_number":429,"context_line":"        LOG.info(\u0027Trying detach from node %s to volume %s\u0027,"},{"line_number":430,"context_line":"                 node_url, volume_url)"},{"line_number":431,"context_line":"        try:"},{"line_number":432,"context_line":"            volume \u003d self._get_volume(volume_url)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_8e13cc66","line":429,"range":{"start_line":429,"start_character":45,"end_line":429,"end_character":47},"updated":"2019-01-04 22:13:46.000000000","message":"for","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":426,"context_line":"                         \u0027volume\u0027: volume_url}))"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def detach_volume_from_node(self, volume_url, node_url):"},{"line_number":429,"context_line":"        LOG.info(\u0027Trying detach from node %s to volume %s\u0027,"},{"line_number":430,"context_line":"                 node_url, volume_url)"},{"line_number":431,"context_line":"        try:"},{"line_number":432,"context_line":"            volume \u003d self._get_volume(volume_url)"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_53260fba","line":429,"range":{"start_line":429,"start_character":45,"end_line":429,"end_character":47},"in_reply_to":"ffd0ebdf_8e13cc66","updated":"2019-01-07 03:48:23.000000000","message":"Done","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            self.configuration.podm_password,"},{"line_number":461,"context_line":"            self.configuration.podm_verify)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def check_for_setup_error(self):"},{"line_number":464,"context_line":"        pass"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"    def create_volume(self, volume):"},{"line_number":467,"context_line":"        size_in_gb \u003d int(volume[\u0027size\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"ffd0ebdf_4e0de43c","line":464,"range":{"start_line":463,"start_character":0,"end_line":464,"end_character":12},"updated":"2019-01-04 22:13:46.000000000","message":"As noted before the required libraries should be checked that they are available somewhere.  This would be one place to do that.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            self.configuration.podm_password,"},{"line_number":461,"context_line":"            self.configuration.podm_verify)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def check_for_setup_error(self):"},{"line_number":464,"context_line":"        pass"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"    def create_volume(self, volume):"},{"line_number":467,"context_line":"        size_in_gb \u003d int(volume[\u0027size\u0027])"}],"source_content_type":"text/x-python","patch_set":25,"id":"dfd5e7cf_133de7ba","line":464,"range":{"start_line":463,"start_character":0,"end_line":464,"end_character":12},"in_reply_to":"ffd0ebdf_4e0de43c","updated":"2019-01-07 03:48:23.000000000","message":"Since `do_setup` is called before `check_for_setup_error` and is now checking that rsd-lib is missing, IMHO it is not necessary to add the check here.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a33621ceeffe7d20dda27b70c65f10916557d92f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            rsdlib \u003d RSDLib(url, username, password, verify\u003dverify).factory()"},{"line_number":70,"context_line":"        except Exception as e:"},{"line_number":71,"context_line":"            # error credentials may throw unexpected exception"},{"line_number":72,"context_line":"            LOG.exception(e)"},{"line_number":73,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":74,"context_line":"                data\u003d_(\"initialize: Cannot connect to RSD PODM.\"))"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_30d02851","line":72,"range":{"start_line":72,"start_character":12,"end_line":72,"end_character":28},"updated":"2019-01-10 17:53:14.000000000","message":"This will just log the exception twice. Add some useful information to the logged message and either use LOG.error() and format the exception into it, or use LOG.exception and keep e out of it.","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1156a5632862b4374b9251306b16526d7a42c3e6","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            rsdlib \u003d RSDLib(url, username, password, verify\u003dverify).factory()"},{"line_number":70,"context_line":"        except Exception as e:"},{"line_number":71,"context_line":"            # error credentials may throw unexpected exception"},{"line_number":72,"context_line":"            LOG.exception(e)"},{"line_number":73,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":74,"context_line":"                data\u003d_(\"initialize: Cannot connect to RSD PODM.\"))"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_d368c6bb","line":72,"range":{"start_line":72,"start_character":12,"end_line":72,"end_character":28},"in_reply_to":"bfdaf3ff_30d02851","updated":"2019-01-10 20:48:25.000000000","message":"Done","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a33621ceeffe7d20dda27b70c65f10916557d92f","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                data\u003d_(\"initialize: Cannot connect to RSD PODM.\"))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if not verify:"},{"line_number":77,"context_line":"            requests.packages.urllib3.disable_warnings()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if rsdlib._rsd_api_version \u003c \"2.4.0\":"},{"line_number":80,"context_line":"            raise exception.VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_d0499c32","line":77,"updated":"2019-01-10 17:53:14.000000000","message":"This disables warnings for everything. Just use the existing suppress_requests_ssl_warnings config option and let the manager take care of that.\n\nhttps://github.com/openstack/cinder/blob/5642adfae81b8c61a23ee18e7a9588b28b23b7e7/cinder/volume/manager.py#L235","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1156a5632862b4374b9251306b16526d7a42c3e6","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                data\u003d_(\"initialize: Cannot connect to RSD PODM.\"))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if not verify:"},{"line_number":77,"context_line":"            requests.packages.urllib3.disable_warnings()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if rsdlib._rsd_api_version \u003c \"2.4.0\":"},{"line_number":80,"context_line":"            raise exception.VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_f365cae2","line":77,"in_reply_to":"bfdaf3ff_d0499c32","updated":"2019-01-10 20:48:25.000000000","message":"Done","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a33621ceeffe7d20dda27b70c65f10916557d92f","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                    LOG.warning(\"skipped storage %s for creation error %s\","},{"line_number":190,"context_line":"                                storage.path, e)"},{"line_number":191,"context_line":"        except Exception as e:"},{"line_number":192,"context_line":"            LOG.exception(\"Create volume failed: %s\", e)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":195,"context_line":"            data\u003d(_(\u0027Unable to create new volume with %d GiB\u0027) % size_in_gb))"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_305ee8e6","line":192,"range":{"start_line":192,"start_character":49,"end_line":192,"end_character":55},"updated":"2019-01-10 17:53:14.000000000","message":"Remove this or change to LOG.error","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1156a5632862b4374b9251306b16526d7a42c3e6","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                    LOG.warning(\"skipped storage %s for creation error %s\","},{"line_number":190,"context_line":"                                storage.path, e)"},{"line_number":191,"context_line":"        except Exception as e:"},{"line_number":192,"context_line":"            LOG.exception(\"Create volume failed: %s\", e)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        raise exception.VolumeBackendAPIException("},{"line_number":195,"context_line":"            data\u003d(_(\u0027Unable to create new volume with %d GiB\u0027) % size_in_gb))"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_93623ed8","line":192,"range":{"start_line":192,"start_character":49,"end_line":192,"end_character":55},"in_reply_to":"bfdaf3ff_305ee8e6","updated":"2019-01-10 20:48:25.000000000","message":"Done","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a33621ceeffe7d20dda27b70c65f10916557d92f","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                     snap_url, volume_url)"},{"line_number":208,"context_line":"            return snap_url"},{"line_number":209,"context_line":"        except Exception as e:"},{"line_number":210,"context_line":"            LOG.exception(\"Create snapshot failed: %s\", e)"},{"line_number":211,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":212,"context_line":"                data\u003d(_(\u0027Unable to create snapshot from volume %s\u0027)"},{"line_number":213,"context_line":"                      % volume_url))"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_f06f0090","line":210,"range":{"start_line":210,"start_character":51,"end_line":210,"end_character":57},"updated":"2019-01-10 17:53:14.000000000","message":"Same throughout.","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1156a5632862b4374b9251306b16526d7a42c3e6","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                     snap_url, volume_url)"},{"line_number":208,"context_line":"            return snap_url"},{"line_number":209,"context_line":"        except Exception as e:"},{"line_number":210,"context_line":"            LOG.exception(\"Create snapshot failed: %s\", e)"},{"line_number":211,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":212,"context_line":"                data\u003d(_(\u0027Unable to create snapshot from volume %s\u0027)"},{"line_number":213,"context_line":"                      % volume_url))"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_b35f420d","line":210,"range":{"start_line":210,"start_character":51,"end_line":210,"end_character":57},"in_reply_to":"bfdaf3ff_f06f0090","updated":"2019-01-10 20:48:25.000000000","message":"Done","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a33621ceeffe7d20dda27b70c65f10916557d92f","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            pool_url \u003d self._get_providing_pool(origin_volume)"},{"line_number":244,"context_line":"            snap_url \u003d self._create_vol_or_snap("},{"line_number":245,"context_line":"                ss, origin_volume.capacity_bytes,"},{"line_number":246,"context_line":"                pool_url \u003d pool_url,"},{"line_number":247,"context_line":"                source_vol \u003d volume_url)"},{"line_number":248,"context_line":"        except Exception as e:"},{"line_number":249,"context_line":"            LOG.exception(\"Clone volume failed (create snapshot phase): %s\", e)"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_5004ccc6","line":246,"range":{"start_line":246,"start_character":24,"end_line":246,"end_character":27},"updated":"2019-01-10 17:53:14.000000000","message":"Should not have spaces around \u003d for kwargs.","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1156a5632862b4374b9251306b16526d7a42c3e6","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            pool_url \u003d self._get_providing_pool(origin_volume)"},{"line_number":244,"context_line":"            snap_url \u003d self._create_vol_or_snap("},{"line_number":245,"context_line":"                ss, origin_volume.capacity_bytes,"},{"line_number":246,"context_line":"                pool_url \u003d pool_url,"},{"line_number":247,"context_line":"                source_vol \u003d volume_url)"},{"line_number":248,"context_line":"        except Exception as e:"},{"line_number":249,"context_line":"            LOG.exception(\"Clone volume failed (create snapshot phase): %s\", e)"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_739f9ab4","line":246,"range":{"start_line":246,"start_character":24,"end_line":246,"end_character":27},"in_reply_to":"bfdaf3ff_5004ccc6","updated":"2019-01-10 20:48:25.000000000","message":"Done, pep8 should probably have caught that...","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a33621ceeffe7d20dda27b70c65f10916557d92f","unresolved":false,"context_lines":[{"line_number":487,"context_line":"    \"\"\"Executes commands relating to Volumes in RSD Solution\"\"\""},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    VERSION \u003d \u00271.0.0\u0027"},{"line_number":490,"context_line":"    CI_WIKI_NAME \u003d \u0027RSD\u0027"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":493,"context_line":"        super(RsdDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_302ca846","line":490,"range":{"start_line":490,"start_character":20,"end_line":490,"end_character":23},"updated":"2019-01-10 17:53:14.000000000","message":"This is not correct. The page, at least as it has been set up so far, is Intel-RSD-CI.\n\nhttps://wiki.openstack.org/wiki/ThirdPartySystems/Intel-RSD-CI","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1156a5632862b4374b9251306b16526d7a42c3e6","unresolved":false,"context_lines":[{"line_number":487,"context_line":"    \"\"\"Executes commands relating to Volumes in RSD Solution\"\"\""},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    VERSION \u003d \u00271.0.0\u0027"},{"line_number":490,"context_line":"    CI_WIKI_NAME \u003d \u0027RSD\u0027"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":493,"context_line":"        super(RsdDriver, self).__init__(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_93b79e3b","line":490,"range":{"start_line":490,"start_character":20,"end_line":490,"end_character":23},"in_reply_to":"bfdaf3ff_302ca846","updated":"2019-01-10 20:48:25.000000000","message":"Done","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a33621ceeffe7d20dda27b70c65f10916557d92f","unresolved":false,"context_lines":[{"line_number":624,"context_line":"                self.rsdClient.extend_volume(volume_url, size_in_gb)"},{"line_number":625,"context_line":"            except Exception as e:"},{"line_number":626,"context_line":"                self.rsdClient.delete_vol_or_snap(volume_url)"},{"line_number":627,"context_line":"                raise e"},{"line_number":628,"context_line":"        return {\u0027provider_location\u0027: volume_url}"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_10dc0445","line":627,"range":{"start_line":627,"start_character":16,"end_line":627,"end_character":23},"updated":"2019-01-10 17:53:14.000000000","message":"Should just be \"raise\", not \"raise e\".","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1156a5632862b4374b9251306b16526d7a42c3e6","unresolved":false,"context_lines":[{"line_number":624,"context_line":"                self.rsdClient.extend_volume(volume_url, size_in_gb)"},{"line_number":625,"context_line":"            except Exception as e:"},{"line_number":626,"context_line":"                self.rsdClient.delete_vol_or_snap(volume_url)"},{"line_number":627,"context_line":"                raise e"},{"line_number":628,"context_line":"        return {\u0027provider_location\u0027: volume_url}"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"    def create_snapshot(self, snapshot):"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_13408e07","line":627,"range":{"start_line":627,"start_character":16,"end_line":627,"end_character":23},"in_reply_to":"bfdaf3ff_10dc0445","updated":"2019-01-10 20:48:25.000000000","message":"Done","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a33621ceeffe7d20dda27b70c65f10916557d92f","unresolved":false,"context_lines":[{"line_number":665,"context_line":"            except Exception as e:"},{"line_number":666,"context_line":"                self.rsdClient.delete_vol_or_snap(new_vol_url)"},{"line_number":667,"context_line":"                self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":668,"context_line":"                raise e"},{"line_number":669,"context_line":"        volume.save()"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_30e10800","line":668,"range":{"start_line":668,"start_character":16,"end_line":668,"end_character":23},"updated":"2019-01-10 17:53:14.000000000","message":"raise","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1156a5632862b4374b9251306b16526d7a42c3e6","unresolved":false,"context_lines":[{"line_number":665,"context_line":"            except Exception as e:"},{"line_number":666,"context_line":"                self.rsdClient.delete_vol_or_snap(new_vol_url)"},{"line_number":667,"context_line":"                self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":668,"context_line":"                raise e"},{"line_number":669,"context_line":"        volume.save()"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_33459218","line":668,"range":{"start_line":668,"start_character":16,"end_line":668,"end_character":23},"in_reply_to":"bfdaf3ff_30e10800","updated":"2019-01-10 20:48:25.000000000","message":"Done","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a33621ceeffe7d20dda27b70c65f10916557d92f","unresolved":false,"context_lines":[{"line_number":666,"context_line":"                self.rsdClient.delete_vol_or_snap(new_vol_url)"},{"line_number":667,"context_line":"                self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":668,"context_line":"                raise e"},{"line_number":669,"context_line":"        volume.save()"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_f0e2a001","line":669,"range":{"start_line":669,"start_character":8,"end_line":669,"end_character":21},"updated":"2019-01-10 17:53:14.000000000","message":"This will never get called if extending to a new size fails. Should probably rollback and delete the volume in that case.","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1156a5632862b4374b9251306b16526d7a42c3e6","unresolved":false,"context_lines":[{"line_number":666,"context_line":"                self.rsdClient.delete_vol_or_snap(new_vol_url)"},{"line_number":667,"context_line":"                self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":668,"context_line":"                raise e"},{"line_number":669,"context_line":"        volume.save()"}],"source_content_type":"text/x-python","patch_set":28,"id":"bfdaf3ff_d349a632","line":669,"range":{"start_line":669,"start_character":8,"end_line":669,"end_character":21},"in_reply_to":"bfdaf3ff_f0e2a001","updated":"2019-01-10 20:48:25.000000000","message":"Done","commit_id":"fdec8019ebb733ff4765ab9514cf8655c8ed3db2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"82c05632da81d14cb90c7a7ade5a65e65ab805b3","unresolved":false,"context_lines":[{"line_number":660,"context_line":"                self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":661,"context_line":"                volume.destroy()"},{"line_number":662,"context_line":"                raise"},{"line_number":663,"context_line":"        volume.save()"}],"source_content_type":"text/x-python","patch_set":29,"id":"bfdaf3ff_8f3bb8cf","line":663,"range":{"start_line":663,"start_character":8,"end_line":663,"end_character":21},"updated":"2019-01-14 19:49:34.000000000","message":"No need to set this at line 654 and call save() here.  Just return the new metadata from this method and it will be updated from the volume manager.","commit_id":"cfb2ca9fff182d680fb69f70c662cf258ceb8aa0"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"3ccf04195803c3e7c46ef4c1bd78ed08714fcefe","unresolved":false,"context_lines":[{"line_number":660,"context_line":"                self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":661,"context_line":"                volume.destroy()"},{"line_number":662,"context_line":"                raise"},{"line_number":663,"context_line":"        volume.save()"}],"source_content_type":"text/x-python","patch_set":29,"id":"bfdaf3ff_1174c667","line":663,"range":{"start_line":663,"start_character":8,"end_line":663,"end_character":21},"in_reply_to":"bfdaf3ff_8f3bb8cf","updated":"2019-01-15 01:47:53.000000000","message":"done. Thanks!","commit_id":"cfb2ca9fff182d680fb69f70c662cf258ceb8aa0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e3f0578e002898d5cc6379d9a61d982751f96b2b","unresolved":false,"context_lines":[{"line_number":670,"context_line":"                self.rsdClient.delete_vol_or_snap(new_vol_url)"},{"line_number":671,"context_line":"                self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":672,"context_line":"                volume.destroy()"},{"line_number":673,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":31,"id":"bfdaf3ff_894abf52","line":673,"updated":"2019-01-15 17:29:34.000000000","message":"You have to return the desired updates from this method.","commit_id":"d1d778ed75c569503485847ff4212ae8759be793"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"a487ca83117d17190472347fa7f0fa3d2cecfd29","unresolved":false,"context_lines":[{"line_number":670,"context_line":"                self.rsdClient.delete_vol_or_snap(new_vol_url)"},{"line_number":671,"context_line":"                self.rsdClient.delete_vol_or_snap(provider_snap_url)"},{"line_number":672,"context_line":"                volume.destroy()"},{"line_number":673,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":31,"id":"bfdaf3ff_b304be4b","line":673,"in_reply_to":"bfdaf3ff_894abf52","updated":"2019-01-16 12:10:57.000000000","message":"Thanks, seems `volume.destroy()` above is also not needed.\n\nChanged to return desired updates.","commit_id":"d1d778ed75c569503485847ff4212ae8759be793"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bd0c440ef883a69faf452753563ac43254dc7e8a","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"@interface.volumedriver"},{"line_number":488,"context_line":"class RsdDriver(driver.VolumeDriver):"},{"line_number":489,"context_line":"    \"\"\"Executes commands relating to Volumes in RSD Solution\"\"\""},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    VERSION \u003d \u00271.0.0\u0027"},{"line_number":492,"context_line":"    CI_WIKI_NAME \u003d \u0027INTEL-RSD-CI\u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_deb7cd20","line":489,"updated":"2019-02-26 14:21:39.000000000","message":"probably need a better description for this driver, since this shows up in the generated documentation.\n\nAlso would add a VersionHistory block like in other drivers too.","commit_id":"9718e813838eeb5f533024c0e779290495f1a8fd"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"e5f5201e1d1e9d9b42f01b1342901f0946220ba2","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"@interface.volumedriver"},{"line_number":488,"context_line":"class RsdDriver(driver.VolumeDriver):"},{"line_number":489,"context_line":"    \"\"\"Executes commands relating to Volumes in RSD Solution\"\"\""},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    VERSION \u003d \u00271.0.0\u0027"},{"line_number":492,"context_line":"    CI_WIKI_NAME \u003d \u0027INTEL-RSD-CI\u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_0114cd3f","line":489,"in_reply_to":"9fdfeff1_deb7cd20","updated":"2019-03-01 05:44:05.000000000","message":"Done","commit_id":"9718e813838eeb5f533024c0e779290495f1a8fd"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bd0c440ef883a69faf452753563ac43254dc7e8a","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            self.configuration.podm_password,"},{"line_number":506,"context_line":"            self.configuration.suppress_requests_ssl_warnings)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"    def check_for_setup_error(self):"},{"line_number":509,"context_line":"        pass"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    @utils.trace"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_fe72d17b","line":508,"updated":"2019-02-26 14:21:39.000000000","message":"maybe check for the validity of the self.rsdClient or other configuration options?","commit_id":"9718e813838eeb5f533024c0e779290495f1a8fd"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"e5f5201e1d1e9d9b42f01b1342901f0946220ba2","unresolved":false,"context_lines":[{"line_number":505,"context_line":"            self.configuration.podm_password,"},{"line_number":506,"context_line":"            self.configuration.suppress_requests_ssl_warnings)"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"    def check_for_setup_error(self):"},{"line_number":509,"context_line":"        pass"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    @utils.trace"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_a1286185","line":508,"in_reply_to":"9fdfeff1_fe72d17b","updated":"2019-03-01 05:44:05.000000000","message":"Done","commit_id":"9718e813838eeb5f533024c0e779290495f1a8fd"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bd0c440ef883a69faf452753563ac43254dc7e8a","unresolved":false,"context_lines":[{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    @utils.trace"},{"line_number":571,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":572,"context_line":"        uuid \u003d connector.get(\"system uuid\")"},{"line_number":573,"context_line":"        if not uuid:"},{"line_number":574,"context_line":"            msg \u003d _(\"initialize_connection error: no uuid available!\")"},{"line_number":575,"context_line":"            LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_9ec06552","line":572,"updated":"2019-02-26 14:21:39.000000000","message":"\"system uuid\" isn\u0027t guaranteed to be in the connector","commit_id":"9718e813838eeb5f533024c0e779290495f1a8fd"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"e5f5201e1d1e9d9b42f01b1342901f0946220ba2","unresolved":false,"context_lines":[{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    @utils.trace"},{"line_number":571,"context_line":"    def initialize_connection(self, volume, connector, **kwargs):"},{"line_number":572,"context_line":"        uuid \u003d connector.get(\"system uuid\")"},{"line_number":573,"context_line":"        if not uuid:"},{"line_number":574,"context_line":"            msg \u003d _(\"initialize_connection error: no uuid available!\")"},{"line_number":575,"context_line":"            LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_efc19481","line":572,"in_reply_to":"9fdfeff1_9ec06552","updated":"2019-03-01 05:44:05.000000000","message":"if the \"system uuid\" is not present connector.get() returns none, it will not raise exception. if uuid is none, this case is handled by the code below.","commit_id":"9718e813838eeb5f533024c0e779290495f1a8fd"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"bd0c440ef883a69faf452753563ac43254dc7e8a","unresolved":false,"context_lines":[{"line_number":602,"context_line":"            # None connector means force-detach"},{"line_number":603,"context_line":"            return"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"        uuid \u003d connector.get(\"system uuid\")"},{"line_number":606,"context_line":"        if not uuid:"},{"line_number":607,"context_line":"            msg \u003d _(\"terminate_connection error: no uuid available!\")"},{"line_number":608,"context_line":"            LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_1ecc7587","line":605,"updated":"2019-02-26 14:21:39.000000000","message":"same","commit_id":"9718e813838eeb5f533024c0e779290495f1a8fd"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"e5f5201e1d1e9d9b42f01b1342901f0946220ba2","unresolved":false,"context_lines":[{"line_number":602,"context_line":"            # None connector means force-detach"},{"line_number":603,"context_line":"            return"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"        uuid \u003d connector.get(\"system uuid\")"},{"line_number":606,"context_line":"        if not uuid:"},{"line_number":607,"context_line":"            msg \u003d _(\"terminate_connection error: no uuid available!\")"},{"line_number":608,"context_line":"            LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9fdfeff1_4f38e09e","line":605,"in_reply_to":"9fdfeff1_1ecc7587","updated":"2019-03-01 05:44:05.000000000","message":"refer the above comment.","commit_id":"9718e813838eeb5f533024c0e779290495f1a8fd"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"47b49ac69500ccb3c76ea0dcd684062c90bbff86","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        target_ip, target_port, target_nqn, initiator_nqn \u003d ("},{"line_number":595,"context_line":"            self.rsdClient.attach_volume_to_node(volume_url, node_url))"},{"line_number":596,"context_line":"        conn_info \u003d {"},{"line_number":597,"context_line":"            \u0027driver_volume_type\u0027: \u0027nvmeof\u0027,"},{"line_number":598,"context_line":"            \u0027data\u0027: {"},{"line_number":599,"context_line":"                \u0027transport_type\u0027: \u0027rdma\u0027,"},{"line_number":600,"context_line":"                \u0027host_nqn\u0027: initiator_nqn,"}],"source_content_type":"text/x-python","patch_set":36,"id":"5fc1f717_9505bf48","line":597,"updated":"2019-03-12 18:10:23.000000000","message":"There is really no reason for a new protocol here.  This ends up going to the same os-brick connector as the \u0027nvme\u0027 protocol.","commit_id":"be569f8861f8590a30838a208bb593a92d251f15"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"081757378f84f61baec9f681a2b8cb0108cf4dc8","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        target_ip, target_port, target_nqn, initiator_nqn \u003d ("},{"line_number":595,"context_line":"            self.rsdClient.attach_volume_to_node(volume_url, node_url))"},{"line_number":596,"context_line":"        conn_info \u003d {"},{"line_number":597,"context_line":"            \u0027driver_volume_type\u0027: \u0027nvmeof\u0027,"},{"line_number":598,"context_line":"            \u0027data\u0027: {"},{"line_number":599,"context_line":"                \u0027transport_type\u0027: \u0027rdma\u0027,"},{"line_number":600,"context_line":"                \u0027host_nqn\u0027: initiator_nqn,"}],"source_content_type":"text/x-python","patch_set":36,"id":"5fc1f717_4bd9f37c","line":597,"in_reply_to":"5fc1f717_9505bf48","updated":"2019-03-12 19:41:05.000000000","message":"nvmeof has been around for a while, but only added to os-brick 4 months ago.  This looks ok now.","commit_id":"be569f8861f8590a30838a208bb593a92d251f15"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"60b3ebf01fe4957b3bd9e84fd18f207e8e31f986","unresolved":false,"context_lines":[{"line_number":490,"context_line":""},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"@interface.volumedriver"},{"line_number":493,"context_line":"class RsdDriver(driver.VolumeDriver):"},{"line_number":494,"context_line":"    \"\"\"Openstack driver to perform NVMe-oF volume management in RSD Solution"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    .. code-block:: none"}],"source_content_type":"text/x-python","patch_set":38,"id":"ffb9cba7_8d5adaf0","line":493,"range":{"start_line":493,"start_character":6,"end_line":493,"end_character":15},"updated":"2019-04-24 14:32:59.000000000","message":"Shouldn\u0027t this be RSDDriver to prevent confusion?","commit_id":"5c02fe8d23feafeb58ee94654da146e33b978dff"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"b3e7fa3dbc359d144c0c4e966431670bda412611","unresolved":false,"context_lines":[{"line_number":490,"context_line":""},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"@interface.volumedriver"},{"line_number":493,"context_line":"class RsdDriver(driver.VolumeDriver):"},{"line_number":494,"context_line":"    \"\"\"Openstack driver to perform NVMe-oF volume management in RSD Solution"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    .. code-block:: none"}],"source_content_type":"text/x-python","patch_set":38,"id":"ffb9cba7_07fa3b74","line":493,"range":{"start_line":493,"start_character":6,"end_line":493,"end_character":15},"in_reply_to":"ffb9cba7_8d5adaf0","updated":"2019-04-28 20:28:06.000000000","message":"Done","commit_id":"5c02fe8d23feafeb58ee94654da146e33b978dff"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"60b3ebf01fe4957b3bd9e84fd18f207e8e31f986","unresolved":false,"context_lines":[{"line_number":517,"context_line":"            self.configuration.suppress_requests_ssl_warnings)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def check_for_setup_error(self):"},{"line_number":520,"context_line":"        if self.rsdClient is None:"},{"line_number":521,"context_line":"            msg \u003d _(\"setup error: rsd client is not available!\")"},{"line_number":522,"context_line":"            LOG.exception(msg)"},{"line_number":523,"context_line":"            raise exception.VolumeBackendAPIException(msg)"}],"source_content_type":"text/x-python","patch_set":38,"id":"ffb9cba7_0d6eea94","line":520,"range":{"start_line":520,"start_character":11,"end_line":520,"end_character":34},"updated":"2019-04-24 14:32:59.000000000","message":"Is it possible for this to ever be true?\n\nI think do_setup() would have already errored before we get here.","commit_id":"5c02fe8d23feafeb58ee94654da146e33b978dff"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"b3e7fa3dbc359d144c0c4e966431670bda412611","unresolved":false,"context_lines":[{"line_number":517,"context_line":"            self.configuration.suppress_requests_ssl_warnings)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def check_for_setup_error(self):"},{"line_number":520,"context_line":"        if self.rsdClient is None:"},{"line_number":521,"context_line":"            msg \u003d _(\"setup error: rsd client is not available!\")"},{"line_number":522,"context_line":"            LOG.exception(msg)"},{"line_number":523,"context_line":"            raise exception.VolumeBackendAPIException(msg)"}],"source_content_type":"text/x-python","patch_set":38,"id":"ffb9cba7_0ef1e46b","line":520,"range":{"start_line":520,"start_character":11,"end_line":520,"end_character":34},"in_reply_to":"ffb9cba7_0d6eea94","updated":"2019-04-28 20:28:06.000000000","message":"Thanks for pointing it out. Since `do_setup` is called before `check_for_setup_error` and is now checking that rsd-lib is missing, it is not necessary to add the check here. I will remove check here and there are no other things to check apart from rsdClient","commit_id":"5c02fe8d23feafeb58ee94654da146e33b978dff"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9e7e3c2bf4f8c6622fb2b5a77fe3a954fb2b30f0","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class RSDRetryableException(exception.VolumeDriverException):"},{"line_number":55,"context_line":"    message \u003d _(\"RSD retryable exception: %(reason)s\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def get_volume_metadata(volume):"}],"source_content_type":"text/x-python","patch_set":39,"id":"ffb9cba7_e76d5132","line":55,"updated":"2019-04-30 20:11:04.000000000","message":"Normally in Cinder, we have driver exceptions here:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/exception.py","commit_id":"b5912e16d4b8b443fe2a16c8c985e43abd73eece"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class RSDRetryableException(exception.VolumeDriverException):"},{"line_number":55,"context_line":"    message \u003d _(\"RSD retryable exception: %(reason)s\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def get_volume_metadata(volume):"}],"source_content_type":"text/x-python","patch_set":39,"id":"ffb9cba7_27b5a97e","line":55,"in_reply_to":"ffb9cba7_e76d5132","updated":"2019-05-03 19:50:45.000000000","message":"It is initially listed in the cinder/exception.py. In my previous review they asked me to move exceptions to driver code.","commit_id":"b5912e16d4b8b443fe2a16c8c985e43abd73eece"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9e7e3c2bf4f8c6622fb2b5a77fe3a954fb2b30f0","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        super(RSDDriver, self).__init__(*args, **kwargs)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        self.configuration.append_config_values(RSD_OPTS)"},{"line_number":513,"context_line":"        self.rsdClient \u003d None"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    @utils.trace"},{"line_number":516,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":39,"id":"ffb9cba7_4710dda8","line":513,"updated":"2019-04-30 20:11:04.000000000","message":"Need to add a get_driver_options static method to return your driver options.  This is used by the documentation generator.\n\nFor example, look here:\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/drivers/solidfire.py#L295","commit_id":"b5912e16d4b8b443fe2a16c8c985e43abd73eece"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        super(RSDDriver, self).__init__(*args, **kwargs)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"        self.configuration.append_config_values(RSD_OPTS)"},{"line_number":513,"context_line":"        self.rsdClient \u003d None"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"    @utils.trace"},{"line_number":516,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":39,"id":"ffb9cba7_2232775f","line":513,"in_reply_to":"ffb9cba7_4710dda8","updated":"2019-05-03 19:50:45.000000000","message":"Done","commit_id":"b5912e16d4b8b443fe2a16c8c985e43abd73eece"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"07fb0403bc97dc014f145227dd733d010594c4ae","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"try:"},{"line_number":31,"context_line":"    from rsd_lib import RSDLib"},{"line_number":32,"context_line":"    from sushy import exceptions as sushy_exceptions"},{"line_number":33,"context_line":"except ImportError:"},{"line_number":34,"context_line":"    # Used for tests, when no rsd-lib is installed"},{"line_number":35,"context_line":"    RSDLib \u003d None"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_83999220","line":32,"range":{"start_line":32,"start_character":9,"end_line":32,"end_character":14},"updated":"2019-05-02 21:19:41.000000000","message":"Please,  add this to the driver-requirements.txt","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"09d85da8d2720b460995de1cd94aa2f5928aabe5","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"try:"},{"line_number":31,"context_line":"    from rsd_lib import RSDLib"},{"line_number":32,"context_line":"    from sushy import exceptions as sushy_exceptions"},{"line_number":33,"context_line":"except ImportError:"},{"line_number":34,"context_line":"    # Used for tests, when no rsd-lib is installed"},{"line_number":35,"context_line":"    RSDLib \u003d None"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_83f4325d","line":32,"updated":"2019-05-02 21:17:02.000000000","message":"should add sushy to the driver-requirements.txt as well","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"257e18cafd586f1612ad2e600dca3ccdec09904a","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"try:"},{"line_number":31,"context_line":"    from rsd_lib import RSDLib"},{"line_number":32,"context_line":"    from sushy import exceptions as sushy_exceptions"},{"line_number":33,"context_line":"except ImportError:"},{"line_number":34,"context_line":"    # Used for tests, when no rsd-lib is installed"},{"line_number":35,"context_line":"    RSDLib \u003d None"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_b7c08a52","line":32,"range":{"start_line":32,"start_character":9,"end_line":32,"end_character":14},"in_reply_to":"dfbec78f_83999220","updated":"2019-05-03 15:48:58.000000000","message":"sushy is required by RSDlib. So once we install RSDlib, sushy is installed. Do we still need to list sushy in driver-requirements.txt?","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"try:"},{"line_number":31,"context_line":"    from rsd_lib import RSDLib"},{"line_number":32,"context_line":"    from sushy import exceptions as sushy_exceptions"},{"line_number":33,"context_line":"except ImportError:"},{"line_number":34,"context_line":"    # Used for tests, when no rsd-lib is installed"},{"line_number":35,"context_line":"    RSDLib \u003d None"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_9e91e9f4","line":32,"range":{"start_line":32,"start_character":9,"end_line":32,"end_character":14},"in_reply_to":"dfbec78f_83999220","updated":"2019-05-03 19:50:45.000000000","message":"sushy will be automatically installed when rsd-lib is installed","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"try:"},{"line_number":31,"context_line":"    from rsd_lib import RSDLib"},{"line_number":32,"context_line":"    from sushy import exceptions as sushy_exceptions"},{"line_number":33,"context_line":"except ImportError:"},{"line_number":34,"context_line":"    # Used for tests, when no rsd-lib is installed"},{"line_number":35,"context_line":"    RSDLib \u003d None"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_7e32f5a9","line":32,"in_reply_to":"dfbec78f_83f4325d","updated":"2019-05-03 19:50:45.000000000","message":"sushy will be automatically installed when rsd-lib is installed","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"07fb0403bc97dc014f145227dd733d010594c4ae","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            rsdlib \u003d RSDLib(url, username, password, verify\u003dverify).factory()"},{"line_number":79,"context_line":"        except Exception as e:"},{"line_number":80,"context_line":"            # error credentials may throw unexpected exception"},{"line_number":81,"context_line":"            LOG.error(e)"},{"line_number":82,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":83,"context_line":"                data\u003d_(\"initialize: Cannot connect to RSD PODM.\"))"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_e3872eb6","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":24},"updated":"2019-05-02 21:19:41.000000000","message":"LOG.error(e) \u003d\u003e LOG.exception(\u0027Cannot connect to RSD PODM\u0027)","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            rsdlib \u003d RSDLib(url, username, password, verify\u003dverify).factory()"},{"line_number":79,"context_line":"        except Exception as e:"},{"line_number":80,"context_line":"            # error credentials may throw unexpected exception"},{"line_number":81,"context_line":"            LOG.error(e)"},{"line_number":82,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":83,"context_line":"                data\u003d_(\"initialize: Cannot connect to RSD PODM.\"))"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_32aa7185","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":24},"in_reply_to":"dfbec78f_e3872eb6","updated":"2019-05-03 19:50:45.000000000","message":"Done","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"25f78f13c18d32d3e5582e0e4be22a14491ce886","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":83,"context_line":"                data\u003d_(\"initialize: Cannot connect to RSD PODM.\"))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        if rsdlib._rsd_api_version \u003c \"2.4.0\":"},{"line_number":86,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":87,"context_line":"                data\u003d(_(\"initialize: Unsupported rsd_lib version: \""},{"line_number":88,"context_line":"                        \"%(current)s \u003c %(expected)s.\")"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_037362e9","line":85,"range":{"start_line":85,"start_character":11,"end_line":85,"end_character":44},"updated":"2019-05-02 21:20:19.000000000","message":"This won\u0027t work as expected if _rsd_api_version is 2.11.0.","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":83,"context_line":"                data\u003d_(\"initialize: Cannot connect to RSD PODM.\"))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        if rsdlib._rsd_api_version \u003c \"2.4.0\":"},{"line_number":86,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":87,"context_line":"                data\u003d(_(\"initialize: Unsupported rsd_lib version: \""},{"line_number":88,"context_line":"                        \"%(current)s \u003c %(expected)s.\")"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_9250fd34","line":85,"range":{"start_line":85,"start_character":11,"end_line":85,"end_character":44},"in_reply_to":"dfbec78f_037362e9","updated":"2019-05-03 19:50:45.000000000","message":"Done","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"257e18cafd586f1612ad2e600dca3ccdec09904a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":83,"context_line":"                data\u003d_(\"initialize: Cannot connect to RSD PODM.\"))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        if rsdlib._rsd_api_version \u003c \"2.4.0\":"},{"line_number":86,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":87,"context_line":"                data\u003d(_(\"initialize: Unsupported rsd_lib version: \""},{"line_number":88,"context_line":"                        \"%(current)s \u003c %(expected)s.\")"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_d775fefb","line":85,"range":{"start_line":85,"start_character":11,"end_line":85,"end_character":44},"in_reply_to":"dfbec78f_037362e9","updated":"2019-05-03 15:48:58.000000000","message":"Right! May we can use https://docs.openstack.org/oslo.utils/3.27.0/reference/versionutils.html","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":83,"context_line":"                data\u003d_(\"initialize: Cannot connect to RSD PODM.\"))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        if rsdlib._rsd_api_version \u003c \"2.4.0\":"},{"line_number":86,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":87,"context_line":"                data\u003d(_(\"initialize: Unsupported rsd_lib version: \""},{"line_number":88,"context_line":"                        \"%(current)s \u003c %(expected)s.\")"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_80741a9b","line":85,"range":{"start_line":85,"start_character":11,"end_line":85,"end_character":44},"in_reply_to":"dfbec78f_d775fefb","updated":"2019-05-03 19:50:45.000000000","message":"Done","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"07fb0403bc97dc014f145227dd733d010594c4ae","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                        sushy_exceptions.ConnectionError) as e:"},{"line_number":195,"context_line":"                    LOG.warning(\"skipped storage %s for creation error %s\","},{"line_number":196,"context_line":"                                storage.path, e)"},{"line_number":197,"context_line":"        except Exception as e:"},{"line_number":198,"context_line":"            LOG.exception(\"Create volume failed\")"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        raise exception.VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_83c2f2e8","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":30},"updated":"2019-05-02 21:19:41.000000000","message":"\u0027except Exception\u0027 will be enough here.","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"257e18cafd586f1612ad2e600dca3ccdec09904a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                        sushy_exceptions.ConnectionError) as e:"},{"line_number":195,"context_line":"                    LOG.warning(\"skipped storage %s for creation error %s\","},{"line_number":196,"context_line":"                                storage.path, e)"},{"line_number":197,"context_line":"        except Exception as e:"},{"line_number":198,"context_line":"            LOG.exception(\"Create volume failed\")"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        raise exception.VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_7760d233","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":30},"in_reply_to":"dfbec78f_83c2f2e8","updated":"2019-05-03 15:48:58.000000000","message":"+1","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                        sushy_exceptions.ConnectionError) as e:"},{"line_number":195,"context_line":"                    LOG.warning(\"skipped storage %s for creation error %s\","},{"line_number":196,"context_line":"                                storage.path, e)"},{"line_number":197,"context_line":"        except Exception as e:"},{"line_number":198,"context_line":"            LOG.exception(\"Create volume failed\")"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        raise exception.VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_32f27108","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":30},"in_reply_to":"dfbec78f_83c2f2e8","updated":"2019-05-03 19:50:45.000000000","message":"Done","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"07fb0403bc97dc014f145227dd733d010594c4ae","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                    data\u003d(_(\"Undo-attach failed from %(node)s to %(volume)s.\")"},{"line_number":467,"context_line":"                          % {\u0027node\u0027: node_url,"},{"line_number":468,"context_line":"                             \u0027volume\u0027: volume_url}))"},{"line_number":469,"context_line":"            if isinstance(e, exception.ValidationError):"},{"line_number":470,"context_line":"                raise RSDRetryableException("},{"line_number":471,"context_line":"                    reason\u003d(_(\"Validation error during post-attach from \""},{"line_number":472,"context_line":"                              \"%(node)s to %(volume)s.\")"},{"line_number":473,"context_line":"                            % {\u0027node\u0027: node_url,"},{"line_number":474,"context_line":"                               \u0027volume\u0027: volume_url}))"},{"line_number":475,"context_line":"            else:"},{"line_number":476,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":477,"context_line":"                    data\u003d(_(\"Post-attach failed from %(node)s to %(volume)s.\")"},{"line_number":478,"context_line":"                          % {\u0027node\u0027: node_url,"},{"line_number":479,"context_line":"                             \u0027volume\u0027: volume_url}))"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def detach_volume_from_node(self, volume_url, node_url):"},{"line_number":482,"context_line":"        LOG.info(\u0027Trying detach from node %s for volume %s\u0027,"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_03ae022e","line":479,"range":{"start_line":469,"start_character":12,"end_line":479,"end_character":52},"updated":"2019-05-02 21:19:41.000000000","message":"Why not move these lines into the \u0027except\u0027 blocks?","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"257e18cafd586f1612ad2e600dca3ccdec09904a","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                    data\u003d(_(\"Undo-attach failed from %(node)s to %(volume)s.\")"},{"line_number":467,"context_line":"                          % {\u0027node\u0027: node_url,"},{"line_number":468,"context_line":"                             \u0027volume\u0027: volume_url}))"},{"line_number":469,"context_line":"            if isinstance(e, exception.ValidationError):"},{"line_number":470,"context_line":"                raise RSDRetryableException("},{"line_number":471,"context_line":"                    reason\u003d(_(\"Validation error during post-attach from \""},{"line_number":472,"context_line":"                              \"%(node)s to %(volume)s.\")"},{"line_number":473,"context_line":"                            % {\u0027node\u0027: node_url,"},{"line_number":474,"context_line":"                               \u0027volume\u0027: volume_url}))"},{"line_number":475,"context_line":"            else:"},{"line_number":476,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":477,"context_line":"                    data\u003d(_(\"Post-attach failed from %(node)s to %(volume)s.\")"},{"line_number":478,"context_line":"                          % {\u0027node\u0027: node_url,"},{"line_number":479,"context_line":"                             \u0027volume\u0027: volume_url}))"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def detach_volume_from_node(self, volume_url, node_url):"},{"line_number":482,"context_line":"        LOG.info(\u0027Trying detach from node %s for volume %s\u0027,"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_1755d650","line":479,"range":{"start_line":469,"start_character":12,"end_line":479,"end_character":52},"in_reply_to":"dfbec78f_03ae022e","updated":"2019-05-03 15:48:58.000000000","message":"As for all exception in line 463, we need to do detach_endpoint at first. If we use except block, seems that we have to duplicate Line 458-468.","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":466,"context_line":"                    data\u003d(_(\"Undo-attach failed from %(node)s to %(volume)s.\")"},{"line_number":467,"context_line":"                          % {\u0027node\u0027: node_url,"},{"line_number":468,"context_line":"                             \u0027volume\u0027: volume_url}))"},{"line_number":469,"context_line":"            if isinstance(e, exception.ValidationError):"},{"line_number":470,"context_line":"                raise RSDRetryableException("},{"line_number":471,"context_line":"                    reason\u003d(_(\"Validation error during post-attach from \""},{"line_number":472,"context_line":"                              \"%(node)s to %(volume)s.\")"},{"line_number":473,"context_line":"                            % {\u0027node\u0027: node_url,"},{"line_number":474,"context_line":"                               \u0027volume\u0027: volume_url}))"},{"line_number":475,"context_line":"            else:"},{"line_number":476,"context_line":"                raise exception.VolumeBackendAPIException("},{"line_number":477,"context_line":"                    data\u003d(_(\"Post-attach failed from %(node)s to %(volume)s.\")"},{"line_number":478,"context_line":"                          % {\u0027node\u0027: node_url,"},{"line_number":479,"context_line":"                             \u0027volume\u0027: volume_url}))"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def detach_volume_from_node(self, volume_url, node_url):"},{"line_number":482,"context_line":"        LOG.info(\u0027Trying detach from node %s for volume %s\u0027,"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_92d79d24","line":479,"range":{"start_line":469,"start_character":12,"end_line":479,"end_character":52},"in_reply_to":"dfbec78f_03ae022e","updated":"2019-05-03 19:50:45.000000000","message":"These lines are already under the except block in line #456. line #463 is the nested exception under the exception #456 and it is unrelated to the highlighted lines.","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"c940f904383ed85209c238692a4241710bba349f","unresolved":false,"context_lines":[{"line_number":618,"context_line":"    @utils.trace"},{"line_number":619,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":620,"context_line":"        if connector is None:"},{"line_number":621,"context_line":"            # None connector means force-detach"},{"line_number":622,"context_line":"            return"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        uuid \u003d connector.get(\"system uuid\")"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_c38eaacf","line":621,"range":{"start_line":621,"start_character":35,"end_line":621,"end_character":47},"updated":"2019-05-02 21:16:37.000000000","message":"This path needs to detach all volumes.","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":618,"context_line":"    @utils.trace"},{"line_number":619,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":620,"context_line":"        if connector is None:"},{"line_number":621,"context_line":"            # None connector means force-detach"},{"line_number":622,"context_line":"            return"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        uuid \u003d connector.get(\"system uuid\")"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_e0495660","line":621,"range":{"start_line":621,"start_character":35,"end_line":621,"end_character":47},"in_reply_to":"dfbec78f_77ee9289","updated":"2019-05-03 19:50:45.000000000","message":"Done","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":618,"context_line":"    @utils.trace"},{"line_number":619,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":620,"context_line":"        if connector is None:"},{"line_number":621,"context_line":"            # None connector means force-detach"},{"line_number":622,"context_line":"            return"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        uuid \u003d connector.get(\"system uuid\")"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_2691cf53","line":621,"range":{"start_line":621,"start_character":35,"end_line":621,"end_character":47},"in_reply_to":"dfbec78f_c38eaacf","updated":"2019-05-03 19:50:45.000000000","message":"Done","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"257e18cafd586f1612ad2e600dca3ccdec09904a","unresolved":false,"context_lines":[{"line_number":618,"context_line":"    @utils.trace"},{"line_number":619,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":620,"context_line":"        if connector is None:"},{"line_number":621,"context_line":"            # None connector means force-detach"},{"line_number":622,"context_line":"            return"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        uuid \u003d connector.get(\"system uuid\")"}],"source_content_type":"text/x-python","patch_set":40,"id":"dfbec78f_77ee9289","line":621,"range":{"start_line":621,"start_character":35,"end_line":621,"end_character":47},"in_reply_to":"dfbec78f_c38eaacf","updated":"2019-05-03 15:48:58.000000000","message":"Need to do it.","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"f32eb2c6b9488af8c19d3b0024e46c7726541cd4","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":303,"context_line":"                data\u003d(_(\u0027Unable to extend volume %s.\u0027) % volume_url))"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def delete_vol_or_snap(self, volume_url, ignore_non_exist\u003dFalse):"},{"line_number":306,"context_line":"        try:"},{"line_number":307,"context_line":"            try:"},{"line_number":308,"context_line":"                volume \u003d self._get_volume(volume_url)"}],"source_content_type":"text/x-python","patch_set":43,"id":"bfb3d3c7_7b2caeab","line":305,"range":{"start_line":305,"start_character":45,"end_line":305,"end_character":61},"updated":"2019-05-27 13:09:12.000000000","message":"You can remove this argument as this function is always called with ignore_non_exist \u003d True, so it does not serve any purpose.","commit_id":"f5fe3251f5dcfffd3415bd0007e3ee3cb130ef44"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"05439b6b64c16e13aa32734b7e92bee0cc966365","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":303,"context_line":"                data\u003d(_(\u0027Unable to extend volume %s.\u0027) % volume_url))"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def delete_vol_or_snap(self, volume_url, ignore_non_exist\u003dFalse):"},{"line_number":306,"context_line":"        try:"},{"line_number":307,"context_line":"            try:"},{"line_number":308,"context_line":"                volume \u003d self._get_volume(volume_url)"}],"source_content_type":"text/x-python","patch_set":43,"id":"bfb3d3c7_a89bb715","line":305,"range":{"start_line":305,"start_character":45,"end_line":305,"end_character":61},"in_reply_to":"bfb3d3c7_7b2caeab","updated":"2019-05-28 01:03:13.000000000","message":"Line 680 calls the function with ignore_non_exist\u003dFalse. \nself.rsdClient.delete_vol_or_snap(volume_url)","commit_id":"f5fe3251f5dcfffd3415bd0007e3ee3cb130ef44"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"7d8645a2528ade35af191de6f4b60d845bfd80d4","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":303,"context_line":"                data\u003d(_(\u0027Unable to extend volume %s.\u0027) % volume_url))"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def delete_vol_or_snap(self, volume_url, ignore_non_exist\u003dFalse):"},{"line_number":306,"context_line":"        try:"},{"line_number":307,"context_line":"            try:"},{"line_number":308,"context_line":"                volume \u003d self._get_volume(volume_url)"}],"source_content_type":"text/x-python","patch_set":43,"id":"bfb3d3c7_a9a179fa","line":305,"range":{"start_line":305,"start_character":45,"end_line":305,"end_character":61},"in_reply_to":"bfb3d3c7_a89bb715","updated":"2019-05-28 06:13:58.000000000","message":"Oh, I missed that one, sorry about that.","commit_id":"f5fe3251f5dcfffd3415bd0007e3ee3cb130ef44"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"f32eb2c6b9488af8c19d3b0024e46c7726541cd4","unresolved":false,"context_lines":[{"line_number":695,"context_line":"            return"},{"line_number":696,"context_line":"        if_success \u003d self.rsdClient.delete_vol_or_snap("},{"line_number":697,"context_line":"            snap_url, ignore_non_exist\u003dTrue)"},{"line_number":698,"context_line":"        if not if_success:"},{"line_number":699,"context_line":"            raise exception.SnapshotIsBusy(snapshot_name\u003dsnapshot.name)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    @utils.trace"},{"line_number":702,"context_line":"    def extend_volume(self, volume, new_size):"}],"source_content_type":"text/x-python","patch_set":43,"id":"bfb3d3c7_568bbf6c","line":699,"range":{"start_line":698,"start_character":8,"end_line":699,"end_character":71},"updated":"2019-05-27 13:09:12.000000000","message":"You are mixing returns and raises a lot in delete_vol_or_snap function. I\u0027d suggest to move this raise from here to delete_vol_or_snap function where \"return False\" are and don\u0027t return any values from delete_vol_or_snap function, but relay only on function ending normally or raising exception.","commit_id":"f5fe3251f5dcfffd3415bd0007e3ee3cb130ef44"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"05439b6b64c16e13aa32734b7e92bee0cc966365","unresolved":false,"context_lines":[{"line_number":695,"context_line":"            return"},{"line_number":696,"context_line":"        if_success \u003d self.rsdClient.delete_vol_or_snap("},{"line_number":697,"context_line":"            snap_url, ignore_non_exist\u003dTrue)"},{"line_number":698,"context_line":"        if not if_success:"},{"line_number":699,"context_line":"            raise exception.SnapshotIsBusy(snapshot_name\u003dsnapshot.name)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    @utils.trace"},{"line_number":702,"context_line":"    def extend_volume(self, volume, new_size):"}],"source_content_type":"text/x-python","patch_set":43,"id":"bfb3d3c7_686ffffb","line":699,"range":{"start_line":698,"start_character":8,"end_line":699,"end_character":71},"in_reply_to":"bfb3d3c7_568bbf6c","updated":"2019-05-28 01:03:13.000000000","message":"+1","commit_id":"f5fe3251f5dcfffd3415bd0007e3ee3cb130ef44"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"2731e056725290cd71c262c5fd6ce2cd104abad0","unresolved":false,"context_lines":[{"line_number":695,"context_line":"            return"},{"line_number":696,"context_line":"        if_success \u003d self.rsdClient.delete_vol_or_snap("},{"line_number":697,"context_line":"            snap_url, ignore_non_exist\u003dTrue)"},{"line_number":698,"context_line":"        if not if_success:"},{"line_number":699,"context_line":"            raise exception.SnapshotIsBusy(snapshot_name\u003dsnapshot.name)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    @utils.trace"},{"line_number":702,"context_line":"    def extend_volume(self, volume, new_size):"}],"source_content_type":"text/x-python","patch_set":43,"id":"bfb3d3c7_8ebfdb5f","line":699,"range":{"start_line":698,"start_character":8,"end_line":699,"end_character":71},"in_reply_to":"bfb3d3c7_568bbf6c","updated":"2019-05-29 00:20:54.000000000","message":"Done","commit_id":"f5fe3251f5dcfffd3415bd0007e3ee3cb130ef44"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"2731e056725290cd71c262c5fd6ce2cd104abad0","unresolved":false,"context_lines":[{"line_number":695,"context_line":"            return"},{"line_number":696,"context_line":"        if_success \u003d self.rsdClient.delete_vol_or_snap("},{"line_number":697,"context_line":"            snap_url, ignore_non_exist\u003dTrue)"},{"line_number":698,"context_line":"        if not if_success:"},{"line_number":699,"context_line":"            raise exception.SnapshotIsBusy(snapshot_name\u003dsnapshot.name)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    @utils.trace"},{"line_number":702,"context_line":"    def extend_volume(self, volume, new_size):"}],"source_content_type":"text/x-python","patch_set":43,"id":"bfb3d3c7_ee8c57d8","line":699,"range":{"start_line":698,"start_character":8,"end_line":699,"end_character":71},"in_reply_to":"bfb3d3c7_686ffffb","updated":"2019-05-29 00:20:54.000000000","message":"Done","commit_id":"f5fe3251f5dcfffd3415bd0007e3ee3cb130ef44"}],"doc/source/configuration/block-storage/drivers/rsd-volume-driver.rst":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"b4f38fee1353ef210b2f7d0136bcb5c81dd48f89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"ffd0ebdf_4932bef3","line":51,"updated":"2019-01-04 22:13:46.000000000","message":"Need to add the automatically generated configuration option table here so that users see the config options associated with the driver.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"ec88ed7d009b9e8b39aea2a897c34bf6540cacae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"dfd5e7cf_b3d97b23","line":51,"in_reply_to":"ffd0ebdf_4932bef3","updated":"2019-01-07 03:48:23.000000000","message":"Referred to other driver examples and fixed.","commit_id":"28d00871aa8ad12d4c123c644983c25071f31b62"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"fc068c10cc204d448aecc14e629a1d7a63c5be92","unresolved":false,"context_lines":[{"line_number":16,"context_line":"* All the ``nova-compute`` services should be running on the composed nodes in"},{"line_number":17,"context_line":"  RSD."},{"line_number":18,"context_line":"* All the ``cinder-volume`` and ``nova-compute`` nodes should have installed"},{"line_number":19,"context_line":"  ``dmidecode`` and the latest ``nvme-cli`` with connect/disconnect subcommands."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Supported operations"},{"line_number":22,"context_line":"~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":35,"id":"5fc1f717_ae8d5332","line":19,"updated":"2019-03-08 02:18:26.000000000","message":"openstack-tox-docs is complaining that this line is too long.","commit_id":"874f4ab23d55dcdd6e8e27cf0fee8d804b556166"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"b53b1c7714ce27219547170088bd09574fa9dc22","unresolved":false,"context_lines":[{"line_number":16,"context_line":"* All the ``nova-compute`` services should be running on the composed nodes in"},{"line_number":17,"context_line":"  RSD."},{"line_number":18,"context_line":"* All the ``cinder-volume`` and ``nova-compute`` nodes should have installed"},{"line_number":19,"context_line":"  ``dmidecode`` and the latest ``nvme-cli`` with connect/disconnect subcommands."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Supported operations"},{"line_number":22,"context_line":"~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":35,"id":"5fc1f717_2d9cf75b","line":19,"in_reply_to":"5fc1f717_ae8d5332","updated":"2019-03-09 01:00:11.000000000","message":"Done","commit_id":"874f4ab23d55dcdd6e8e27cf0fee8d804b556166"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ec9dadb4216ff554474cdcb19301bc7c05184101","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  RSD."},{"line_number":18,"context_line":"* All the ``cinder-volume`` and ``nova-compute`` nodes should have installed"},{"line_number":19,"context_line":"  ``dmidecode`` and the latest ``nvme-cli`` with connect/disconnect"},{"line_number":20,"context_line":"  subcommands."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Supported operations"},{"line_number":23,"context_line":"~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":42,"id":"dfbec78f_9a5f7471","line":20,"updated":"2019-05-07 19:51:36.000000000","message":"Should also mention that rsd-lib is required","commit_id":"3f4a6d1bf3284a43c187b039cbb329fcfcd9fe2c"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"2731e056725290cd71c262c5fd6ce2cd104abad0","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  RSD."},{"line_number":18,"context_line":"* All the ``cinder-volume`` and ``nova-compute`` nodes should have installed"},{"line_number":19,"context_line":"  ``dmidecode`` and the latest ``nvme-cli`` with connect/disconnect"},{"line_number":20,"context_line":"  subcommands."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Supported operations"},{"line_number":23,"context_line":"~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":42,"id":"dfbec78f_29464051","line":20,"in_reply_to":"dfbec78f_9a5f7471","updated":"2019-05-29 00:20:54.000000000","message":"Done","commit_id":"3f4a6d1bf3284a43c187b039cbb329fcfcd9fe2c"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"05439b6b64c16e13aa32734b7e92bee0cc966365","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  RSD."},{"line_number":18,"context_line":"* All the ``cinder-volume`` and ``nova-compute`` nodes should have installed"},{"line_number":19,"context_line":"  ``dmidecode`` and the latest ``nvme-cli`` with connect/disconnect"},{"line_number":20,"context_line":"  subcommands."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Supported operations"},{"line_number":23,"context_line":"~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":42,"id":"dfbec78f_6d31920b","line":20,"in_reply_to":"dfbec78f_9a5f7471","updated":"2019-05-28 01:03:13.000000000","message":"Will do it. Thanks!","commit_id":"3f4a6d1bf3284a43c187b039cbb329fcfcd9fe2c"}],"driver-requirements.txt":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"9e7e3c2bf4f8c6622fb2b5a77fe3a954fb2b30f0","unresolved":false,"context_lines":[{"line_number":54,"context_line":"# Storpool"},{"line_number":55,"context_line":"storpool # Apache-2.0"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# RSD"},{"line_number":58,"context_line":"rsd-lib"}],"source_content_type":"text/plain","patch_set":39,"id":"ffb9cba7_a7e1999d","line":57,"updated":"2019-04-30 20:11:04.000000000","message":"can you change this to say for rsd driver instead of just RSD?","commit_id":"b5912e16d4b8b443fe2a16c8c985e43abd73eece"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"# Storpool"},{"line_number":55,"context_line":"storpool # Apache-2.0"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# RSD"},{"line_number":58,"context_line":"rsd-lib"}],"source_content_type":"text/plain","patch_set":39,"id":"ffb9cba7_0723c5be","line":57,"in_reply_to":"ffb9cba7_a7e1999d","updated":"2019-05-03 19:50:45.000000000","message":"Done","commit_id":"b5912e16d4b8b443fe2a16c8c985e43abd73eece"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"09d85da8d2720b460995de1cd94aa2f5928aabe5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"storpool # Apache-2.0"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# RSD Driver"},{"line_number":58,"context_line":"rsd-lib"}],"source_content_type":"text/plain","patch_set":40,"id":"dfbec78f_e3d96ef4","line":58,"updated":"2019-05-02 21:17:02.000000000","message":"looks like this also requires sushy","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":29964,"name":"Tejdeep Kautharam","email":"tejdeep.kautharam@intel.com","username":"tejdeep"},"change_message_id":"8c4d47673e2e9e882327aa54f6ac06351976a2c7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"storpool # Apache-2.0"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# RSD Driver"},{"line_number":58,"context_line":"rsd-lib"}],"source_content_type":"text/plain","patch_set":40,"id":"dfbec78f_5ebdb166","line":58,"in_reply_to":"dfbec78f_43715ae0","updated":"2019-05-03 19:50:45.000000000","message":"sushy will be automatically installed when rsd-lib is installed","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"07fb0403bc97dc014f145227dd733d010594c4ae","unresolved":false,"context_lines":[{"line_number":55,"context_line":"storpool # Apache-2.0"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# RSD Driver"},{"line_number":58,"context_line":"rsd-lib"}],"source_content_type":"text/plain","patch_set":40,"id":"dfbec78f_43715ae0","line":58,"in_reply_to":"dfbec78f_e3d96ef4","updated":"2019-05-02 21:19:41.000000000","message":"+1","commit_id":"493559db4fe33481b6e97ce157437f5aafa0fbf5"}]}
