)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"2ab0e13a0ddae89de821fbf897ad27bf3337c96d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"A new target, NVMET, is added for the LVM driver, and allows"},{"line_number":11,"context_line":"cinder to use nvmetcli in order to create/delete subsystems"},{"line_number":12,"context_line":"on attaching/detaching an LVM volume."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I7cacd76c63e0ad29eb2d448ce07fbb5176f62721"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bf57530f_be8e06ce","line":13,"updated":"2017-09-20 09:24:23.000000000","message":"you should put  Implements: \u003cname of blue rint\u003e","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"708c1f1e54843cba5df207ee1cb5707586577af6","unresolved":false,"context_lines":[{"line_number":10,"context_line":"A new target, NVMET, is added for the LVM driver, and allows"},{"line_number":11,"context_line":"cinder to use nvmetcli in order to create/delete subsystems"},{"line_number":12,"context_line":"on attaching/detaching an LVM volume."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I7cacd76c63e0ad29eb2d448ce07fbb5176f62721"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bf57530f_d949d460","line":13,"in_reply_to":"bf57530f_be8e06ce","updated":"2017-09-20 09:32:48.000000000","message":"Implements: blueprint nvme-target-cli","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"}],"cinder/tests/unit/targets/test_nvmet_driver.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0f812cdb044d74fc68ecebc8d7db0f124ab15a64","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder import utils"},{"line_number":18,"context_line":"from cinder.volume.targets import nvmet"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_utils import timeutils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestNVMETDriver(tf.TargetDriverFixture):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf57530f_fecc7e62","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":32},"updated":"2017-09-20 09:22:12.000000000","message":"third party import should be between os and cinder imports\nit should be:\nimport mock\n\nfrom oslo_utils import timeutils\n\ncinder imports","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"31139e3712515038e71c1356fa3ef4879b0fc603","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder import utils"},{"line_number":18,"context_line":"from cinder.volume.targets import nvmet"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_utils import timeutils"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestNVMETDriver(tf.TargetDriverFixture):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_f8bde0b6","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":32},"in_reply_to":"bf57530f_fecc7e62","updated":"2017-10-02 12:16:47.000000000","message":"Done","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0f812cdb044d74fc68ecebc8d7db0f124ab15a64","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_get_nvmf_subsystem\u0027)"},{"line_number":58,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_get_available_nvmf_subsystems\u0027)"},{"line_number":59,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_add_nvmf_subsystem\u0027)"},{"line_number":60,"context_line":"    def test_create_export(self, mock_add_nvmf_subsystem,"},{"line_number":61,"context_line":"                           mock_get_available_nvmf_subsystems,"},{"line_number":62,"context_line":"                           mock_get_nvmf_subsystem):"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        mock_testvol \u003d self.testvol"},{"line_number":65,"context_line":"        mock_testvol_path \u003d self.testvol_path"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf57530f_5e34aa4a","line":62,"range":{"start_line":60,"start_character":0,"end_line":62,"end_character":52},"updated":"2017-09-20 09:22:12.000000000","message":"missing test when get_available_nvmf_subsystems or add_nvmf_subsystem failed","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"31139e3712515038e71c1356fa3ef4879b0fc603","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_get_nvmf_subsystem\u0027)"},{"line_number":58,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_get_available_nvmf_subsystems\u0027)"},{"line_number":59,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_add_nvmf_subsystem\u0027)"},{"line_number":60,"context_line":"    def test_create_export(self, mock_add_nvmf_subsystem,"},{"line_number":61,"context_line":"                           mock_get_available_nvmf_subsystems,"},{"line_number":62,"context_line":"                           mock_get_nvmf_subsystem):"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        mock_testvol \u003d self.testvol"},{"line_number":65,"context_line":"        mock_testvol_path \u003d self.testvol_path"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_df8a0062","line":62,"range":{"start_line":60,"start_character":0,"end_line":62,"end_character":52},"in_reply_to":"bf57530f_5e34aa4a","updated":"2017-10-02 12:16:47.000000000","message":"Done","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0f812cdb044d74fc68ecebc8d7db0f124ab15a64","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_get_nvmf_subsystem\u0027)"},{"line_number":107,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_get_available_nvmf_subsystems\u0027)"},{"line_number":108,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_delete_nvmf_subsystem\u0027)"},{"line_number":109,"context_line":"    def test_remove_export(self, mock_delete_nvmf_subsystem,"},{"line_number":110,"context_line":"                           mock_get_available_nvmf_subsystems,"},{"line_number":111,"context_line":"                           mock_get_nvmf_subsystem):"},{"line_number":112,"context_line":"        mock_testvol \u003d self.testvol"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf57530f_de477abc","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":26},"updated":"2017-09-20 09:22:12.000000000","message":"same here missing failed tests for get_available_nvmf_subsystems and delete_nvmf_subsystem","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"31139e3712515038e71c1356fa3ef4879b0fc603","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_get_nvmf_subsystem\u0027)"},{"line_number":107,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_get_available_nvmf_subsystems\u0027)"},{"line_number":108,"context_line":"    @mock.patch.object(nvmet.NVMET, \u0027_delete_nvmf_subsystem\u0027)"},{"line_number":109,"context_line":"    def test_remove_export(self, mock_delete_nvmf_subsystem,"},{"line_number":110,"context_line":"                           mock_get_available_nvmf_subsystems,"},{"line_number":111,"context_line":"                           mock_get_nvmf_subsystem):"},{"line_number":112,"context_line":"        mock_testvol \u003d self.testvol"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_9feec81f","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":26},"in_reply_to":"bf57530f_de477abc","updated":"2017-10-02 12:16:47.000000000","message":"Done","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1f128948a97a93f7f401856be3444cc0bc6bf2ef","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder.tests.unit.targets import targets_fixture as tf"},{"line_number":20,"context_line":"from cinder import utils"},{"line_number":21,"context_line":"from cinder.volume.targets import nvmet"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestNVMETDriver(tf.TargetDriverFixture):"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_9d5e4610","line":22,"updated":"2017-11-26 21:05:05.000000000","message":"I\u0027m wondered why we don\u0027t mock tempfile.mkstemp in tests","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"3f9a9089ac9c3c89900d8d55242f08b1178d1866","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder.tests.unit.targets import targets_fixture as tf"},{"line_number":20,"context_line":"from cinder import utils"},{"line_number":21,"context_line":"from cinder.volume.targets import nvmet"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestNVMETDriver(tf.TargetDriverFixture):"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_f8c3d287","line":22,"in_reply_to":"ff82abbf_9d5e4610","updated":"2017-11-27 15:22:41.000000000","message":"Why do we need to mock tempfile creation?","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1f128948a97a93f7f401856be3444cc0bc6bf2ef","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.nvme_transport_type \u003d self.configuration.nvme_transport_type"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        self.fake_volume_id \u003d \u0027c446b9a2-c968-4260-b95f-a18a7b41c004\u0027"},{"line_number":40,"context_line":"        self.testvol_path \u003d \\"},{"line_number":41,"context_line":"            \u0027/dev/stack-volumes-lvmdriver-1/volume-%s\u0027 % self.fake_volume_id"},{"line_number":42,"context_line":"        self.fake_project_id \u003d \u0027ed2c1fd4-5555-1111-aa15-123b93f75cba\u0027"},{"line_number":43,"context_line":"        self.testvol \u003d\\"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_dd3feeb1","line":40,"updated":"2017-11-26 21:05:05.000000000","message":"Please, do not use \u0027\\\u0027 for multi-line statements","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"3f9a9089ac9c3c89900d8d55242f08b1178d1866","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.nvme_transport_type \u003d self.configuration.nvme_transport_type"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        self.fake_volume_id \u003d \u0027c446b9a2-c968-4260-b95f-a18a7b41c004\u0027"},{"line_number":40,"context_line":"        self.testvol_path \u003d \\"},{"line_number":41,"context_line":"            \u0027/dev/stack-volumes-lvmdriver-1/volume-%s\u0027 % self.fake_volume_id"},{"line_number":42,"context_line":"        self.fake_project_id \u003d \u0027ed2c1fd4-5555-1111-aa15-123b93f75cba\u0027"},{"line_number":43,"context_line":"        self.testvol \u003d\\"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_783d828d","line":40,"in_reply_to":"ff82abbf_dd3feeb1","updated":"2017-11-27 15:22:41.000000000","message":"will fix it","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.testvol_path \u003d \\"},{"line_number":41,"context_line":"            \u0027/dev/stack-volumes-lvmdriver-1/volume-%s\u0027 % self.fake_volume_id"},{"line_number":42,"context_line":"        self.fake_project_id \u003d \u0027ed2c1fd4-5555-1111-aa15-123b93f75cba\u0027"},{"line_number":43,"context_line":"        self.testvol \u003d\\"},{"line_number":44,"context_line":"            {\u0027project_id\u0027: self.fake_project_id,"},{"line_number":45,"context_line":"             \u0027name\u0027: \u0027testvol\u0027,"},{"line_number":46,"context_line":"             \u0027size\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_61ff9a67","line":43,"updated":"2018-01-11 10:24:00.000000000","message":"Please, do not use \u0027\\\u0027 for multi-line statements in tests","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.testvol_path \u003d \\"},{"line_number":41,"context_line":"            \u0027/dev/stack-volumes-lvmdriver-1/volume-%s\u0027 % self.fake_volume_id"},{"line_number":42,"context_line":"        self.fake_project_id \u003d \u0027ed2c1fd4-5555-1111-aa15-123b93f75cba\u0027"},{"line_number":43,"context_line":"        self.testvol \u003d\\"},{"line_number":44,"context_line":"            {\u0027project_id\u0027: self.fake_project_id,"},{"line_number":45,"context_line":"             \u0027name\u0027: \u0027testvol\u0027,"},{"line_number":46,"context_line":"             \u0027size\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_9eedcef1","line":43,"in_reply_to":"7f96bb07_61ff9a67","updated":"2018-01-17 11:12:01.000000000","message":"Done","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"a9580f732b82e61fda39fb62cdfab0df9c84d968","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self.target.target_ip \u003d self.target_ip"},{"line_number":101,"context_line":"        self.target.target_port \u003d self.target_port"},{"line_number":102,"context_line":"        self.assertEqual(expected_return,"},{"line_number":103,"context_line":"                         self.target.create_export("},{"line_number":104,"context_line":"                             ctxt, mock_testvol,"},{"line_number":105,"context_line":"                             mock_testvol_path))"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa0c359_05fd036d","line":102,"updated":"2018-02-21 13:51:39.000000000","message":"I see this test as a request to create_export should return\nsimilar some values on of them (location) should be \nsimilar to what get_nvmeof_location returns.\n\nCould we also check here that something real happens like\na request to nvmetcli at least. The same is for other tests.","commit_id":"9d6f830c3fb8d6216e014dac6542f0bec23099aa"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"fb70a7cd4d97282a29dd63273b3423618ed814fd","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self.target.target_ip \u003d self.target_ip"},{"line_number":101,"context_line":"        self.target.target_port \u003d self.target_port"},{"line_number":102,"context_line":"        self.assertEqual(expected_return,"},{"line_number":103,"context_line":"                         self.target.create_export("},{"line_number":104,"context_line":"                             ctxt, mock_testvol,"},{"line_number":105,"context_line":"                             mock_testvol_path))"}],"source_content_type":"text/x-python","patch_set":20,"id":"ff6b8bd7_e8670625","line":102,"in_reply_to":"3fa0c359_05fd036d","updated":"2018-03-06 14:17:03.000000000","message":"we can\u0027t use real nvmetcli request because of setup requirements, nvme environment should have special type of disks (NVMe ssd) and other configurations that should be done manually to the target setup (loading modules, configuring interfaces ...).","commit_id":"9d6f830c3fb8d6216e014dac6542f0bec23099aa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c01a0ac634407a97bd997987cda696ddbba15919","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.target \u003d nvmet.NVMET(root_helper\u003dutils.get_root_helper(),"},{"line_number":31,"context_line":"                                  configuration\u003dself.configuration)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self.target_ip \u003d \u002711.11.11.11\u0027"},{"line_number":34,"context_line":"        self.target_port \u003d \u00271234\u0027"},{"line_number":35,"context_line":"        self.nvmet_subsystem_name \u003d self.configuration.target_prefix"},{"line_number":36,"context_line":"        self.nvmet_ns_id \u003d self.configuration.nvmet_ns_id"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f6a8fd7_41b12f8f","line":33,"range":{"start_line":33,"start_character":26,"end_line":33,"end_character":37},"updated":"2018-04-16 19:33:15.000000000","message":"This is an actual public IP address. If you do an update, please change this to a valid private range address.","commit_id":"33920bf142567aaeccbd557a8c083fbf656ad572"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"a4a19139b036d1e621da4c68e1e49f50aded2864","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.target \u003d nvmet.NVMET(root_helper\u003dutils.get_root_helper(),"},{"line_number":31,"context_line":"                                  configuration\u003dself.configuration)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self.target_ip \u003d \u002711.11.11.11\u0027"},{"line_number":34,"context_line":"        self.target_port \u003d \u00271234\u0027"},{"line_number":35,"context_line":"        self.nvmet_subsystem_name \u003d self.configuration.target_prefix"},{"line_number":36,"context_line":"        self.nvmet_ns_id \u003d self.configuration.nvmet_ns_id"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f6a8fd7_bcd5c4bb","line":33,"range":{"start_line":33,"start_character":26,"end_line":33,"end_character":37},"in_reply_to":"9f6a8fd7_41b12f8f","updated":"2018-04-17 12:37:34.000000000","message":"Done","commit_id":"33920bf142567aaeccbd557a8c083fbf656ad572"}],"cinder/volume/driver.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0f812cdb044d74fc68ecebc8d7db0f124ab15a64","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    cfg.StrOpt(\u0027iscsi_helper\u0027,"},{"line_number":92,"context_line":"               default\u003d\u0027tgtadm\u0027,"},{"line_number":93,"context_line":"               choices\u003d[\u0027tgtadm\u0027, \u0027lioadm\u0027, \u0027scstadmin\u0027, \u0027iscsictl\u0027,"},{"line_number":94,"context_line":"                        \u0027ietadm\u0027, \u0027fake\u0027, \u0027nvmet\u0027],"},{"line_number":95,"context_line":"               help\u003d\u0027iSCSI target user-land tool to use. tgtadm is default, \u0027"},{"line_number":96,"context_line":"                    \u0027use lioadm for LIO iSCSI support, scstadmin for SCST \u0027"},{"line_number":97,"context_line":"                    \u0027target support, ietadm for iSCSI Enterprise Target, \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf57530f_9e78e2f8","line":94,"range":{"start_line":94,"start_character":42,"end_line":94,"end_character":49},"updated":"2017-09-20 09:22:12.000000000","message":"we should create an nvmeof_helper which as only nvmet for now","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"37695ec57beedc0b2039c8f0d148bac2c3a2964f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"               help\u003d\u0027The flag to pass to ionice to alter the i/o priority \u0027"},{"line_number":89,"context_line":"                    \u0027of the process used to zero a volume after deletion, \u0027"},{"line_number":90,"context_line":"                    \u0027for example \"-c3\" for idle only priority.\u0027),"},{"line_number":91,"context_line":"    cfg.StrOpt(\u0027iscsi_helper\u0027,"},{"line_number":92,"context_line":"               default\u003d\u0027tgtadm\u0027,"},{"line_number":93,"context_line":"               choices\u003d[\u0027tgtadm\u0027, \u0027lioadm\u0027, \u0027scstadmin\u0027, \u0027iscsictl\u0027,"},{"line_number":94,"context_line":"                        \u0027ietadm\u0027, \u0027fake\u0027, \u0027nvmet\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_83b5dccf","line":91,"range":{"start_line":91,"start_character":15,"end_line":91,"end_character":29},"updated":"2017-11-22 04:38:11.000000000","message":"we need to move nvmet to to other config option\nnvmeof_helper","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"300fd0361a9cf43d27c3d32a7e4ba0f28c880461","unresolved":false,"context_lines":[{"line_number":390,"context_line":"            \u0027tgtadm\u0027: \u0027cinder.volume.targets.tgt.TgtAdm\u0027,"},{"line_number":391,"context_line":"            \u0027scstadmin\u0027: \u0027cinder.volume.targets.scst.SCSTAdm\u0027,"},{"line_number":392,"context_line":"            \u0027iscsictl\u0027: \u0027cinder.volume.targets.cxt.CxtAdm\u0027,"},{"line_number":393,"context_line":"            \u0027nvmet\u0027: \u0027cinder.volume.targets.nvmet.NVMET\u0027}"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        # set True by manager after successful check_for_setup"},{"line_number":396,"context_line":"        self._initialized \u003d False"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_0bd6b7c4","line":393,"range":{"start_line":393,"start_character":13,"end_line":393,"end_character":18},"updated":"2017-11-22 14:07:07.000000000","message":"Is this the volume type for this backend? I\u0027m confused as to what sets the type in the connection_info data that is returned from initialize_connection, because the libvirt driver in nova is expecting \"nvmeof\":\n\nhttps://review.openstack.org/#/c/482640/14/nova/virt/libvirt/driver.py","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"88b32dd29617ff0d8743cad159327ef0750df177","unresolved":false,"context_lines":[{"line_number":390,"context_line":"            \u0027tgtadm\u0027: \u0027cinder.volume.targets.tgt.TgtAdm\u0027,"},{"line_number":391,"context_line":"            \u0027scstadmin\u0027: \u0027cinder.volume.targets.scst.SCSTAdm\u0027,"},{"line_number":392,"context_line":"            \u0027iscsictl\u0027: \u0027cinder.volume.targets.cxt.CxtAdm\u0027,"},{"line_number":393,"context_line":"            \u0027nvmet\u0027: \u0027cinder.volume.targets.nvmet.NVMET\u0027}"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        # set True by manager after successful check_for_setup"},{"line_number":396,"context_line":"        self._initialized \u003d False"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_cbf8cf4a","line":393,"range":{"start_line":393,"start_character":13,"end_line":393,"end_character":18},"in_reply_to":"ff82abbf_0bd6b7c4","updated":"2017-11-22 14:08:32.000000000","message":"Nevermind, I found it:\n\nhttps://review.openstack.org/#/c/504944/8/cinder/volume/targets/nvmeof.py@57","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1f128948a97a93f7f401856be3444cc0bc6bf2ef","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                    \u0027target support, ietadm for iSCSI Enterprise Target, \u0027"},{"line_number":98,"context_line":"                    \u0027iscsictl for Chelsio iSCSI \u0027"},{"line_number":99,"context_line":"                    \u0027Target or fake for testing.\u0027),"},{"line_number":100,"context_line":"    cfg.StrOpt(\u0027nvmeof_helper\u0027,"},{"line_number":101,"context_line":"               default\u003d\u0027nvmet\u0027,"},{"line_number":102,"context_line":"               choices\u003d[\u0027nvmet\u0027],"},{"line_number":103,"context_line":"               help\u003d\u0027NVMEoF target user-land tool to use. nvmet is default.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_7d48225b","line":100,"updated":"2017-11-26 21:05:05.000000000","message":"In future, it would be good to merge these options into the one. E.g. \u0027target_driver\u0027. Having both iscsi_helper, target_type, and nvmeof_helper is too complicated","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"37aca387e71b722993d0108703ff3c0e0000bfac","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                    \u0027target support, ietadm for iSCSI Enterprise Target, \u0027"},{"line_number":98,"context_line":"                    \u0027iscsictl for Chelsio iSCSI \u0027"},{"line_number":99,"context_line":"                    \u0027Target or fake for testing.\u0027),"},{"line_number":100,"context_line":"    cfg.StrOpt(\u0027nvmeof_helper\u0027,"},{"line_number":101,"context_line":"               default\u003d\u0027nvmet\u0027,"},{"line_number":102,"context_line":"               choices\u003d[\u0027nvmet\u0027],"},{"line_number":103,"context_line":"               help\u003d\u0027NVMEoF target user-land tool to use. nvmet is default.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"df87a7cf_a8ee09ea","line":100,"in_reply_to":"ff82abbf_180c76ea","updated":"2017-12-12 13:35:27.000000000","message":"Sure, we can deprecate it if needed","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"3f9a9089ac9c3c89900d8d55242f08b1178d1866","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                    \u0027target support, ietadm for iSCSI Enterprise Target, \u0027"},{"line_number":98,"context_line":"                    \u0027iscsictl for Chelsio iSCSI \u0027"},{"line_number":99,"context_line":"                    \u0027Target or fake for testing.\u0027),"},{"line_number":100,"context_line":"    cfg.StrOpt(\u0027nvmeof_helper\u0027,"},{"line_number":101,"context_line":"               default\u003d\u0027nvmet\u0027,"},{"line_number":102,"context_line":"               choices\u003d[\u0027nvmet\u0027],"},{"line_number":103,"context_line":"               help\u003d\u0027NVMEoF target user-land tool to use. nvmet is default.\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_180c76ea","line":100,"in_reply_to":"ff82abbf_7d48225b","updated":"2017-11-27 15:22:41.000000000","message":"Can we deprecate \"iscsi_helper\" ?\nif yes, then we can replace it with \"target_driver\" as a list of both iSCSI and NVMEoF helpers with no extra new parameters.","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1f128948a97a93f7f401856be3444cc0bc6bf2ef","unresolved":false,"context_lines":[{"line_number":101,"context_line":"               default\u003d\u0027nvmet\u0027,"},{"line_number":102,"context_line":"               choices\u003d[\u0027nvmet\u0027],"},{"line_number":103,"context_line":"               help\u003d\u0027NVMEoF target user-land tool to use. nvmet is default.\u0027),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027target_type\u0027,"},{"line_number":105,"context_line":"               default\u003d\u0027iscsi\u0027,"},{"line_number":106,"context_line":"               choices\u003d[\u0027iscsi\u0027, \u0027nvmeof\u0027],"},{"line_number":107,"context_line":"               help\u003d\u0027Set the target type iscsi or nvmeof\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_3d785a8e","line":104,"updated":"2017-11-26 21:05:05.000000000","message":"Can we use only something like \u0027target_driver\u0027?","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9b1d943e2ce3c689d4a34c7eb6c040f8a3928f17","unresolved":false,"context_lines":[{"line_number":101,"context_line":"               default\u003d\u0027nvmet\u0027,"},{"line_number":102,"context_line":"               choices\u003d[\u0027nvmet\u0027],"},{"line_number":103,"context_line":"               help\u003d\u0027NVMEoF target user-land tool to use. nvmet is default.\u0027),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027target_type\u0027,"},{"line_number":105,"context_line":"               default\u003d\u0027iscsi\u0027,"},{"line_number":106,"context_line":"               choices\u003d[\u0027iscsi\u0027, \u0027nvmeof\u0027],"},{"line_number":107,"context_line":"               help\u003d\u0027Set the target type iscsi or nvmeof\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_f0de703c","line":104,"in_reply_to":"ff82abbf_3d785a8e","updated":"2017-11-28 10:41:26.000000000","message":"there are some overlapping options between iscsi and nvmeof\nlik iscsi_ip_address, iscsi_port, iscsi_target_prefix, iscsi_helper.\nI suggest that for now we will deprecate the iscsi_helper and introduce target_driver. The logic will be \nboth target_driver and iscsi_helper will have the same default tgtadm. In the code we will check if\nif target_driver is not default \n   take target_driver\nelsif iscsi_helper is not default\n   take iscsi_helper\nOnce we will remove the iscsi_helper we can remove the elsif.\nWhat do you think about this proposal?","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"d7a1579d034028f8460048eef97d92acc89c1a08","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    cfg.StrOpt(\u0027target_protocol\u0027,"},{"line_number":147,"context_line":"               deprecated_name\u003d\u0027iscsi_protocol\u0027,"},{"line_number":148,"context_line":"               default\u003d\u0027iscsi\u0027,"},{"line_number":149,"context_line":"               choices\u003d[\u0027iscsi\u0027, \u0027iser\u0027, \u0027tcp\u0027, \u0027rdma\u0027],"},{"line_number":150,"context_line":"               help\u003d\u0027Determines the iSCSI protocol for new iSCSI volumes, \u0027"},{"line_number":151,"context_line":"                    \u0027created with tgtadm or lioadm target helpers. In \u0027"},{"line_number":152,"context_line":"                    \u0027order to enable RDMA, this parameter should be set \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"df87a7cf_1461b4a9","line":149,"range":{"start_line":149,"start_character":15,"end_line":149,"end_character":56},"updated":"2017-12-19 01:24:31.000000000","message":"this should be [\u0027tcp\u0027, \u0027rdam\u0027]\nfor iscsi you will have tcp and iser(iscsi over rdma) rdma\nnvmeof tcp is not supported we should raise only rdma is supported","commit_id":"25e9e7066eefb48433fbfd1357d54258aeda241e"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                    \u0027use lioadm for LIO iSCSI support, scstadmin for SCST \u0027"},{"line_number":101,"context_line":"                    \u0027target support, ietadm for iSCSI Enterprise Target, \u0027"},{"line_number":102,"context_line":"                    \u0027iscsictl for Chelsio iSCSI \u0027"},{"line_number":103,"context_line":"                    \u0027Target or fake for testing, nvmet for NVMEoF support.\u0027),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027volumes_dir\u0027,"},{"line_number":105,"context_line":"               default\u003d\u0027$state_path/volumes\u0027,"},{"line_number":106,"context_line":"               help\u003d\u0027Volume configuration file storage \u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_014576b3","line":103,"updated":"2018-01-11 10:24:00.000000000","message":"IMO, it should be added before \u0027fake\u0027 reference","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                    \u0027use lioadm for LIO iSCSI support, scstadmin for SCST \u0027"},{"line_number":101,"context_line":"                    \u0027target support, ietadm for iSCSI Enterprise Target, \u0027"},{"line_number":102,"context_line":"                    \u0027iscsictl for Chelsio iSCSI \u0027"},{"line_number":103,"context_line":"                    \u0027Target or fake for testing, nvmet for NVMEoF support.\u0027),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027volumes_dir\u0027,"},{"line_number":105,"context_line":"               default\u003d\u0027$state_path/volumes\u0027,"},{"line_number":106,"context_line":"               help\u003d\u0027Volume configuration file storage \u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_9ef06e93","line":103,"in_reply_to":"7f96bb07_014576b3","updated":"2018-01-17 11:12:01.000000000","message":"Done","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":147,"context_line":"               deprecated_name\u003d\u0027iscsi_protocol\u0027,"},{"line_number":148,"context_line":"               default\u003d\u0027iscsi\u0027,"},{"line_number":149,"context_line":"               choices\u003d[\u0027iscsi\u0027, \u0027iser\u0027, \u0027tcp\u0027, \u0027rdma\u0027],"},{"line_number":150,"context_line":"               help\u003d\u0027Determines the iSCSI protocol for new iSCSI volumes, \u0027"},{"line_number":151,"context_line":"                    \u0027created with tgtadm or lioadm target helpers. In \u0027"},{"line_number":152,"context_line":"                    \u0027order to enable RDMA, this parameter should be set \u0027"},{"line_number":153,"context_line":"                    \u0027with the value \"iser\". The supported iSCSI protocol \u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_c118eed4","line":150,"updated":"2018-01-11 10:24:00.000000000","message":"Help message should be updated too","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":147,"context_line":"               deprecated_name\u003d\u0027iscsi_protocol\u0027,"},{"line_number":148,"context_line":"               default\u003d\u0027iscsi\u0027,"},{"line_number":149,"context_line":"               choices\u003d[\u0027iscsi\u0027, \u0027iser\u0027, \u0027tcp\u0027, \u0027rdma\u0027],"},{"line_number":150,"context_line":"               help\u003d\u0027Determines the iSCSI protocol for new iSCSI volumes, \u0027"},{"line_number":151,"context_line":"                    \u0027created with tgtadm or lioadm target helpers. In \u0027"},{"line_number":152,"context_line":"                    \u0027order to enable RDMA, this parameter should be set \u0027"},{"line_number":153,"context_line":"                    \u0027with the value \"iser\". The supported iSCSI protocol \u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_5e63c642","line":150,"in_reply_to":"7f96bb07_c118eed4","updated":"2018-01-17 11:12:01.000000000","message":"I want to keep just tcp and rdma and remove iscsi and iser.\nI will address it in another patch that will be below this one","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"f54663b42223999feee5aaeca2f49836317fc0be","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    cfg.StrOpt(\u0027target_protocol\u0027,"},{"line_number":147,"context_line":"               deprecated_name\u003d\u0027iscsi_protocol\u0027,"},{"line_number":148,"context_line":"               default\u003d\u0027iscsi\u0027,"},{"line_number":149,"context_line":"               choices\u003d[\u0027iscsi\u0027, \u0027iser\u0027, \u0027tcp\u0027, \u0027rdma\u0027],"},{"line_number":150,"context_line":"               help\u003d\u0027Determines the iSCSI protocol for new iSCSI volumes, \u0027"},{"line_number":151,"context_line":"                    \u0027created with tgtadm or lioadm target helpers. In \u0027"},{"line_number":152,"context_line":"                    \u0027order to enable RDMA, this parameter should be set \u0027"},{"line_number":153,"context_line":"                    \u0027with the value \"iser\". The supported iSCSI protocol \u0027"},{"line_number":154,"context_line":"                    \u0027values are \"iscsi\" and \"iser\".\u0027),"},{"line_number":155,"context_line":"    cfg.StrOpt(\u0027driver_client_cert_key\u0027,"},{"line_number":156,"context_line":"               help\u003d\u0027The path to the client certificate key for verification, \u0027"},{"line_number":157,"context_line":"                    \u0027if the driver supports it.\u0027),"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_da311b5c","line":154,"range":{"start_line":149,"start_character":14,"end_line":154,"end_character":54},"updated":"2018-01-17 11:13:09.000000000","message":"need to address this in a different patch","commit_id":"c575072e550fa8913ae80e28983abd4405aabdb9"},{"author":{"_account_id":14807,"name":"Lenny","email":"lennyb@mellanox.com","username":"lennyb"},"change_message_id":"beaa8ff29a7f2c8ee1dbc7fa9f38418fb4bb9db2","unresolved":false,"context_lines":[{"line_number":99,"context_line":"               help\u003d\u0027Target user-land tool to use. tgtadm is default, \u0027"},{"line_number":100,"context_line":"                    \u0027use lioadm for LIO iSCSI support, scstadmin for SCST \u0027"},{"line_number":101,"context_line":"                    \u0027target support, ietadm for iSCSI Enterprise Target, \u0027"},{"line_number":102,"context_line":"                    \u0027iscsictl for Chelsio iSCSI nvmet for NVMEoF support, \u0027"},{"line_number":103,"context_line":"                    \u0027Target or fake for testing.\u0027),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027volumes_dir\u0027,"},{"line_number":105,"context_line":"               default\u003d\u0027$state_path/volumes\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"df7087c5_f082e1ff","line":102,"updated":"2018-03-15 07:12:35.000000000","message":"missing comma","commit_id":"c447674eba42dd688c0a235474675a748758c6bf"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"f4944d397c44df9e189abea9b8e180d2e6521214","unresolved":false,"context_lines":[{"line_number":99,"context_line":"               help\u003d\u0027Target user-land tool to use. tgtadm is default, \u0027"},{"line_number":100,"context_line":"                    \u0027use lioadm for LIO iSCSI support, scstadmin for SCST \u0027"},{"line_number":101,"context_line":"                    \u0027target support, ietadm for iSCSI Enterprise Target, \u0027"},{"line_number":102,"context_line":"                    \u0027iscsictl for Chelsio iSCSI nvmet for NVMEoF support, \u0027"},{"line_number":103,"context_line":"                    \u0027Target or fake for testing.\u0027),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027volumes_dir\u0027,"},{"line_number":105,"context_line":"               default\u003d\u0027$state_path/volumes\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"9f6a8fd7_56f7c5f6","line":102,"in_reply_to":"df7087c5_f082e1ff","updated":"2018-04-16 07:15:28.000000000","message":"Done","commit_id":"c447674eba42dd688c0a235474675a748758c6bf"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"f01dd5de3658216002af4a130c954b18850c992d","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                    \u0027use lioadm for LIO iSCSI support, scstadmin for SCST \u0027"},{"line_number":101,"context_line":"                    \u0027target support, ietadm for iSCSI Enterprise Target, \u0027"},{"line_number":102,"context_line":"                    \u0027iscsictl for Chelsio iSCSI, nvmet for NVMEoF support, \u0027"},{"line_number":103,"context_line":"                    \u0027Target or fake for testing.\u0027),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027volumes_dir\u0027,"},{"line_number":105,"context_line":"               default\u003d\u0027$state_path/volumes\u0027,"},{"line_number":106,"context_line":"               help\u003d\u0027Volume configuration file storage \u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"9f6a8fd7_73c95776","line":103,"range":{"start_line":103,"start_character":21,"end_line":103,"end_character":27},"updated":"2018-05-02 14:54:31.000000000","message":"This is supposed to go back with Chelsio iSCSI so please move it before the comma.","commit_id":"1cc7c49921b26df390024bfb7a2d5d24724cf365"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"4062d9877aa1c9b5cbb0a0c9c0f2b73b37696d14","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                    \u0027use lioadm for LIO iSCSI support, scstadmin for SCST \u0027"},{"line_number":101,"context_line":"                    \u0027target support, ietadm for iSCSI Enterprise Target, \u0027"},{"line_number":102,"context_line":"                    \u0027iscsictl for Chelsio iSCSI, nvmet for NVMEoF support, \u0027"},{"line_number":103,"context_line":"                    \u0027Target or fake for testing.\u0027),"},{"line_number":104,"context_line":"    cfg.StrOpt(\u0027volumes_dir\u0027,"},{"line_number":105,"context_line":"               default\u003d\u0027$state_path/volumes\u0027,"},{"line_number":106,"context_line":"               help\u003d\u0027Volume configuration file storage \u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"9f6a8fd7_69f088ca","line":103,"range":{"start_line":103,"start_character":21,"end_line":103,"end_character":27},"in_reply_to":"9f6a8fd7_73c95776","updated":"2018-05-02 17:37:55.000000000","message":"Done","commit_id":"1cc7c49921b26df390024bfb7a2d5d24724cf365"}],"cinder/volume/drivers/lvm.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1f128948a97a93f7f401856be3444cc0bc6bf2ef","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        # Target Driver is what handles data-transport"},{"line_number":107,"context_line":"        # Transport specific code should NOT be in"},{"line_number":108,"context_line":"        # the driver (control path), this way"},{"line_number":109,"context_line":"        # different target drivers can be added (iscsi, FC etc)"},{"line_number":110,"context_line":"        target_type \u003d self.configuration.safe_get(\u0027target_type\u0027)"},{"line_number":111,"context_line":"        target_helper \u003d \"{0}_helper\".format(target_type)"},{"line_number":112,"context_line":"        target_driver \u003d self.target_type_mapping[target_type]["}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_5d7d1e7d","line":109,"updated":"2017-11-26 21:05:05.000000000","message":"It will be good to update this comment too","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"}],"cinder/volume/targets/nvmeof.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0f812cdb044d74fc68ecebc8d7db0f124ab15a64","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        pass"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    @abc.abstractmethod"},{"line_number":165,"context_line":"    def create_nvmeof_target(self,"},{"line_number":166,"context_line":"                             volume_id,"},{"line_number":167,"context_line":"                             subsystem_name,"},{"line_number":168,"context_line":"                             target_ip,"},{"line_number":169,"context_line":"                             target_port,"},{"line_number":170,"context_line":"                             transport_type,"},{"line_number":171,"context_line":"                             nvmet_port_id,"},{"line_number":172,"context_line":"                             ns_id,"},{"line_number":173,"context_line":"                             volume_path):"},{"line_number":174,"context_line":"        pass"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf57530f_1e6cf234","line":173,"range":{"start_line":165,"start_character":0,"end_line":173,"end_character":42},"updated":"2017-09-20 09:22:12.000000000","message":"this change should be in the abstract nvmeof commit","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"31139e3712515038e71c1356fa3ef4879b0fc603","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        pass"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    @abc.abstractmethod"},{"line_number":165,"context_line":"    def create_nvmeof_target(self,"},{"line_number":166,"context_line":"                             volume_id,"},{"line_number":167,"context_line":"                             subsystem_name,"},{"line_number":168,"context_line":"                             target_ip,"},{"line_number":169,"context_line":"                             target_port,"},{"line_number":170,"context_line":"                             transport_type,"},{"line_number":171,"context_line":"                             nvmet_port_id,"},{"line_number":172,"context_line":"                             ns_id,"},{"line_number":173,"context_line":"                             volume_path):"},{"line_number":174,"context_line":"        pass"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f515b1d_02984672","line":173,"range":{"start_line":165,"start_character":0,"end_line":173,"end_character":42},"in_reply_to":"bf57530f_1e6cf234","updated":"2017-10-02 12:16:47.000000000","message":"Done","commit_id":"6ce1d964ae3dab6231a5a7316680dd6cc4de1df1"}],"cinder/volume/targets/nvmet.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"37695ec57beedc0b2039c8f0d148bac2c3a2964f","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                              volume_id)}"},{"line_number":117,"context_line":"        nvmf_subsystems[\u0027subsystems\u0027].append(subsystem_section)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        LOG.info("},{"line_number":120,"context_line":"            \u0027Adding subsystem %s-%s\u0027, nvmet_subsystem_name,"},{"line_number":121,"context_line":"            volume_id)"},{"line_number":122,"context_line":"        LOG.debug("},{"line_number":123,"context_line":"            \u0027Trying to load the following subsystems %s\u0027, nvmf_subsystems)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Dump updated JSON dict to append new subsystem"},{"line_number":126,"context_line":"        tmp_fd, tmp_file_path \u003d tempfile.mkstemp()"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_e3ace88d","line":123,"range":{"start_line":119,"start_character":0,"end_line":123,"end_character":74},"updated":"2017-11-22 04:38:11.000000000","message":"why to log messages?","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"eeb6c001222b3a34b3ac61bd02478bc0a0b45e79","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                              volume_id)}"},{"line_number":117,"context_line":"        nvmf_subsystems[\u0027subsystems\u0027].append(subsystem_section)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        LOG.info("},{"line_number":120,"context_line":"            \u0027Adding subsystem %s-%s\u0027, nvmet_subsystem_name,"},{"line_number":121,"context_line":"            volume_id)"},{"line_number":122,"context_line":"        LOG.debug("},{"line_number":123,"context_line":"            \u0027Trying to load the following subsystems %s\u0027, nvmf_subsystems)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        # Dump updated JSON dict to append new subsystem"},{"line_number":126,"context_line":"        tmp_fd, tmp_file_path \u003d tempfile.mkstemp()"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_0b79d72d","line":123,"range":{"start_line":119,"start_character":0,"end_line":123,"end_character":74},"in_reply_to":"ff82abbf_e3ace88d","updated":"2017-11-23 08:31:39.000000000","message":"Done","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"37695ec57beedc0b2039c8f0d148bac2c3a2964f","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        except putils.ProcessExecutionError as ex:"},{"line_number":138,"context_line":"            LOG.error(\u0027Failed to run nvmetcli restore.\u0027)"},{"line_number":139,"context_line":"            LOG.debug(\u0027Error from nvmetcli restore: %s\u0027, ex.stderr)"},{"line_number":140,"context_line":"            raise"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        return \u0027%s-%s\u0027 % (nvmet_subsystem_name, volume_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_03a8ec74","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":67},"updated":"2017-11-22 04:38:11.000000000","message":"same as above","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"eeb6c001222b3a34b3ac61bd02478bc0a0b45e79","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        except putils.ProcessExecutionError as ex:"},{"line_number":138,"context_line":"            LOG.error(\u0027Failed to run nvmetcli restore.\u0027)"},{"line_number":139,"context_line":"            LOG.debug(\u0027Error from nvmetcli restore: %s\u0027, ex.stderr)"},{"line_number":140,"context_line":"            raise"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        return \u0027%s-%s\u0027 % (nvmet_subsystem_name, volume_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_2b993b6d","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":67},"in_reply_to":"ff82abbf_03a8ec74","updated":"2017-11-23 08:31:39.000000000","message":"Done","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"37695ec57beedc0b2039c8f0d148bac2c3a2964f","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            if subsys[\u0027nqn\u0027] \u003d\u003d subsystem_name:"},{"line_number":213,"context_line":"                return subsystem_name"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        return None"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _get_available_nvmf_subsystems(self):"},{"line_number":218,"context_line":"        tmp_fd, tmp_file_path \u003d tempfile.mkstemp()"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_c3bbe4c1","line":215,"range":{"start_line":215,"start_character":0,"end_line":215,"end_character":19},"updated":"2017-11-22 04:38:11.000000000","message":"python return none by default","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"eeb6c001222b3a34b3ac61bd02478bc0a0b45e79","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            if subsys[\u0027nqn\u0027] \u003d\u003d subsystem_name:"},{"line_number":213,"context_line":"                return subsystem_name"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        return None"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def _get_available_nvmf_subsystems(self):"},{"line_number":218,"context_line":"        tmp_fd, tmp_file_path \u003d tempfile.mkstemp()"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_e6e06bcf","line":215,"range":{"start_line":215,"start_character":0,"end_line":215,"end_character":19},"in_reply_to":"ff82abbf_c3bbe4c1","updated":"2017-11-23 08:31:39.000000000","message":"Done","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"37695ec57beedc0b2039c8f0d148bac2c3a2964f","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        try:"},{"line_number":224,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":225,"context_line":"        except putils.ProcessExecutionError as ex:"},{"line_number":226,"context_line":"            LOG.error(\u0027Failed to run nvmetcli save\u0027)"},{"line_number":227,"context_line":"            LOG.debug(\u0027Error from nvmetcli save: %s\u0027, ex.stderr)"},{"line_number":228,"context_line":"            raise"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        cmd \u003d [\u0027cat\u0027, tmp_file_path]"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_23a3b0a0","line":227,"range":{"start_line":226,"start_character":0,"end_line":227,"end_character":64},"updated":"2017-11-22 04:38:11.000000000","message":"why log it twwice?","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"eeb6c001222b3a34b3ac61bd02478bc0a0b45e79","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        try:"},{"line_number":224,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":225,"context_line":"        except putils.ProcessExecutionError as ex:"},{"line_number":226,"context_line":"            LOG.error(\u0027Failed to run nvmetcli save\u0027)"},{"line_number":227,"context_line":"            LOG.debug(\u0027Error from nvmetcli save: %s\u0027, ex.stderr)"},{"line_number":228,"context_line":"            raise"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        cmd \u003d [\u0027cat\u0027, tmp_file_path]"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_abc54b3e","line":227,"range":{"start_line":226,"start_character":0,"end_line":227,"end_character":64},"in_reply_to":"ff82abbf_23a3b0a0","updated":"2017-11-23 08:31:39.000000000","message":"Done","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1f128948a97a93f7f401856be3444cc0bc6bf2ef","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            raise"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        cmd \u003d [\u0027cat\u0027, tmp_file_path]"},{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":226,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":227,"context_line":"            LOG.error(\u0027Failed to read: %s\u0027.format(tmp_file_path))"},{"line_number":228,"context_line":"            raise"},{"line_number":229,"context_line":"        nvmf_subsystems \u003d json.loads(out)"},{"line_number":230,"context_line":"        return nvmf_subsystems"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_3d9dbabb","line":228,"range":{"start_line":224,"start_character":12,"end_line":228,"end_character":17},"updated":"2017-11-26 21:05:05.000000000","message":"Why do we need it? Can we use json.load instead?","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"3f9a9089ac9c3c89900d8d55242f08b1178d1866","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            raise"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        cmd \u003d [\u0027cat\u0027, tmp_file_path]"},{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":226,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":227,"context_line":"            LOG.error(\u0027Failed to read: %s\u0027.format(tmp_file_path))"},{"line_number":228,"context_line":"            raise"},{"line_number":229,"context_line":"        nvmf_subsystems \u003d json.loads(out)"},{"line_number":230,"context_line":"        return nvmf_subsystems"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_7890224b","line":228,"range":{"start_line":224,"start_character":12,"end_line":228,"end_character":17},"in_reply_to":"ff82abbf_3d9dbabb","updated":"2017-11-27 15:22:41.000000000","message":"yes we can, but we need use \"open\" as well to stream the file contents:\nnvmf_subsystems \u003d json.load(open(tmp_file_path, \u0027r\u0027))","commit_id":"5dbb5e9b9b2b3df20db18cd14b1e67d42d250f13"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NVMET(NVMeOF):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":31,"context_line":"        super(NVMET, self).__init__(*args, **kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @utils.synchronized(\u0027nvmetcli\u0027, external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_21275215","line":30,"updated":"2018-01-11 10:24:00.000000000","message":"We don\u0027t need this","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NVMET(NVMeOF):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":31,"context_line":"        super(NVMET, self).__init__(*args, **kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @utils.synchronized(\u0027nvmetcli\u0027, external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_7ecd622f","line":30,"in_reply_to":"7f96bb07_21275215","updated":"2018-01-17 11:12:01.000000000","message":"Done","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        # Port section"},{"line_number":81,"context_line":"        port_section \u003d {"},{"line_number":82,"context_line":"            \"addr\": {"},{"line_number":83,"context_line":"                \"adrfam\": \"ipv4\","},{"line_number":84,"context_line":"                \"traddr\": target_ip,"},{"line_number":85,"context_line":"                \"treq\": \"not specified\","},{"line_number":86,"context_line":"                \"trsvcid\": target_port,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_011ed6b9","line":83,"updated":"2018-01-11 10:24:00.000000000","message":"Does it support  IPv6?","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        # Port section"},{"line_number":81,"context_line":"        port_section \u003d {"},{"line_number":82,"context_line":"            \"addr\": {"},{"line_number":83,"context_line":"                \"adrfam\": \"ipv4\","},{"line_number":84,"context_line":"                \"traddr\": target_ip,"},{"line_number":85,"context_line":"                \"treq\": \"not specified\","},{"line_number":86,"context_line":"                \"trsvcid\": target_port,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_dedb56ea","line":83,"in_reply_to":"7f96bb07_011ed6b9","updated":"2018-01-17 11:12:01.000000000","message":"I will check with storage team and get back to you on this.","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            \"namespaces\": ["},{"line_number":106,"context_line":"                {"},{"line_number":107,"context_line":"                    \"device\": {"},{"line_number":108,"context_line":"                        \"nguid\": str(uuidutils.generate_uuid()),"},{"line_number":109,"context_line":"                        \"path\": volume_path,"},{"line_number":110,"context_line":"                    },"},{"line_number":111,"context_line":"                    \"enable\": 1,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_c17d4ee8","line":108,"range":{"start_line":108,"start_character":35,"end_line":108,"end_character":36},"updated":"2018-01-11 10:24:00.000000000","message":"please, use six.text_type instead of str","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            \"namespaces\": ["},{"line_number":106,"context_line":"                {"},{"line_number":107,"context_line":"                    \"device\": {"},{"line_number":108,"context_line":"                        \"nguid\": str(uuidutils.generate_uuid()),"},{"line_number":109,"context_line":"                        \"path\": volume_path,"},{"line_number":110,"context_line":"                    },"},{"line_number":111,"context_line":"                    \"enable\": 1,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_fe017239","line":108,"range":{"start_line":108,"start_character":35,"end_line":108,"end_character":36},"in_reply_to":"7f96bb07_c17d4ee8","updated":"2018-01-17 11:12:01.000000000","message":"Done","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            \u0027Trying to load the following subsystems %s\u0027, nvmf_subsystems)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        # Dump updated JSON dict to append new subsystem"},{"line_number":123,"context_line":"        tmp_fd, tmp_file_path \u003d tempfile.mkstemp()"},{"line_number":124,"context_line":"        with open(tmp_file_path, \u0027w\u0027) as json_file:"},{"line_number":125,"context_line":"            json.dump(nvmf_subsystems, json_file)"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_014c96c5","line":123,"updated":"2018-01-11 10:24:00.000000000","message":"Temporary file is not deleted","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        except putils.ProcessExecutionError as ex:"},{"line_number":135,"context_line":"            LOG.error(\u0027Error from nvmetcli restore: %s\u0027, ex.stderr)"},{"line_number":136,"context_line":"            raise"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        return \u0027%s-%s\u0027 % (nvmet_subsystem_name, volume_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_61d0faca","line":135,"updated":"2018-01-11 10:24:00.000000000","message":"LOG.error \u003d\u003e LOG.exception(\u0027\u0027Error from nvmetcli restore\u0027)","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        except putils.ProcessExecutionError as ex:"},{"line_number":135,"context_line":"            LOG.error(\u0027Error from nvmetcli restore: %s\u0027, ex.stderr)"},{"line_number":136,"context_line":"            raise"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        return \u0027%s-%s\u0027 % (nvmet_subsystem_name, volume_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_fe8652b9","line":135,"in_reply_to":"7f96bb07_61d0faca","updated":"2018-01-17 11:12:01.000000000","message":"Done","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return \u0027%s-%s\u0027 % (nvmet_subsystem_name, volume_id)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @staticmethod"},{"line_number":141,"context_line":"    def _execute(*args, **kwargs):"},{"line_number":142,"context_line":"        return utils.execute(*args, **kwargs)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @utils.synchronized(\u0027nvmetcli\u0027, external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_81d506bc","line":141,"updated":"2018-01-11 10:24:00.000000000","message":"We don\u0027t need this method","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        return \u0027%s-%s\u0027 % (nvmet_subsystem_name, volume_id)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    @staticmethod"},{"line_number":141,"context_line":"    def _execute(*args, **kwargs):"},{"line_number":142,"context_line":"        return utils.execute(*args, **kwargs)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @utils.synchronized(\u0027nvmetcli\u0027, external\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_fe7412d1","line":141,"in_reply_to":"7f96bb07_81d506bc","updated":"2018-01-17 11:12:01.000000000","message":"Done","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            LOG.debug("},{"line_number":187,"context_line":"                \u0027Newly loaded subsystems will be: %s\u0027, nvmf_subsystems)"},{"line_number":188,"context_line":"            tmp_fd, tmp_file_path \u003d tempfile.mkstemp()"},{"line_number":189,"context_line":"            with open(tmp_file_path, \u0027w\u0027) as json_file:"},{"line_number":190,"context_line":"                json.dump(nvmf_subsystems, json_file)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"            cmd \u003d ["}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_c1f46e5e","line":189,"updated":"2018-01-11 10:24:00.000000000","message":"A temporary file is not deleted. This code is copy-pasted from line #123","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            LOG.debug("},{"line_number":187,"context_line":"                \u0027Newly loaded subsystems will be: %s\u0027, nvmf_subsystems)"},{"line_number":188,"context_line":"            tmp_fd, tmp_file_path \u003d tempfile.mkstemp()"},{"line_number":189,"context_line":"            with open(tmp_file_path, \u0027w\u0027) as json_file:"},{"line_number":190,"context_line":"                json.dump(nvmf_subsystems, json_file)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"            cmd \u003d ["}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_43968a4e","line":189,"in_reply_to":"7f96bb07_c1f46e5e","updated":"2018-01-17 11:12:01.000000000","message":"Done","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                return subsystem_name"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def _get_available_nvmf_subsystems(self):"},{"line_number":212,"context_line":"        tmp_fd, tmp_file_path \u003d tempfile.mkstemp()"},{"line_number":213,"context_line":"        cmd \u003d ["},{"line_number":214,"context_line":"            \u0027nvmetcli\u0027,"},{"line_number":215,"context_line":"            \u0027save\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_01fa5641","line":212,"updated":"2018-01-11 10:24:00.000000000","message":"The same as above","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                return subsystem_name"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def _get_available_nvmf_subsystems(self):"},{"line_number":212,"context_line":"        tmp_fd, tmp_file_path \u003d tempfile.mkstemp()"},{"line_number":213,"context_line":"        cmd \u003d ["},{"line_number":214,"context_line":"            \u0027nvmetcli\u0027,"},{"line_number":215,"context_line":"            \u0027save\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_54d962f0","line":212,"in_reply_to":"7f96bb07_01fa5641","updated":"2018-01-17 11:12:01.000000000","message":"Done","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d8c8aa502ca48a5eb3a027de8ad143ab1f47d0d","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":226,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":227,"context_line":"            LOG.error(\u0027Failed to read: %s\u0027.format(tmp_file_path))"},{"line_number":228,"context_line":"            raise"},{"line_number":229,"context_line":"        nvmf_subsystems \u003d json.loads(out)"},{"line_number":230,"context_line":"        return nvmf_subsystems"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_a194c2e9","line":227,"updated":"2018-01-11 10:24:00.000000000","message":"LOG.error \u003d\u003e LOG.exception","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9dc51310b83177a6c9181b7b5338fa62cd93d953","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":226,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":227,"context_line":"            LOG.error(\u0027Failed to read: %s\u0027.format(tmp_file_path))"},{"line_number":228,"context_line":"            raise"},{"line_number":229,"context_line":"        nvmf_subsystems \u003d json.loads(out)"},{"line_number":230,"context_line":"        return nvmf_subsystems"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_3e483a85","line":227,"in_reply_to":"7f96bb07_a194c2e9","updated":"2018-01-17 11:12:01.000000000","message":"Done","commit_id":"19e5d04ac527f820671a293c6de7500c26b1834c"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"a9580f732b82e61fda39fb62cdfab0df9c84d968","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                ns_id),"},{"line_number":71,"context_line":"            \u0027auth\u0027: \u0027\u0027}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _nvmet_restore(self, nvmf_subsystems):"},{"line_number":74,"context_line":"        # Dump updated JSON dict to append new subsystem"},{"line_number":75,"context_line":"        with tempfile.NamedTemporaryFile() as tmp_fd:"},{"line_number":76,"context_line":"            tmp_fd.write(json.dumps(nvmf_subsystems))"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa0c359_a5b20f48","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":22},"updated":"2018-02-21 13:51:39.000000000","message":"nit: NVMET._nvmet_restore \u003d\u003e NVMET._restore IMO more logical and consistent with other names","commit_id":"9d6f830c3fb8d6216e014dac6542f0bec23099aa"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"fb70a7cd4d97282a29dd63273b3423618ed814fd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                ns_id),"},{"line_number":71,"context_line":"            \u0027auth\u0027: \u0027\u0027}"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _nvmet_restore(self, nvmf_subsystems):"},{"line_number":74,"context_line":"        # Dump updated JSON dict to append new subsystem"},{"line_number":75,"context_line":"        with tempfile.NamedTemporaryFile() as tmp_fd:"},{"line_number":76,"context_line":"            tmp_fd.write(json.dumps(nvmf_subsystems))"}],"source_content_type":"text/x-python","patch_set":20,"id":"ff6b8bd7_bdcb951c","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":22},"in_reply_to":"3fa0c359_a5b20f48","updated":"2018-03-06 14:17:03.000000000","message":"Done","commit_id":"9d6f830c3fb8d6216e014dac6542f0bec23099aa"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"a9580f732b82e61fda39fb62cdfab0df9c84d968","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _nvmet_restore(self, nvmf_subsystems):"},{"line_number":74,"context_line":"        # Dump updated JSON dict to append new subsystem"},{"line_number":75,"context_line":"        with tempfile.NamedTemporaryFile() as tmp_fd:"},{"line_number":76,"context_line":"            tmp_fd.write(json.dumps(nvmf_subsystems))"},{"line_number":77,"context_line":"            cmd \u003d ["},{"line_number":78,"context_line":"                \u0027nvmetcli\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa0c359_650ba7d5","line":75,"updated":"2018-02-21 13:51:39.000000000","message":"Is it possible to use nvmtcli as a library to:\na) control versioning (probably json-format could be changed)\nb) avoid a temporary file creation and additional disk access where no need at all.","commit_id":"9d6f830c3fb8d6216e014dac6542f0bec23099aa"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"fb70a7cd4d97282a29dd63273b3423618ed814fd","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _nvmet_restore(self, nvmf_subsystems):"},{"line_number":74,"context_line":"        # Dump updated JSON dict to append new subsystem"},{"line_number":75,"context_line":"        with tempfile.NamedTemporaryFile() as tmp_fd:"},{"line_number":76,"context_line":"            tmp_fd.write(json.dumps(nvmf_subsystems))"},{"line_number":77,"context_line":"            cmd \u003d ["},{"line_number":78,"context_line":"                \u0027nvmetcli\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"ff6b8bd7_dd2d29a9","line":75,"in_reply_to":"3fa0c359_650ba7d5","updated":"2018-03-06 14:17:03.000000000","message":"sadly we can\u0027t use nvmetcli as a library because of root permission issue, nvmetcli needs root permission in order to create/delete subsystems.","commit_id":"9d6f830c3fb8d6216e014dac6542f0bec23099aa"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"a9580f732b82e61fda39fb62cdfab0df9c84d968","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            out, err \u003d utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":210,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":211,"context_line":"            LOG.exception(\u0027Failed to read: %s\u0027.format(tmp_file_path))"},{"line_number":212,"context_line":"            raise"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        cmd \u003d ["},{"line_number":215,"context_line":"            \u0027rm\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa0c359_452f8b3e","line":212,"updated":"2018-02-21 13:51:39.000000000","message":"with excutils.save_and_reraise_exception()","commit_id":"9d6f830c3fb8d6216e014dac6542f0bec23099aa"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"fb70a7cd4d97282a29dd63273b3423618ed814fd","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            out, err \u003d utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":210,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":211,"context_line":"            LOG.exception(\u0027Failed to read: %s\u0027.format(tmp_file_path))"},{"line_number":212,"context_line":"            raise"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        cmd \u003d ["},{"line_number":215,"context_line":"            \u0027rm\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"ff6b8bd7_5d45996f","line":212,"in_reply_to":"3fa0c359_452f8b3e","updated":"2018-03-06 14:17:03.000000000","message":"Done","commit_id":"9d6f830c3fb8d6216e014dac6542f0bec23099aa"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c01a0ac634407a97bd997987cda696ddbba15919","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                return subsystem_name"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _get_available_nvmf_subsystems(self):"},{"line_number":197,"context_line":"        _, tmp_file_path \u003d tempfile.mkstemp()"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        cmd \u003d ["},{"line_number":200,"context_line":"            \u0027nvmetcli\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f6a8fd7_5c3d92b9","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":9},"updated":"2018-04-16 19:33:15.000000000","message":"This is great practice for denoting unused variables, but... we have the unfortunate circumstance that our exception message translations use _() to mark those strings. So it is not used now in this file, but if translated exception messages get added to this file, this will hide the imported _, so for OpenStack code it ends up being best practice to used __ instead of _.\n\nI don\u0027t think this is a blocker at this point since translations aren\u0027t present in this file, but if you do another update it would be good to change just to be safe.","commit_id":"33920bf142567aaeccbd557a8c083fbf656ad572"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"a4a19139b036d1e621da4c68e1e49f50aded2864","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                return subsystem_name"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _get_available_nvmf_subsystems(self):"},{"line_number":197,"context_line":"        _, tmp_file_path \u003d tempfile.mkstemp()"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        cmd \u003d ["},{"line_number":200,"context_line":"            \u0027nvmetcli\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9f6a8fd7_dffe6a04","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":9},"in_reply_to":"9f6a8fd7_5c3d92b9","updated":"2018-04-17 12:37:34.000000000","message":"Done","commit_id":"33920bf142567aaeccbd557a8c083fbf656ad572"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c01a0ac634407a97bd997987cda696ddbba15919","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        try:"},{"line_number":223,"context_line":"            out, err \u003d utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":224,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":225,"context_line":"            LOG.exception(\u0027Failed to delete file: %s\u0027.format(tmp_file_path))"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        return nvmf_subsystems"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f6a8fd7_5c66f2ef","line":225,"range":{"start_line":225,"start_character":53,"end_line":225,"end_character":61},"updated":"2018-04-16 19:33:15.000000000","message":"This shouldn\u0027t do the formatting up front. Instead, change .format to a comma to pass the value to be formatted as an arg to the logger.","commit_id":"33920bf142567aaeccbd557a8c083fbf656ad572"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"a4a19139b036d1e621da4c68e1e49f50aded2864","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        try:"},{"line_number":223,"context_line":"            out, err \u003d utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":224,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":225,"context_line":"            LOG.exception(\u0027Failed to delete file: %s\u0027.format(tmp_file_path))"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        return nvmf_subsystems"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"9f6a8fd7_7c0acc26","line":225,"range":{"start_line":225,"start_character":53,"end_line":225,"end_character":61},"in_reply_to":"9f6a8fd7_5c66f2ef","updated":"2018-04-17 12:37:34.000000000","message":"Done","commit_id":"33920bf142567aaeccbd557a8c083fbf656ad572"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5613ed673a13860bbf9d6710ad84f2536f2efcdf","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder import utils"},{"line_number":24,"context_line":"from cinder.volume.targets.nvmeof import NVMeOF"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f6a8fd7_3ed27f01","line":24,"updated":"2018-04-23 13:56:46.000000000","message":"According to the OpenStack Hacking Guide, you should import modules instead of objects","commit_id":"a07194bf8b29626ba1ec69acaff8385bcf3763b3"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"e6e4b57d2a4e1232642a0965e7fd4080242165ff","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder import utils"},{"line_number":24,"context_line":"from cinder.volume.targets.nvmeof import NVMeOF"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f6a8fd7_31c844a4","line":24,"in_reply_to":"9f6a8fd7_3ed27f01","updated":"2018-04-25 11:57:42.000000000","message":"Done","commit_id":"a07194bf8b29626ba1ec69acaff8385bcf3763b3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5613ed673a13860bbf9d6710ad84f2536f2efcdf","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _restore(self, nvmf_subsystems):"},{"line_number":75,"context_line":"        # Dump updated JSON dict to append new subsystem"},{"line_number":76,"context_line":"        with tempfile.NamedTemporaryFile() as tmp_fd:"},{"line_number":77,"context_line":"            tmp_fd.write(json.dumps(nvmf_subsystems))"},{"line_number":78,"context_line":"            tmp_fd.flush()"},{"line_number":79,"context_line":"            cmd \u003d ["}],"source_content_type":"text/x-python","patch_set":32,"id":"9f6a8fd7_5ef89379","line":76,"range":{"start_line":76,"start_character":18,"end_line":76,"end_character":19},"updated":"2018-04-23 13:56:46.000000000","message":"I didn\u0027t find tempfile mocking in the tests. Do tests create temp files?","commit_id":"a07194bf8b29626ba1ec69acaff8385bcf3763b3"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"e6e4b57d2a4e1232642a0965e7fd4080242165ff","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _restore(self, nvmf_subsystems):"},{"line_number":75,"context_line":"        # Dump updated JSON dict to append new subsystem"},{"line_number":76,"context_line":"        with tempfile.NamedTemporaryFile() as tmp_fd:"},{"line_number":77,"context_line":"            tmp_fd.write(json.dumps(nvmf_subsystems))"},{"line_number":78,"context_line":"            tmp_fd.flush()"},{"line_number":79,"context_line":"            cmd \u003d ["}],"source_content_type":"text/x-python","patch_set":32,"id":"9f6a8fd7_a5108e01","line":76,"range":{"start_line":76,"start_character":18,"end_line":76,"end_character":19},"in_reply_to":"9f6a8fd7_5ef89379","updated":"2018-04-25 11:57:42.000000000","message":"tests doesn\u0027t create tmp files, we mock the following methods that uses tempfiles:\n_get_available_nvmf_subsystems\n_add_nvmf_subsystem\n_delete_nvmf_subsystem","commit_id":"a07194bf8b29626ba1ec69acaff8385bcf3763b3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5613ed673a13860bbf9d6710ad84f2536f2efcdf","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        if subsystem_name is None:"},{"line_number":143,"context_line":"            LOG.info(\"Skipping remove_export. No NVMe subsystem \""},{"line_number":144,"context_line":"                     \"for volume: %s\", volume[\u0027id\u0027])"},{"line_number":145,"context_line":"            volume[\u0027provider_location\u0027] \u003d None"},{"line_number":146,"context_line":"        else:"},{"line_number":147,"context_line":"            removed_subsystem \u003d self._delete_nvmf_subsystem("},{"line_number":148,"context_line":"                nvmf_subsystems, subsystem_name)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f6a8fd7_3e403fa5","line":145,"updated":"2018-04-23 13:56:46.000000000","message":"Could we avoid params modifications? It makes a the code more complex and leads to en errors in the future","commit_id":"a07194bf8b29626ba1ec69acaff8385bcf3763b3"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"e6e4b57d2a4e1232642a0965e7fd4080242165ff","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        if subsystem_name is None:"},{"line_number":143,"context_line":"            LOG.info(\"Skipping remove_export. No NVMe subsystem \""},{"line_number":144,"context_line":"                     \"for volume: %s\", volume[\u0027id\u0027])"},{"line_number":145,"context_line":"            volume[\u0027provider_location\u0027] \u003d None"},{"line_number":146,"context_line":"        else:"},{"line_number":147,"context_line":"            removed_subsystem \u003d self._delete_nvmf_subsystem("},{"line_number":148,"context_line":"                nvmf_subsystems, subsystem_name)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f6a8fd7_60258408","line":145,"in_reply_to":"9f6a8fd7_3e403fa5","updated":"2018-04-25 11:57:42.000000000","message":"removed","commit_id":"a07194bf8b29626ba1ec69acaff8385bcf3763b3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"5613ed673a13860bbf9d6710ad84f2536f2efcdf","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                return removed_subsystem"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _delete_nvmf_subsystem(self, nvmf_subsystems, subsystem_name):"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"            LOG.debug("},{"line_number":163,"context_line":"                \u0027Removing this subsystem: %s\u0027, subsystem_name)"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"9f6a8fd7_de1a63ca","line":161,"updated":"2018-04-23 13:56:46.000000000","message":"Please, delete empty line here","commit_id":"a07194bf8b29626ba1ec69acaff8385bcf3763b3"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"e6e4b57d2a4e1232642a0965e7fd4080242165ff","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                return removed_subsystem"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _delete_nvmf_subsystem(self, nvmf_subsystems, subsystem_name):"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"            LOG.debug("},{"line_number":163,"context_line":"                \u0027Removing this subsystem: %s\u0027, subsystem_name)"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"9f6a8fd7_b1d45449","line":161,"in_reply_to":"9f6a8fd7_de1a63ca","updated":"2018-04-25 11:57:42.000000000","message":"Done","commit_id":"a07194bf8b29626ba1ec69acaff8385bcf3763b3"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5b7a7c033f278af888b5cfdbaac4078f8beb44f4","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        cmd \u003d ["},{"line_number":187,"context_line":"            \u0027nvmetcli\u0027,"},{"line_number":188,"context_line":"            \u0027save\u0027,"},{"line_number":189,"context_line":"            tmp_file_path]"},{"line_number":190,"context_line":"        try:"},{"line_number":191,"context_line":"            out, err \u003d utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":192,"context_line":"        except putils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":33,"id":"9f6a8fd7_79775a0a","line":189,"updated":"2018-04-26 18:49:58.000000000","message":"Can this not just print to stdout and consume that output rather than requiring a temp file?","commit_id":"751deba3cda86a2b09047cd5d07a8109baec593b"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"ce167a7f43af23e4876768aa2e7b86a357df9a77","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        cmd \u003d ["},{"line_number":187,"context_line":"            \u0027nvmetcli\u0027,"},{"line_number":188,"context_line":"            \u0027save\u0027,"},{"line_number":189,"context_line":"            tmp_file_path]"},{"line_number":190,"context_line":"        try:"},{"line_number":191,"context_line":"            out, err \u003d utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":192,"context_line":"        except putils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":33,"id":"9f6a8fd7_aa4f7b32","line":189,"in_reply_to":"9f6a8fd7_79775a0a","updated":"2018-05-02 08:38:35.000000000","message":"nvmetcli doesn\u0027t support printing to stdout yet, we have to save the data to a file and then read it.","commit_id":"751deba3cda86a2b09047cd5d07a8109baec593b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"f01dd5de3658216002af4a130c954b18850c992d","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        nvmf_subsystems[\u0027subsystems\u0027].append(subsystem_section)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        LOG.info("},{"line_number":131,"context_line":"            \u0027Trying to load the following subsystems %s\u0027, nvmf_subsystems)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self._restore(nvmf_subsystems)"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9f6a8fd7_f3b1e7e2","line":131,"range":{"start_line":131,"start_character":42,"end_line":131,"end_character":53},"updated":"2018-05-02 14:54:31.000000000","message":"subsystems:","commit_id":"1cc7c49921b26df390024bfb7a2d5d24724cf365"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"4062d9877aa1c9b5cbb0a0c9c0f2b73b37696d14","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        nvmf_subsystems[\u0027subsystems\u0027].append(subsystem_section)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        LOG.info("},{"line_number":131,"context_line":"            \u0027Trying to load the following subsystems %s\u0027, nvmf_subsystems)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self._restore(nvmf_subsystems)"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9f6a8fd7_c9caf46c","line":131,"range":{"start_line":131,"start_character":42,"end_line":131,"end_character":53},"in_reply_to":"9f6a8fd7_f3b1e7e2","updated":"2018-05-02 17:37:55.000000000","message":"Done","commit_id":"1cc7c49921b26df390024bfb7a2d5d24724cf365"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a9365c1a06abf404c768b22051346bcfff9bd093","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                return subsystem_name"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def _get_available_nvmf_subsystems(self):"},{"line_number":184,"context_line":"        __, tmp_file_path \u003d tempfile.mkstemp()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        # nvmetcli doesn\u0027t support printing to stdout yet,"},{"line_number":187,"context_line":"        cmd \u003d ["}],"source_content_type":"text/x-python","patch_set":34,"id":"9f6a8fd7_b86cac36","line":184,"updated":"2018-05-02 14:23:13.000000000","message":"Please pass prefix\u003d\"nvmet\" so these files are identifiable.","commit_id":"1cc7c49921b26df390024bfb7a2d5d24724cf365"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"4062d9877aa1c9b5cbb0a0c9c0f2b73b37696d14","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                return subsystem_name"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def _get_available_nvmf_subsystems(self):"},{"line_number":184,"context_line":"        __, tmp_file_path \u003d tempfile.mkstemp()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        # nvmetcli doesn\u0027t support printing to stdout yet,"},{"line_number":187,"context_line":"        cmd \u003d ["}],"source_content_type":"text/x-python","patch_set":34,"id":"9f6a8fd7_3008b0d7","line":184,"in_reply_to":"9f6a8fd7_b86cac36","updated":"2018-05-02 17:37:55.000000000","message":"Done","commit_id":"1cc7c49921b26df390024bfb7a2d5d24724cf365"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a9365c1a06abf404c768b22051346bcfff9bd093","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            out, err \u003d utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":193,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":194,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":195,"context_line":"                LOG.exception(\u0027Error from nvmetcli save\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # temp file must be readable by this process user"},{"line_number":198,"context_line":"        # in order to avoid executing cat as root"}],"source_content_type":"text/x-python","patch_set":34,"id":"9f6a8fd7_58655044","line":195,"updated":"2018-05-02 14:23:13.000000000","message":"This error case needs to delete the file.","commit_id":"1cc7c49921b26df390024bfb7a2d5d24724cf365"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"4062d9877aa1c9b5cbb0a0c9c0f2b73b37696d14","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            out, err \u003d utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":193,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":194,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":195,"context_line":"                LOG.exception(\u0027Error from nvmetcli save\u0027)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # temp file must be readable by this process user"},{"line_number":198,"context_line":"        # in order to avoid executing cat as root"}],"source_content_type":"text/x-python","patch_set":34,"id":"9f6a8fd7_29061088","line":195,"in_reply_to":"9f6a8fd7_58655044","updated":"2018-05-02 17:37:55.000000000","message":"Done","commit_id":"1cc7c49921b26df390024bfb7a2d5d24724cf365"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a9365c1a06abf404c768b22051346bcfff9bd093","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                out, err \u003d utils.execute(*cmd)"},{"line_number":203,"context_line":"            except putils.ProcessExecutionError:"},{"line_number":204,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":205,"context_line":"                    LOG.exception(\u0027Failed to read: %s\u0027, tmp_file_path)"},{"line_number":206,"context_line":"            nvmf_subsystems \u003d json.loads(out)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        cmd \u003d [\u0027rm\u0027, \u0027-f\u0027, tmp_file_path]"}],"source_content_type":"text/x-python","patch_set":34,"id":"9f6a8fd7_185fd872","line":205,"updated":"2018-05-02 14:23:13.000000000","message":"This error case needs to delete the file.","commit_id":"1cc7c49921b26df390024bfb7a2d5d24724cf365"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"4062d9877aa1c9b5cbb0a0c9c0f2b73b37696d14","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                out, err \u003d utils.execute(*cmd)"},{"line_number":203,"context_line":"            except putils.ProcessExecutionError:"},{"line_number":204,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":205,"context_line":"                    LOG.exception(\u0027Failed to read: %s\u0027, tmp_file_path)"},{"line_number":206,"context_line":"            nvmf_subsystems \u003d json.loads(out)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        cmd \u003d [\u0027rm\u0027, \u0027-f\u0027, tmp_file_path]"}],"source_content_type":"text/x-python","patch_set":34,"id":"9f6a8fd7_0938ec3a","line":205,"in_reply_to":"9f6a8fd7_185fd872","updated":"2018-05-02 17:37:55.000000000","message":"Done","commit_id":"1cc7c49921b26df390024bfb7a2d5d24724cf365"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bd43982332b7f816bec510b577a0e625a0cfe436","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            LOG.info(\u0027Added subsystem: %s\u0027, newly_added_subsystem)"},{"line_number":61,"context_line":"            search_for_subsystem \u003d newly_added_subsystem"},{"line_number":62,"context_line":"        else:"},{"line_number":63,"context_line":"            LOG.info(\u0027Skip creating subsystem %s as \u0027"},{"line_number":64,"context_line":"                     \u0027it already exists.\u0027, search_for_subsystem)"},{"line_number":65,"context_line":"        return {"},{"line_number":66,"context_line":"            \u0027location\u0027: self.get_nvmeof_location("}],"source_content_type":"text/x-python","patch_set":35,"id":"5f7c97a3_c0bd3d69","line":63,"range":{"start_line":63,"start_character":16,"end_line":63,"end_character":20},"updated":"2018-05-04 09:50:58.000000000","message":"This should probably be at debug level. Not anything that concerns me as far as landing this patch, but something to consider and maybe change in subsequent updates.","commit_id":"8d7e131c587f31d85c76f990998d411af490554f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bd43982332b7f816bec510b577a0e625a0cfe436","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        nvmf_subsystems[\u0027subsystems\u0027].append(subsystem_section)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        LOG.info("},{"line_number":131,"context_line":"            \u0027Trying to load the following subsystems:%s\u0027, nvmf_subsystems)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self._restore(nvmf_subsystems)"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"5f7c97a3_c04bfd84","line":131,"range":{"start_line":131,"start_character":52,"end_line":131,"end_character":53},"updated":"2018-05-04 09:50:58.000000000","message":"Would be more readable with a space after the :, but again, not a blocker.","commit_id":"8d7e131c587f31d85c76f990998d411af490554f"}],"etc/cinder/rootwrap.d/volume.filters":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"300fd0361a9cf43d27c3d32a7e4ba0f28c880461","unresolved":false,"context_lines":[{"line_number":232,"context_line":"umount.quobyte: CommandFilter, umount.quobyte, root"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"# cinder/volume/targets/nvmet.py"},{"line_number":235,"context_line":"nvmetcli: CommandFilter, nvmetcli, root"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"ff82abbf_4b5fdf71","line":235,"updated":"2017-11-22 14:07:07.000000000","message":"Use oslo.privsep?","commit_id":"9efa12aa0f8310b771704fddd844635346a13b74"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5b7a7c033f278af888b5cfdbaac4078f8beb44f4","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"# cinder/volume/targets/nvmet.py"},{"line_number":233,"context_line":"nvmetcli: CommandFilter, nvmetcli, root"},{"line_number":234,"context_line":"cat: CommandFilter, cat, root"}],"source_content_type":"application/octet-stream","patch_set":33,"id":"9f6a8fd7_992eeef8","line":234,"updated":"2018-04-26 18:49:58.000000000","message":"Please don\u0027t add back the ability to cat any file on the system via rootwrap.","commit_id":"751deba3cda86a2b09047cd5d07a8109baec593b"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"ce167a7f43af23e4876768aa2e7b86a357df9a77","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"# cinder/volume/targets/nvmet.py"},{"line_number":233,"context_line":"nvmetcli: CommandFilter, nvmetcli, root"},{"line_number":234,"context_line":"cat: CommandFilter, cat, root"}],"source_content_type":"application/octet-stream","patch_set":33,"id":"9f6a8fd7_aa68db86","line":234,"in_reply_to":"9f6a8fd7_992eeef8","updated":"2018-05-02 08:38:35.000000000","message":"done","commit_id":"751deba3cda86a2b09047cd5d07a8109baec593b"}]}
