)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"72d1d372a84e3c2b58d87ff952bd77939d5fc04b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"nvmet_subsystem_name. The target IP and port, that will be used by"},{"line_number":16,"context_line":"nvmecli OS-brick’s NVMe connector, are taken from iscsi_ip_address"},{"line_number":17,"context_line":"and iscsi_port in cinder.conf for now."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I344da50112af8e559408b5b7c8532c659a97c7c2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bf57530f_1e7632da","line":18,"updated":"2017-09-20 09:31:00.000000000","message":"missing implements: \u003cblueprint\u003e","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"62fccb9b64df3b717a1ff61c59ef82d8d1b5fbf7","unresolved":false,"context_lines":[{"line_number":15,"context_line":"nvmet_subsystem_name. The target IP and port, that will be used by"},{"line_number":16,"context_line":"nvmecli OS-brick’s NVMe connector, are taken from iscsi_ip_address"},{"line_number":17,"context_line":"and iscsi_port in cinder.conf for now."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I344da50112af8e559408b5b7c8532c659a97c7c2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7f515b1d_98802cf7","line":18,"in_reply_to":"bf57530f_19408c35","updated":"2017-10-01 08:19:37.000000000","message":"Done","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"62fccb9b64df3b717a1ff61c59ef82d8d1b5fbf7","unresolved":false,"context_lines":[{"line_number":15,"context_line":"nvmet_subsystem_name. The target IP and port, that will be used by"},{"line_number":16,"context_line":"nvmecli OS-brick’s NVMe connector, are taken from iscsi_ip_address"},{"line_number":17,"context_line":"and iscsi_port in cinder.conf for now."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I344da50112af8e559408b5b7c8532c659a97c7c2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7f515b1d_d8822400","line":18,"in_reply_to":"bf57530f_1e7632da","updated":"2017-10-01 08:19:37.000000000","message":"Done","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"4475b4c9c1ef42738a661066e62a40b776c5f2f4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"nvmet_subsystem_name. The target IP and port, that will be used by"},{"line_number":16,"context_line":"nvmecli OS-brick’s NVMe connector, are taken from iscsi_ip_address"},{"line_number":17,"context_line":"and iscsi_port in cinder.conf for now."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I344da50112af8e559408b5b7c8532c659a97c7c2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bf57530f_19408c35","line":18,"in_reply_to":"bf57530f_1e7632da","updated":"2017-09-20 09:32:22.000000000","message":"Implements: blueprint nvme-target-cli","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"d94f8a194945ff215cc6e19a29adc884399d00d4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"A new driver is added, and allows Targets to implement"},{"line_number":11,"context_line":"create_nvmeof_target, delete_nvmeof_target methods."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"By choosing iscsi_helper as nvmet, other parameters can be configured"},{"line_number":14,"context_line":"too in cinder.conf like nvmet_port_id, nvmet_ns_id (for namespace) and"},{"line_number":15,"context_line":"nvmet_subsystem_name. The target IP and port, that will be used by"},{"line_number":16,"context_line":"nvmecli OS-brick NVMe connector, are taken from iscsi_ip_address"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ff82abbf_75dfdcd5","line":13,"range":{"start_line":13,"start_character":12,"end_line":13,"end_character":24},"updated":"2017-11-26 11:20:41.000000000","message":"update commit msg we don\u0027t use iscsi helper","commit_id":"851c6527f28bbfee16797d720610102ba8359d3a"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"efb94c1cca4eeda4b476a74942b4305d81d92632","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Hamdy Khader \u003chamdyk@mellanox.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-12-28 14:47:02 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding NVMeOF for LVM driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added changes to LVM driver to support NVMeOF operations."},{"line_number":10,"context_line":"A new driver is added, and allows Targets to implement"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9f91af0f_0523b257","line":7,"updated":"2018-01-09 00:05:01.000000000","message":"probably should change the description of this patch.  I don\u0027t see anything in this patchset related to LVM.  This is simply adding a new abstract target class, that still needs someone to implement against and use.","commit_id":"d0392fc66b3f273e77c3dbe596c48e407612cb9c"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"86d63cde713339c5798cc0b06d201adaf1e166c9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Hamdy Khader \u003chamdyk@mellanox.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-12-28 14:47:02 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding NVMeOF for LVM driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added changes to LVM driver to support NVMeOF operations."},{"line_number":10,"context_line":"A new driver is added, and allows Targets to implement"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"9f91af0f_c43e07c0","line":7,"in_reply_to":"9f91af0f_0523b257","updated":"2018-01-10 07:46:21.000000000","message":"Done","commit_id":"d0392fc66b3f273e77c3dbe596c48e407612cb9c"}],"cinder/tests/unit/targets/test_nvmeof_driver.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"72d1d372a84e3c2b58d87ff952bd77939d5fc04b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder import utils"},{"line_number":18,"context_line":"from cinder.volume.targets import nvmeof"},{"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 FakeNVMeOFDriver(nvmeof.NVMeOF):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf57530f_9e4b4286","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":32},"updated":"2017-09-20 09:31:00.000000000","message":"move this import to be between import mock and the cinder imports","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"62fccb9b64df3b717a1ff61c59ef82d8d1b5fbf7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder import utils"},{"line_number":18,"context_line":"from cinder.volume.targets import nvmeof"},{"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 FakeNVMeOFDriver(nvmeof.NVMeOF):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_98d26c27","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":32},"in_reply_to":"bf57530f_9e4b4286","updated":"2017-10-01 08:19:37.000000000","message":"Done","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"d94f8a194945ff215cc6e19a29adc884399d00d4","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        }"},{"line_number":83,"context_line":"        self.assertEqual(expected_return,"},{"line_number":84,"context_line":"                         self.target.initialize_connection(mock_testvol,"},{"line_number":85,"context_line":"                                                           mock_connector))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_nvmet_protocol(self):"},{"line_number":88,"context_line":"        self.assertEqual(\u0027nvmeof\u0027, self.target.protocol)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_077c2370","line":85,"range":{"start_line":85,"start_character":1,"end_line":85,"end_character":2},"updated":"2017-11-26 11:20:41.000000000","message":"missing test for such as \ntest_get_connection_properties\ntest_validate_connector\ntest_remove_export_notfound","commit_id":"851c6527f28bbfee16797d720610102ba8359d3a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"38ab54ca562c766b35bb576146c75becccbb51cf","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        }"},{"line_number":83,"context_line":"        self.assertEqual(expected_return,"},{"line_number":84,"context_line":"                         self.target.initialize_connection(mock_testvol,"},{"line_number":85,"context_line":"                                                           mock_connector))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_nvmet_protocol(self):"},{"line_number":88,"context_line":"        self.assertEqual(\u0027nvmeof\u0027, self.target.protocol)"}],"source_content_type":"text/x-python","patch_set":10,"id":"df87a7cf_57f0cbc9","line":85,"range":{"start_line":85,"start_character":1,"end_line":85,"end_character":2},"in_reply_to":"ff82abbf_077c2370","updated":"2017-12-17 14:51:02.000000000","message":"Done","commit_id":"851c6527f28bbfee16797d720610102ba8359d3a"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"d94f8a194945ff215cc6e19a29adc884399d00d4","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                         self.target.initialize_connection(mock_testvol,"},{"line_number":85,"context_line":"                                                           mock_connector))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_nvmet_protocol(self):"},{"line_number":88,"context_line":"        self.assertEqual(\u0027nvmeof\u0027, self.target.protocol)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @mock.patch.object(FakeNVMeOFDriver, \u0027create_nvmeof_target\u0027)"},{"line_number":91,"context_line":"    def test_create_export(self, mock_create_nvme_target):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_15f21071","line":88,"range":{"start_line":87,"start_character":0,"end_line":88,"end_character":56},"updated":"2017-11-26 11:20:41.000000000","message":"remove this test it is not testing anything","commit_id":"851c6527f28bbfee16797d720610102ba8359d3a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"38ab54ca562c766b35bb576146c75becccbb51cf","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                         self.target.initialize_connection(mock_testvol,"},{"line_number":85,"context_line":"                                                           mock_connector))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_nvmet_protocol(self):"},{"line_number":88,"context_line":"        self.assertEqual(\u0027nvmeof\u0027, self.target.protocol)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @mock.patch.object(FakeNVMeOFDriver, \u0027create_nvmeof_target\u0027)"},{"line_number":91,"context_line":"    def test_create_export(self, mock_create_nvme_target):"}],"source_content_type":"text/x-python","patch_set":10,"id":"df87a7cf_77eb8fdb","line":88,"range":{"start_line":87,"start_character":0,"end_line":88,"end_character":56},"in_reply_to":"ff82abbf_15f21071","updated":"2017-12-17 14:51:02.000000000","message":"Done","commit_id":"851c6527f28bbfee16797d720610102ba8359d3a"}],"cinder/volume/driver.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f6397724cf566d49a17bb20e955c8090100e9b9e","unresolved":false,"context_lines":[{"line_number":305,"context_line":"]"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"nvmet_opts \u003d ["},{"line_number":308,"context_line":"    cfg.PortOpt(\u0027nvmet_port_id\u0027,"},{"line_number":309,"context_line":"                default\u003d1,"},{"line_number":310,"context_line":"                help\u003d\u0027The port that the NVMe target is listening on.\u0027),"},{"line_number":311,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_916e3e2d","line":308,"range":{"start_line":308,"start_character":17,"end_line":308,"end_character":30},"updated":"2018-03-13 14:11:46.000000000","message":"I would rather see the existing target_port used rather than add a new one.\n\nI notice the iser option has a comment that it is for backwards compat, but that should be updated to actually show as deprecated. So rather than add another option that we want to deprecate at some point, let\u0027s just update the help text on target_port and use that.","commit_id":"b95e81122658f4c7ad2c6ec725036a2b3aabecb1"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"2f64396c96fd4d0da96b3fe5c122d0b338006c63","unresolved":false,"context_lines":[{"line_number":305,"context_line":"]"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"nvmet_opts \u003d ["},{"line_number":308,"context_line":"    cfg.PortOpt(\u0027nvmet_port_id\u0027,"},{"line_number":309,"context_line":"                default\u003d1,"},{"line_number":310,"context_line":"                help\u003d\u0027The port that the NVMe target is listening on.\u0027),"},{"line_number":311,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_2038393b","line":308,"range":{"start_line":308,"start_character":17,"end_line":308,"end_character":30},"in_reply_to":"df7087c5_916e3e2d","updated":"2018-03-13 15:54:23.000000000","message":"target_port is a tcp port but nvmet port id is an internal port that has value of [0, 65535]","commit_id":"b95e81122658f4c7ad2c6ec725036a2b3aabecb1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f6397724cf566d49a17bb20e955c8090100e9b9e","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"nvmet_opts \u003d ["},{"line_number":308,"context_line":"    cfg.PortOpt(\u0027nvmet_port_id\u0027,"},{"line_number":309,"context_line":"                default\u003d1,"},{"line_number":310,"context_line":"                help\u003d\u0027The port that the NVMe target is listening on.\u0027),"},{"line_number":311,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":312,"context_line":"               default\u003d10,"}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_11646e49","line":309,"range":{"start_line":309,"start_character":24,"end_line":309,"end_character":25},"updated":"2018-03-13 14:11:46.000000000","message":"Is 1 a valid port ID? Maybe I misunderstand this option and my previous comment is not valid.","commit_id":"b95e81122658f4c7ad2c6ec725036a2b3aabecb1"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"2f64396c96fd4d0da96b3fe5c122d0b338006c63","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"nvmet_opts \u003d ["},{"line_number":308,"context_line":"    cfg.PortOpt(\u0027nvmet_port_id\u0027,"},{"line_number":309,"context_line":"                default\u003d1,"},{"line_number":310,"context_line":"                help\u003d\u0027The port that the NVMe target is listening on.\u0027),"},{"line_number":311,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":312,"context_line":"               default\u003d10,"}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_c0a4dda8","line":309,"range":{"start_line":309,"start_character":24,"end_line":309,"end_character":25},"in_reply_to":"df7087c5_11646e49","updated":"2018-03-13 15:54:23.000000000","message":"actually yes, nvmet port id 1 is a valid value.\nhttps://community.mellanox.com/docs/DOC-2504","commit_id":"b95e81122658f4c7ad2c6ec725036a2b3aabecb1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"8681ec3a330901c92ec5cca4d67ef80a292c9f11","unresolved":false,"context_lines":[{"line_number":315,"context_line":"    cfg.StrOpt(\u0027nvmet_protocol\u0027,"},{"line_number":316,"context_line":"               default\u003d\u0027rdma\u0027,"},{"line_number":317,"context_line":"               choices\u003d[\u0027rdma\u0027, \u0027tcp\u0027],"},{"line_number":318,"context_line":"               help\u003d\u0027Use RDMA protocol for NVMe connections\u0027),"},{"line_number":319,"context_line":"]"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_f1b9dee8","line":318,"range":{"start_line":318,"start_character":20,"end_line":318,"end_character":60},"updated":"2018-03-12 14:21:58.000000000","message":"This description does not match this option, since the option is a list of choices, and the description sounds like it is describing a boolean.\n\nOr maybe something just needs to be better explained here?","commit_id":"b95e81122658f4c7ad2c6ec725036a2b3aabecb1"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"2f64396c96fd4d0da96b3fe5c122d0b338006c63","unresolved":false,"context_lines":[{"line_number":315,"context_line":"    cfg.StrOpt(\u0027nvmet_protocol\u0027,"},{"line_number":316,"context_line":"               default\u003d\u0027rdma\u0027,"},{"line_number":317,"context_line":"               choices\u003d[\u0027rdma\u0027, \u0027tcp\u0027],"},{"line_number":318,"context_line":"               help\u003d\u0027Use RDMA protocol for NVMe connections\u0027),"},{"line_number":319,"context_line":"]"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_402a0d7f","line":318,"range":{"start_line":318,"start_character":20,"end_line":318,"end_character":60},"in_reply_to":"df7087c5_91dcfee4","updated":"2018-03-13 15:54:23.000000000","message":"We moved to nvmet_rdma option in target_protocol.","commit_id":"b95e81122658f4c7ad2c6ec725036a2b3aabecb1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f6397724cf566d49a17bb20e955c8090100e9b9e","unresolved":false,"context_lines":[{"line_number":315,"context_line":"    cfg.StrOpt(\u0027nvmet_protocol\u0027,"},{"line_number":316,"context_line":"               default\u003d\u0027rdma\u0027,"},{"line_number":317,"context_line":"               choices\u003d[\u0027rdma\u0027, \u0027tcp\u0027],"},{"line_number":318,"context_line":"               help\u003d\u0027Use RDMA protocol for NVMe connections\u0027),"},{"line_number":319,"context_line":"]"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_91dcfee4","line":318,"range":{"start_line":318,"start_character":20,"end_line":318,"end_character":60},"in_reply_to":"df7087c5_f1b9dee8","updated":"2018-03-13 14:11:46.000000000","message":"I agree. If users should only use RDMA then don\u0027t even give the option. If either RDMA or TCP are valid, the help text needs to be updated to better describe the option.","commit_id":"b95e81122658f4c7ad2c6ec725036a2b3aabecb1"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"092e5f2c40b395b550c0c5afe1b0a752c606bbbd","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":313,"context_line":"               default\u003d10,"},{"line_number":314,"context_line":"               help\u003d\u0027The namespace id associated with the subsystem \u0027"},{"line_number":315,"context_line":"                    \u0027that will be created with the path for the LVM volume.\u0027),"},{"line_number":316,"context_line":"]"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9f6a8fd7_19ff3e35","line":315,"range":{"start_line":315,"start_character":63,"end_line":315,"end_character":74},"updated":"2018-04-26 18:51:52.000000000","message":"Does this only work on LVM volumes?\n\nThis is being documented as a general Cinder driver feature.","commit_id":"10c801c1d588ef49a9f30c4edfd5ba248a84fef1"}],"cinder/volume/targets/nvmeof.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"72d1d372a84e3c2b58d87ff952bd77939d5fc04b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder.volume import configuration"},{"line_number":18,"context_line":"from cinder.volume.targets import driver"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"nvmet_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"bf57530f_99febc03","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":35},"updated":"2017-09-20 09:31:00.000000000","message":"again move import to be between import abc and cinder imports","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"62fccb9b64df3b717a1ff61c59ef82d8d1b5fbf7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from cinder.volume import configuration"},{"line_number":18,"context_line":"from cinder.volume.targets import driver"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"nvmet_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_78cd7083","line":21,"range":{"start_line":20,"start_character":0,"end_line":21,"end_character":35},"in_reply_to":"bf57530f_99febc03","updated":"2017-10-01 08:19:37.000000000","message":"Done","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"72d1d372a84e3c2b58d87ff952bd77939d5fc04b","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            \u0027target_portal\u0027: target_portal,"},{"line_number":105,"context_line":"            \u0027target_port\u0027: target_port,"},{"line_number":106,"context_line":"            \u0027nqn\u0027: nqn,"},{"line_number":107,"context_line":"            \u0027nvme_transport_type\u0027: nvme_transport_type,"},{"line_number":108,"context_line":"            \u0027nvmet_ns_id\u0027: nvmet_ns_id"},{"line_number":109,"context_line":"        }"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf57530f_f90ed830","line":107,"range":{"start_line":107,"start_character":13,"end_line":107,"end_character":18},"updated":"2017-09-20 09:31:00.000000000","message":"remove the nvme_ perfix","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"62fccb9b64df3b717a1ff61c59ef82d8d1b5fbf7","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            \u0027target_portal\u0027: target_portal,"},{"line_number":105,"context_line":"            \u0027target_port\u0027: target_port,"},{"line_number":106,"context_line":"            \u0027nqn\u0027: nqn,"},{"line_number":107,"context_line":"            \u0027nvme_transport_type\u0027: nvme_transport_type,"},{"line_number":108,"context_line":"            \u0027nvmet_ns_id\u0027: nvmet_ns_id"},{"line_number":109,"context_line":"        }"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_38c37859","line":107,"range":{"start_line":107,"start_character":13,"end_line":107,"end_character":18},"in_reply_to":"bf57530f_f90ed830","updated":"2017-10-01 08:19:37.000000000","message":"Done","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"72d1d372a84e3c2b58d87ff952bd77939d5fc04b","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            \u0027target_port\u0027: target_port,"},{"line_number":106,"context_line":"            \u0027nqn\u0027: nqn,"},{"line_number":107,"context_line":"            \u0027nvme_transport_type\u0027: nvme_transport_type,"},{"line_number":108,"context_line":"            \u0027nvmet_ns_id\u0027: nvmet_ns_id"},{"line_number":109,"context_line":"        }"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf57530f_b9186075","line":108,"range":{"start_line":108,"start_character":13,"end_line":108,"end_character":19},"updated":"2017-09-20 09:31:00.000000000","message":"remove the nvme_ perfix","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"62fccb9b64df3b717a1ff61c59ef82d8d1b5fbf7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            \u0027target_port\u0027: target_port,"},{"line_number":106,"context_line":"            \u0027nqn\u0027: nqn,"},{"line_number":107,"context_line":"            \u0027nvme_transport_type\u0027: nvme_transport_type,"},{"line_number":108,"context_line":"            \u0027nvmet_ns_id\u0027: nvmet_ns_id"},{"line_number":109,"context_line":"        }"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_18a43cb9","line":108,"range":{"start_line":108,"start_character":13,"end_line":108,"end_character":19},"in_reply_to":"bf57530f_b9186075","updated":"2017-10-01 08:19:37.000000000","message":"Done","commit_id":"abd9adc4ba1cac22439a5772c94094df44703de9"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"99e11cb6e92381e1a18276aacb7fbbcb9a9d1447","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        In NVMeOF driver, :driver_volume_type: is set to \u0027nvmeof\u0027,"},{"line_number":75,"context_line":"        :data: is the driver data that has the value of"},{"line_number":76,"context_line":"        _get_connection_properties"},{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        return {"},{"line_number":79,"context_line":"            \u0027driver_volume_type\u0027: self.protocol,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_6300d868","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":33},"updated":"2017-11-22 04:58:06.000000000","message":"put an example of the returned values like in iscsi \nhttps://github.com/openstack/cinder/blob/master/cinder/volume/targets/iscsi.py#L268-L280","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"19c657038edb00d77fec7dd98569df3ef2023f3c","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        In NVMeOF driver, :driver_volume_type: is set to \u0027nvmeof\u0027,"},{"line_number":75,"context_line":"        :data: is the driver data that has the value of"},{"line_number":76,"context_line":"        _get_connection_properties"},{"line_number":77,"context_line":"        \"\"\""},{"line_number":78,"context_line":"        return {"},{"line_number":79,"context_line":"            \u0027driver_volume_type\u0027: self.protocol,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_703c15bf","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":33},"in_reply_to":"ff82abbf_6300d868","updated":"2017-11-23 08:30:48.000000000","message":"Done","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"99e11cb6e92381e1a18276aacb7fbbcb9a9d1447","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            \u0027data\u0027: self._get_connection_properties(volume)"},{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @staticmethod"},{"line_number":84,"context_line":"    def _get_connection_properties(volume):"},{"line_number":85,"context_line":"        \"\"\"Gets NVMeOF connection configuration."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_a32b40e9","line":83,"range":{"start_line":83,"start_character":4,"end_line":83,"end_character":17},"updated":"2017-11-22 04:58:06.000000000","message":"why staticmethod?","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"19c657038edb00d77fec7dd98569df3ef2023f3c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            \u0027data\u0027: self._get_connection_properties(volume)"},{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @staticmethod"},{"line_number":84,"context_line":"    def _get_connection_properties(volume):"},{"line_number":85,"context_line":"        \"\"\"Gets NVMeOF connection configuration."},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_357c3fb4","line":83,"range":{"start_line":83,"start_character":4,"end_line":83,"end_character":17},"in_reply_to":"ff82abbf_a32b40e9","updated":"2017-11-23 08:30:48.000000000","message":"this method doesn\u0027t need \"self\" parameter","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"99e11cb6e92381e1a18276aacb7fbbcb9a9d1447","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            \u0027ns_id\u0027: nvmet_ns_id"},{"line_number":109,"context_line":"        }"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @staticmethod"},{"line_number":112,"context_line":"    def _get_export_location_info("},{"line_number":113,"context_line":"            nqn, target_ip, target_port, nvme_transport_type, nvmet_ns_id):"},{"line_number":114,"context_line":"        \"\"\"Serialize driver data into single line string.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_232890e0","line":111,"range":{"start_line":111,"start_character":4,"end_line":111,"end_character":17},"updated":"2017-11-22 04:58:06.000000000","message":"why static method?","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"19c657038edb00d77fec7dd98569df3ef2023f3c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            \u0027ns_id\u0027: nvmet_ns_id"},{"line_number":109,"context_line":"        }"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @staticmethod"},{"line_number":112,"context_line":"    def _get_export_location_info("},{"line_number":113,"context_line":"            nqn, target_ip, target_port, nvme_transport_type, nvmet_ns_id):"},{"line_number":114,"context_line":"        \"\"\"Serialize driver data into single line string.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_909f5902","line":111,"range":{"start_line":111,"start_character":4,"end_line":111,"end_character":17},"in_reply_to":"ff82abbf_232890e0","updated":"2017-11-23 08:30:48.000000000","message":"removed","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"99e11cb6e92381e1a18276aacb7fbbcb9a9d1447","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        }"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @staticmethod"},{"line_number":112,"context_line":"    def _get_export_location_info("},{"line_number":113,"context_line":"            nqn, target_ip, target_port, nvme_transport_type, nvmet_ns_id):"},{"line_number":114,"context_line":"        \"\"\"Serialize driver data into single line string.\"\"\""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_e32148fd","line":112,"range":{"start_line":112,"start_character":8,"end_line":112,"end_character":33},"updated":"2017-11-22 04:58:06.000000000","message":"rename to nvmeof_location\nalso who it? it should be call in the create_export","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"19c657038edb00d77fec7dd98569df3ef2023f3c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        }"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @staticmethod"},{"line_number":112,"context_line":"    def _get_export_location_info("},{"line_number":113,"context_line":"            nqn, target_ip, target_port, nvme_transport_type, nvmet_ns_id):"},{"line_number":114,"context_line":"        \"\"\"Serialize driver data into single line string.\"\"\""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_b0737db1","line":112,"range":{"start_line":112,"start_character":8,"end_line":112,"end_character":33},"in_reply_to":"ff82abbf_e32148fd","updated":"2017-11-23 08:30:48.000000000","message":"it\u0027s called from NVMeET method \u0027create_nvmeof_target\u0027","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"99e11cb6e92381e1a18276aacb7fbbcb9a9d1447","unresolved":false,"context_lines":[{"line_number":121,"context_line":"             \u0027ns_id\u0027: nvmet_ns_id})"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":124,"context_line":"        if volume[\u0027provider_location\u0027] is None:"},{"line_number":125,"context_line":"            LOG.debug(\u0027No provider_location for volume %s.\u0027,"},{"line_number":126,"context_line":"                      volume[\u0027id\u0027])"},{"line_number":127,"context_line":"            return"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def create_export(self, context, volume, volume_path):"},{"line_number":130,"context_line":"        \"\"\"Creates export data for a logical volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_a39580e6","line":127,"range":{"start_line":124,"start_character":0,"end_line":127,"end_character":18},"updated":"2017-11-22 04:58:06.000000000","message":"return pass","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"19c657038edb00d77fec7dd98569df3ef2023f3c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"             \u0027ns_id\u0027: nvmet_ns_id})"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":124,"context_line":"        if volume[\u0027provider_location\u0027] is None:"},{"line_number":125,"context_line":"            LOG.debug(\u0027No provider_location for volume %s.\u0027,"},{"line_number":126,"context_line":"                      volume[\u0027id\u0027])"},{"line_number":127,"context_line":"            return"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def create_export(self, context, volume, volume_path):"},{"line_number":130,"context_line":"        \"\"\"Creates export data for a logical volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_90a51907","line":127,"range":{"start_line":124,"start_character":0,"end_line":127,"end_character":18},"in_reply_to":"ff82abbf_a39580e6","updated":"2017-11-23 08:30:48.000000000","message":"Done","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"99e11cb6e92381e1a18276aacb7fbbcb9a9d1447","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def remove_export(self, context, volume):"},{"line_number":146,"context_line":"        return self.delete_nvmeof_target(volume)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @staticmethod"},{"line_number":149,"context_line":"    def validate_connector(connector):"},{"line_number":150,"context_line":"        if \u0027initiator\u0027 not in connector:"},{"line_number":151,"context_line":"            err_msg \u003d (_(\u0027The volume driver requires the NVMe initiator \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_238970c9","line":148,"range":{"start_line":148,"start_character":4,"end_line":148,"end_character":17},"updated":"2017-11-22 04:58:06.000000000","message":"remove staticmethod","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"19c657038edb00d77fec7dd98569df3ef2023f3c","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def remove_export(self, context, volume):"},{"line_number":146,"context_line":"        return self.delete_nvmeof_target(volume)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @staticmethod"},{"line_number":149,"context_line":"    def validate_connector(connector):"},{"line_number":150,"context_line":"        if \u0027initiator\u0027 not in connector:"},{"line_number":151,"context_line":"            err_msg \u003d (_(\u0027The volume driver requires the NVMe initiator \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_708415b2","line":148,"range":{"start_line":148,"start_character":4,"end_line":148,"end_character":17},"in_reply_to":"ff82abbf_238970c9","updated":"2017-11-23 08:30:48.000000000","message":"done","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"99e11cb6e92381e1a18276aacb7fbbcb9a9d1447","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                missing\u003d\u0027initiator\u0027)"},{"line_number":156,"context_line":"        return True"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def attach_volume(self):"},{"line_number":159,"context_line":"        pass"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def detach_volume(self):"},{"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,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_83bb9c70","line":162,"range":{"start_line":158,"start_character":0,"end_line":162,"end_character":12},"updated":"2017-11-22 04:58:06.000000000","message":"remove this","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"19c657038edb00d77fec7dd98569df3ef2023f3c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                missing\u003d\u0027initiator\u0027)"},{"line_number":156,"context_line":"        return True"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def attach_volume(self):"},{"line_number":159,"context_line":"        pass"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def detach_volume(self):"},{"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,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff82abbf_d0840161","line":162,"range":{"start_line":158,"start_character":0,"end_line":162,"end_character":12},"in_reply_to":"ff82abbf_83bb9c70","updated":"2017-11-23 08:30:48.000000000","message":"Done","commit_id":"e3eac95e6f4f34921b4feeb5f0c3954f8b1ae7dc"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"a26213f96787b483383cf8cf5d49dd31409021d5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.nvmet_port_id \u003d self.configuration.nvmet_port_id"},{"line_number":54,"context_line":"        self.nvmet_ns_id \u003d self.configuration.nvmet_ns_id"},{"line_number":55,"context_line":"        self.nvmet_subsystem_name \u003d self.configuration.target_prefix"},{"line_number":56,"context_line":"        self.nvme_transport_type \u003d self.configuration.target_protocol"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":59,"context_line":"        \"\"\"Returns the connection info."}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_3434f892","line":56,"range":{"start_line":56,"start_character":7,"end_line":56,"end_character":69},"updated":"2017-12-19 01:26:34.000000000","message":"only rdma is supported at the moment","commit_id":"f948a4aa911a3b0122c80411bf05f39be412b5af"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"74363b0d1f732758c25d59140097d575f0d0bc4d","unresolved":false,"context_lines":[{"line_number":118,"context_line":"             \u0027ns_id\u0027: nvmet_ns_id})"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":121,"context_line":"        pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def create_export(self, context, volume, volume_path):"},{"line_number":124,"context_line":"        \"\"\"Creates export data for a logical volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"bf8cb3f7_432c9401","line":121,"range":{"start_line":121,"start_character":8,"end_line":121,"end_character":12},"updated":"2017-12-27 18:52:00.000000000","message":"Shouldn\u0027t this require a \"delete \u003cnqn\u003e\" command here?","commit_id":"2a24d00eeaa44717884cb4499289dd9fd83f09df"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"2060231724d00e3eedd2672d451ffb5a2563f906","unresolved":false,"context_lines":[{"line_number":118,"context_line":"             \u0027ns_id\u0027: nvmet_ns_id})"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":121,"context_line":"        pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def create_export(self, context, volume, volume_path):"},{"line_number":124,"context_line":"        \"\"\"Creates export data for a logical volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"9f91af0f_955f7040","line":121,"range":{"start_line":121,"start_character":8,"end_line":121,"end_character":12},"in_reply_to":"bf8cb3f7_432c9401","updated":"2018-01-02 10:48:05.000000000","message":"The \"terminate_connection\" method is not implemented in cinder target class \"NVMeOF\" because in our case we need to terminate the connection from the initiator side \"os-brick\", which we do according to iSCSI implementation and the following cinder doc:\nhttps://docs.openstack.org/cinder/pike/contributor/attach_detach_conventions.html\n\n\nthe acting terminate connection function is implemented here :\nhttps://github.com/openstack/os-brick/blob/master/os_brick/initiator/connectors/nvme.py#L137\n\niSCSI implementation is the same as ours:\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/targets/iscsi.py#L290","commit_id":"2a24d00eeaa44717884cb4499289dd9fd83f09df"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"74363b0d1f732758c25d59140097d575f0d0bc4d","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                missing\u003d\u0027initiator\u0027)"},{"line_number":149,"context_line":"        return True"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @abc.abstractmethod"},{"line_number":152,"context_line":"    def create_nvmeof_target(self,"},{"line_number":153,"context_line":"                             volume_id,"},{"line_number":154,"context_line":"                             subsystem_name,"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf8cb3f7_c33f4423","line":151,"range":{"start_line":151,"start_character":4,"end_line":151,"end_character":23},"updated":"2017-12-27 18:52:00.000000000","message":"Not clear how/why you\u0027re using abc here (as well as the other nvme speicfic methods)","commit_id":"2a24d00eeaa44717884cb4499289dd9fd83f09df"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"002c9dc44490aa978f67fc8800a0c80b4ebe339a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                missing\u003d\u0027initiator\u0027)"},{"line_number":149,"context_line":"        return True"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @abc.abstractmethod"},{"line_number":152,"context_line":"    def create_nvmeof_target(self,"},{"line_number":153,"context_line":"                             volume_id,"},{"line_number":154,"context_line":"                             subsystem_name,"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf8cb3f7_0ecd53b7","line":151,"range":{"start_line":151,"start_character":4,"end_line":151,"end_character":23},"in_reply_to":"bf8cb3f7_c33f4423","updated":"2017-12-27 20:06:36.000000000","message":"Hi John,\nThis patch is the abstract class like in iscsi\nThe nvmet target implementation is in  https://review.openstack.org/#/c/505556/.\nIn the future we can create other target such as spdk.","commit_id":"2a24d00eeaa44717884cb4499289dd9fd83f09df"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"74363b0d1f732758c25d59140097d575f0d0bc4d","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                             nvmet_port_id,"},{"line_number":159,"context_line":"                             ns_id,"},{"line_number":160,"context_line":"                             volume_path):"},{"line_number":161,"context_line":"        pass"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    @abc.abstractmethod"},{"line_number":164,"context_line":"    def delete_nvmeof_target(self, target_name):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf8cb3f7_4315749b","line":161,"range":{"start_line":161,"start_character":8,"end_line":161,"end_character":12},"updated":"2017-12-27 18:52:00.000000000","message":"umm... didn\u0027t you forget something?  Like create with an nqn?","commit_id":"2a24d00eeaa44717884cb4499289dd9fd83f09df"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"74363b0d1f732758c25d59140097d575f0d0bc4d","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    @abc.abstractmethod"},{"line_number":164,"context_line":"    def delete_nvmeof_target(self, target_name):"},{"line_number":165,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf8cb3f7_6318b8d2","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":12},"updated":"2017-12-27 18:52:00.000000000","message":"?","commit_id":"2a24d00eeaa44717884cb4499289dd9fd83f09df"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"72e1b3b1d9788a7c788a89b7a3f4949afc1e5441","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        location \u003d volume[\u0027provider_location\u0027]"},{"line_number":95,"context_line":"        target_portal \u003d location.split(\u0027 \u0027)[0].split(\u0027:\u0027)[0]"},{"line_number":96,"context_line":"        target_port \u003d location.split(\u0027 \u0027)[0].split(\u0027:\u0027)[1]"},{"line_number":97,"context_line":"        nvme_transport_type \u003d location.split(\u0027 \u0027)[1]"},{"line_number":98,"context_line":"        nqn \u003d location.split(\u0027 \u0027)[2]"},{"line_number":99,"context_line":"        nvmet_ns_id \u003d location.split(\u0027 \u0027)[3]"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_2a709472","line":96,"updated":"2018-01-11 03:22:47.000000000","message":"style comment:\n\n[target_portal, target_port] \u003d location.split(\u0027 \u0027)[0].split(\u0027:\u0027)[:2]","commit_id":"513451c59395aebd1aed6da511d0b8f6d4576c9f"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b6cca6c97dac41d548c71a8d75de15653b3b438d","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        location \u003d volume[\u0027provider_location\u0027]"},{"line_number":95,"context_line":"        target_portal \u003d location.split(\u0027 \u0027)[0].split(\u0027:\u0027)[0]"},{"line_number":96,"context_line":"        target_port \u003d location.split(\u0027 \u0027)[0].split(\u0027:\u0027)[1]"},{"line_number":97,"context_line":"        nvme_transport_type \u003d location.split(\u0027 \u0027)[1]"},{"line_number":98,"context_line":"        nqn \u003d location.split(\u0027 \u0027)[2]"},{"line_number":99,"context_line":"        nvmet_ns_id \u003d location.split(\u0027 \u0027)[3]"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_63b949ca","line":96,"in_reply_to":"7f96bb07_2a709472","updated":"2018-01-17 11:11:47.000000000","message":"Done","commit_id":"513451c59395aebd1aed6da511d0b8f6d4576c9f"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"72e1b3b1d9788a7c788a89b7a3f4949afc1e5441","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        target_port \u003d location.split(\u0027 \u0027)[0].split(\u0027:\u0027)[1]"},{"line_number":97,"context_line":"        nvme_transport_type \u003d location.split(\u0027 \u0027)[1]"},{"line_number":98,"context_line":"        nqn \u003d location.split(\u0027 \u0027)[2]"},{"line_number":99,"context_line":"        nvmet_ns_id \u003d location.split(\u0027 \u0027)[3]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        return {"},{"line_number":102,"context_line":"            \u0027target_portal\u0027: target_portal,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_ca6c909e","line":99,"updated":"2018-01-11 03:22:47.000000000","message":"ditto","commit_id":"513451c59395aebd1aed6da511d0b8f6d4576c9f"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b6cca6c97dac41d548c71a8d75de15653b3b438d","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        target_port \u003d location.split(\u0027 \u0027)[0].split(\u0027:\u0027)[1]"},{"line_number":97,"context_line":"        nvme_transport_type \u003d location.split(\u0027 \u0027)[1]"},{"line_number":98,"context_line":"        nqn \u003d location.split(\u0027 \u0027)[2]"},{"line_number":99,"context_line":"        nvmet_ns_id \u003d location.split(\u0027 \u0027)[3]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        return {"},{"line_number":102,"context_line":"            \u0027target_portal\u0027: target_portal,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_83bed5b1","line":99,"in_reply_to":"7f96bb07_ca6c909e","updated":"2018-01-17 11:11:47.000000000","message":"Done","commit_id":"513451c59395aebd1aed6da511d0b8f6d4576c9f"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"72e1b3b1d9788a7c788a89b7a3f4949afc1e5441","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def get_nvmeof_location(self, nqn, target_ip, target_port,"},{"line_number":110,"context_line":"                            nvme_transport_type, nvmet_ns_id):"},{"line_number":111,"context_line":"        \"\"\"Serialize driver data into single line string.\"\"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        return \"%(ip)s:%(port)s %(transport)s %(nqn)s %(ns_id)s\" % ("},{"line_number":114,"context_line":"            {\u0027ip\u0027: target_ip,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_8a0448c8","line":111,"updated":"2018-01-11 03:22:47.000000000","message":"Serializes","commit_id":"513451c59395aebd1aed6da511d0b8f6d4576c9f"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b6cca6c97dac41d548c71a8d75de15653b3b438d","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def get_nvmeof_location(self, nqn, target_ip, target_port,"},{"line_number":110,"context_line":"                            nvme_transport_type, nvmet_ns_id):"},{"line_number":111,"context_line":"        \"\"\"Serialize driver data into single line string.\"\"\""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        return \"%(ip)s:%(port)s %(transport)s %(nqn)s %(ns_id)s\" % ("},{"line_number":114,"context_line":"            {\u0027ip\u0027: target_ip,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_83e335d9","line":111,"in_reply_to":"7f96bb07_8a0448c8","updated":"2018-01-17 11:11:47.000000000","message":"Done","commit_id":"513451c59395aebd1aed6da511d0b8f6d4576c9f"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"bafb7d53d9a548751b659e2986d57af48e985bea","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"nvmet_opts \u003d ["},{"line_number":25,"context_line":"    cfg.PortOpt(\u0027nvmet_port_id\u0027,"},{"line_number":26,"context_line":"                default\u003d1,"},{"line_number":27,"context_line":"                help\u003d\u0027The port that the NVMe target is listening on.\u0027),"},{"line_number":28,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa0c359_934f4733","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":32},"updated":"2018-02-19 22:00:07.000000000","message":"I\u0027m not sure if you want to use a conf option like this; or if you should make this a driver option and pass it in as config during init.  One of the reasons we ended up doing that was to support multi-backend and driver specific settings for a target driver.\n\niscsi_target_flags is an example of what I\u0027m thinking about here.","commit_id":"4d4223a9b204122a265e44af90cc5a8cdb2e4032"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"9eb5c3859913c27b550f4046471935422c4661d8","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"nvmet_opts \u003d ["},{"line_number":25,"context_line":"    cfg.PortOpt(\u0027nvmet_port_id\u0027,"},{"line_number":26,"context_line":"                default\u003d1,"},{"line_number":27,"context_line":"                help\u003d\u0027The port that the NVMe target is listening on.\u0027),"},{"line_number":28,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa0c359_1c9b0617","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":32},"in_reply_to":"3fa0c359_4a07c11d","updated":"2018-02-22 10:43:33.000000000","message":"Done","commit_id":"4d4223a9b204122a265e44af90cc5a8cdb2e4032"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"9eb5c3859913c27b550f4046471935422c4661d8","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"nvmet_opts \u003d ["},{"line_number":25,"context_line":"    cfg.PortOpt(\u0027nvmet_port_id\u0027,"},{"line_number":26,"context_line":"                default\u003d1,"},{"line_number":27,"context_line":"                help\u003d\u0027The port that the NVMe target is listening on.\u0027),"},{"line_number":28,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa0c359_7c9a4a14","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":32},"in_reply_to":"3fa0c359_934f4733","updated":"2018-02-22 10:43:33.000000000","message":"Done","commit_id":"4d4223a9b204122a265e44af90cc5a8cdb2e4032"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"78995978afcc7043e5efa8ecee7eef6acbf033fe","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"nvmet_opts \u003d ["},{"line_number":25,"context_line":"    cfg.PortOpt(\u0027nvmet_port_id\u0027,"},{"line_number":26,"context_line":"                default\u003d1,"},{"line_number":27,"context_line":"                help\u003d\u0027The port that the NVMe target is listening on.\u0027),"},{"line_number":28,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa0c359_4a07c11d","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":32},"in_reply_to":"3fa0c359_934f4733","updated":"2018-02-20 04:00:52.000000000","message":"Thanks John, this is make sense we will move the config to the driver same as in iscsi_target_flags.","commit_id":"4d4223a9b204122a265e44af90cc5a8cdb2e4032"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f6397724cf566d49a17bb20e955c8090100e9b9e","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def validate_connector(self, connector):"},{"line_number":125,"context_line":"        if \u0027initiator\u0027 not in connector:"},{"line_number":126,"context_line":"            err_msg \u003d (_(\u0027The volume driver requires the NVMe initiator \u0027"},{"line_number":127,"context_line":"                         \u0027name in the connector.\u0027))"},{"line_number":128,"context_line":"            LOG.error(err_msg)"},{"line_number":129,"context_line":"            raise exception.InvalidConnectorException("}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_d1e7d6ab","line":126,"range":{"start_line":126,"start_character":23,"end_line":126,"end_character":25},"updated":"2018-03-13 14:11:46.000000000","message":"This is only used in LOG.error so it should not have _() for translation. Just move this string directly into the LOG.error call.","commit_id":"b95e81122658f4c7ad2c6ec725036a2b3aabecb1"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"2f64396c96fd4d0da96b3fe5c122d0b338006c63","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def validate_connector(self, connector):"},{"line_number":125,"context_line":"        if \u0027initiator\u0027 not in connector:"},{"line_number":126,"context_line":"            err_msg \u003d (_(\u0027The volume driver requires the NVMe initiator \u0027"},{"line_number":127,"context_line":"                         \u0027name in the connector.\u0027))"},{"line_number":128,"context_line":"            LOG.error(err_msg)"},{"line_number":129,"context_line":"            raise exception.InvalidConnectorException("}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_200cb939","line":126,"range":{"start_line":126,"start_character":23,"end_line":126,"end_character":25},"in_reply_to":"df7087c5_d1e7d6ab","updated":"2018-03-13 15:54:23.000000000","message":"Done","commit_id":"b95e81122658f4c7ad2c6ec725036a2b3aabecb1"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"493a2eb9aa69d9b40b5e347f2ad2ec5d815ce3df","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        _get_connection_properties"},{"line_number":57,"context_line":"        Example return value::"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            {"},{"line_number":60,"context_line":"                \u0027driver_volume_type\u0027: \u0027nvmeof\u0027"},{"line_number":61,"context_line":"                \u0027data\u0027: {"},{"line_number":62,"context_line":"                    \u0027target_portal\u0027: \u00271.1.1.1\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"bf659307_f61a836d","line":59,"updated":"2018-04-05 19:22:58.000000000","message":"don\u0027t we have to encase this in a code block to prevent the docs from rendering this like pooh?\n\n.. code-block:: json","commit_id":"93b8272e452f9ce7a535c9f2d4758c58f8004bf2"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"e41aa96efc366e1b1f95fe289e96416a2cea2ce0","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        _get_connection_properties"},{"line_number":57,"context_line":"        Example return value::"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            {"},{"line_number":60,"context_line":"                \u0027driver_volume_type\u0027: \u0027nvmeof\u0027"},{"line_number":61,"context_line":"                \u0027data\u0027: {"},{"line_number":62,"context_line":"                    \u0027target_portal\u0027: \u00271.1.1.1\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f6a8fd7_7c240c0e","line":59,"in_reply_to":"bf659307_f61a836d","updated":"2018-04-17 12:38:02.000000000","message":"Done","commit_id":"93b8272e452f9ce7a535c9f2d4758c58f8004bf2"}]}
