)]}'
{"cinder/tests/unit/volume/drivers/test_spdk.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"51e28ae0f10494ce07ad139593707aadaae14fd2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder import utils"},{"line_number":22,"context_line":"from cinder.volume import configuration as conf"},{"line_number":23,"context_line":"from cinder.volume.drivers import spdk as spdk_driver"},{"line_number":24,"context_line":"from os_brick import initiator"},{"line_number":25,"context_line":"from os_brick.initiator import connector"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"BDEVS \u003d [{"},{"line_number":28,"context_line":"    \"num_blocks\": 4096000,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_01014604","line":25,"range":{"start_line":24,"start_character":0,"end_line":25,"end_character":40},"updated":"2018-10-02 21:46:46.000000000","message":"Move up into a separate third party import group above the local cinder imports.","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2fe3b8fad6ceccd293368a58be6fb97678e38fc3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from cinder import utils"},{"line_number":22,"context_line":"from cinder.volume import configuration as conf"},{"line_number":23,"context_line":"from cinder.volume.drivers import spdk as spdk_driver"},{"line_number":24,"context_line":"from os_brick import initiator"},{"line_number":25,"context_line":"from os_brick.initiator import connector"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"BDEVS \u003d [{"},{"line_number":28,"context_line":"    \"num_blocks\": 4096000,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_e970730c","line":25,"range":{"start_line":24,"start_character":0,"end_line":25,"end_character":40},"in_reply_to":"3f79a3b5_01014604","updated":"2018-10-05 08:56:53.000000000","message":"Done","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0dd253753c999e84a03341e1b527961ee91b433d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"from os_brick import initiator"},{"line_number":17,"context_line":"from os_brick.initiator import connector"},{"line_number":18,"context_line":"from oslo_utils import units"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3f79a3b5_4f0115b5","line":16,"updated":"2018-10-10 01:47:19.000000000","message":"Separate group. Meaning a space between this group of third party imports and the imports from python.","commit_id":"f3c478c6c6a2819cb7e01fbd0ef5b82455b69dd8"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2d0f1c18ff0e4dba2773f455250c4ade245c8265","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"from os_brick import initiator"},{"line_number":17,"context_line":"from os_brick.initiator import connector"},{"line_number":18,"context_line":"from oslo_utils import units"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3f79a3b5_3d196c86","line":16,"in_reply_to":"3f79a3b5_4f0115b5","updated":"2018-10-10 07:09:57.000000000","message":"Done","commit_id":"f3c478c6c6a2819cb7e01fbd0ef5b82455b69dd8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                               self.jsonrpcclient.call):"},{"line_number":604,"context_line":"            db_volume \u003d fake_volume.fake_db_volume()"},{"line_number":605,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":606,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":607,"context_line":"                                                       db_volume)"},{"line_number":608,"context_line":"            volume_get.return_value \u003d db_volume"},{"line_number":609,"context_line":"            self.driver.create_volume(db_volume)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_32c6bc17","line":606,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                               self.jsonrpcclient.call):"},{"line_number":604,"context_line":"            db_volume \u003d fake_volume.fake_db_volume()"},{"line_number":605,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":606,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":607,"context_line":"                                                       db_volume)"},{"line_number":608,"context_line":"            volume_get.return_value \u003d db_volume"},{"line_number":609,"context_line":"            self.driver.create_volume(db_volume)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_d2cae817","line":606,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                      % self.driver.target_driver._get_first_free_node()"},{"line_number":624,"context_line":"            db_volume[\u0027provider_id\u0027] \u003d nqn"},{"line_number":625,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":626,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":627,"context_line":"                                                       db_volume)"},{"line_number":628,"context_line":"            volume_get.return_value \u003d db_volume"},{"line_number":629,"context_line":"            start_bdevs_len \u003d len(self.driver._rpc_call(\u0027get_bdevs\u0027))"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_92d470be","line":626,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                      % self.driver.target_driver._get_first_free_node()"},{"line_number":624,"context_line":"            db_volume[\u0027provider_id\u0027] \u003d nqn"},{"line_number":625,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":626,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":627,"context_line":"                                                       db_volume)"},{"line_number":628,"context_line":"            volume_get.return_value \u003d db_volume"},{"line_number":629,"context_line":"            start_bdevs_len \u003d len(self.driver._rpc_call(\u0027get_bdevs\u0027))"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_f2cfe425","line":626,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            db_volume \u003d fake_volume.fake_db_volume()"},{"line_number":668,"context_line":"            db_volume[\u0027name\u0027] \u003d \"lvs_test/lvol0\""},{"line_number":669,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":670,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":671,"context_line":"                                                       db_volume)"},{"line_number":672,"context_line":"            volume_get.return_value \u003d db_volume"},{"line_number":673,"context_line":"            snapshot \u003d {}"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_52ded8db","line":670,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            db_volume \u003d fake_volume.fake_db_volume()"},{"line_number":668,"context_line":"            db_volume[\u0027name\u0027] \u003d \"lvs_test/lvol0\""},{"line_number":669,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":670,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":671,"context_line":"                                                       db_volume)"},{"line_number":672,"context_line":"            volume_get.return_value \u003d db_volume"},{"line_number":673,"context_line":"            snapshot \u003d {}"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_b2d16ccd","line":670,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":701,"context_line":"            db_volume[\u0027provider_location\u0027] \u003d \"127.0.0.1:3262 RDMA \" \\"},{"line_number":702,"context_line":"                                             \"2016-06.io.spdk:cnode2\""},{"line_number":703,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":704,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":705,"context_line":"                                                       db_volume)"},{"line_number":706,"context_line":"            volume_get.return_value \u003d db_volume"},{"line_number":707,"context_line":"            with mock.patch.object(self.driver.target_driver, \"_rpc_call\","}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_12eaa076","line":704,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":701,"context_line":"            db_volume[\u0027provider_location\u0027] \u003d \"127.0.0.1:3262 RDMA \" \\"},{"line_number":702,"context_line":"                                             \"2016-06.io.spdk:cnode2\""},{"line_number":703,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":704,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":705,"context_line":"                                                       db_volume)"},{"line_number":706,"context_line":"            volume_get.return_value \u003d db_volume"},{"line_number":707,"context_line":"            with mock.patch.object(self.driver.target_driver, \"_rpc_call\","}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_72dbd4e9","line":704,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":716,"context_line":"            db_volume[\u0027provider_location\u0027] \u003d \"127.0.0.1:3262 RDMA \" \\"},{"line_number":717,"context_line":"                                             \"2016-06.io.spdk:cnode2\""},{"line_number":718,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":719,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":720,"context_line":"                                                       db_volume)"},{"line_number":721,"context_line":"            volume_get.return_value \u003d db_volume"},{"line_number":722,"context_line":"            with mock.patch.object(self.driver.target_driver, \"_rpc_call\","}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_32ef9c87","line":719,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":716,"context_line":"            db_volume[\u0027provider_location\u0027] \u003d \"127.0.0.1:3262 RDMA \" \\"},{"line_number":717,"context_line":"                                             \"2016-06.io.spdk:cnode2\""},{"line_number":718,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":719,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":720,"context_line":"                                                       db_volume)"},{"line_number":721,"context_line":"            volume_get.return_value \u003d db_volume"},{"line_number":722,"context_line":"            with mock.patch.object(self.driver.target_driver, \"_rpc_call\","}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_d2e3c89f","line":719,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":744,"context_line":"            db_volume[\u0027provider_location\u0027] \u003d \"192.168.0.1:4420 rdma \" \\"},{"line_number":745,"context_line":"                                             \"2014-08.io.spdk:cnode2\""},{"line_number":746,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":747,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":748,"context_line":"                                                       db_volume)"},{"line_number":749,"context_line":"            with mock.patch.object(self.driver.target_driver, \"_rpc_call\","},{"line_number":750,"context_line":"                                   self.jsonrpcclient.call):"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_92fd503e","line":747,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":744,"context_line":"            db_volume[\u0027provider_location\u0027] \u003d \"192.168.0.1:4420 rdma \" \\"},{"line_number":745,"context_line":"                                             \"2014-08.io.spdk:cnode2\""},{"line_number":746,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":747,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":748,"context_line":"                                                       db_volume)"},{"line_number":749,"context_line":"            with mock.patch.object(self.driver.target_driver, \"_rpc_call\","},{"line_number":750,"context_line":"                                   self.jsonrpcclient.call):"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_f2e8447c","line":747,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":771,"context_line":"            db_volume[\u0027provider_location\u0027] \u003d \"127.0.0.1:4420 rdma \" \\"},{"line_number":772,"context_line":"                                             \"2016-06.io.spdk:cnode2\""},{"line_number":773,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":774,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":775,"context_line":"                                                       db_volume)"},{"line_number":776,"context_line":"            with mock.patch.object(self.driver.target_driver, \"_rpc_call\","},{"line_number":777,"context_line":"                                   self.jsonrpcclient.call):"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_52f7b85b","line":774,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":771,"context_line":"            db_volume[\u0027provider_location\u0027] \u003d \"127.0.0.1:4420 rdma \" \\"},{"line_number":772,"context_line":"                                             \"2016-06.io.spdk:cnode2\""},{"line_number":773,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":774,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":775,"context_line":"                                                       db_volume)"},{"line_number":776,"context_line":"            with mock.patch.object(self.driver.target_driver, \"_rpc_call\","},{"line_number":777,"context_line":"                                   self.jsonrpcclient.call):"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_b2facc41","line":774,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":785,"context_line":"            db_volume[\u0027provider_location\u0027] \u003d \"127.0.0.1:3262 RDMA \" \\"},{"line_number":786,"context_line":"                                             \"2016-06.io.spdk:cnode2 1\""},{"line_number":787,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":788,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":789,"context_line":"                                                       db_volume)"},{"line_number":790,"context_line":"            target_connector \u003d \\"},{"line_number":791,"context_line":"                connector.InitiatorConnector.factory(initiator.NVME,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_128f00d4","line":788,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"change_message_id":"8d38b27c805f0a80054011faf374f6e9a4bb0c51","unresolved":false,"context_lines":[{"line_number":785,"context_line":"            db_volume[\u0027provider_location\u0027] \u003d \"127.0.0.1:3262 RDMA \" \\"},{"line_number":786,"context_line":"                                             \"2016-06.io.spdk:cnode2 1\""},{"line_number":787,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":788,"context_line":"            db_volume \u003d objects.Volume._from_db_object(ctxt, objects.Volume(),"},{"line_number":789,"context_line":"                                                       db_volume)"},{"line_number":790,"context_line":"            target_connector \u003d \\"},{"line_number":791,"context_line":"                connector.InitiatorConnector.factory(initiator.NVME,"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f79a3b5_72f43456","line":788,"updated":"2018-10-18 13:51:35.000000000","message":"E1101: \u001b[1;31mModule \u0027cinder.objects\u0027 has no \u0027Volume\u0027 member\u001b[0m (\u001b[1;31mno-member\u001b[0m)","commit_id":"74e9b1346f5935b4c879f71096ff6a6dd7b0ec50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"6eaa5a12b1edb7bf3455fdfa6ada9970d9b914f3","unresolved":false,"context_lines":[{"line_number":519,"context_line":"                               self.jsonrpcclient.call):"},{"line_number":520,"context_line":"            self.driver._update_volume_stats()"},{"line_number":521,"context_line":"            self.assertEqual(len(self.driver._stats[\u0027pools\u0027]), 1)"},{"line_number":522,"context_line":"            self.assertEqual(self.driver._stats[\u0027pools\u0027][0][\u0027pool_name\u0027],"},{"line_number":523,"context_line":"                             \"lvs_test\")"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    def test__get_spdk_volume_name(self):"}],"source_content_type":"text/x-python","patch_set":36,"id":"dfd5e7cf_bbafee92","line":522,"range":{"start_line":522,"start_character":17,"end_line":522,"end_character":28},"updated":"2019-01-08 16:27:22.000000000","message":"assertEqual argument order throughout should be (EXPECTED, ACTUAL), so most of these appear to be backwards.","commit_id":"8af95c97b67405cde4703edf67bf04996ab41b30"}],"cinder/volume/drivers/spdk.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b21674ed32c6903828d1e2c0c08eeaa2585e4ded","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import socket"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import context"},{"line_number":17,"context_line":"from cinder.db.sqlalchemy import api"},{"line_number":18,"context_line":"from cinder import exception"},{"line_number":19,"context_line":"from cinder.i18n import _"},{"line_number":20,"context_line":"from cinder.image import image_utils"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_22dd196d","line":17,"range":{"start_line":17,"start_character":32,"end_line":17,"end_character":36},"updated":"2018-07-23 17:07:03.000000000","message":"Remove (see below)","commit_id":"e9c5ca2c07e513369df3bbeaaaea70014a3533d7"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"94427c69ba14abe8d26754ddab328ff27cd5434c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import socket"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from cinder import context"},{"line_number":17,"context_line":"from cinder.db.sqlalchemy import api"},{"line_number":18,"context_line":"from cinder import exception"},{"line_number":19,"context_line":"from cinder.i18n import _"},{"line_number":20,"context_line":"from cinder.image import image_utils"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_87b98817","line":17,"range":{"start_line":17,"start_character":32,"end_line":17,"end_character":36},"in_reply_to":"5f7c97a3_22dd196d","updated":"2018-08-21 12:36:00.000000000","message":"Done","commit_id":"e9c5ca2c07e513369df3bbeaaaea70014a3533d7"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b21674ed32c6903828d1e2c0c08eeaa2585e4ded","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.sock.connect(\u0027/var/tmp/spdk.sock\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __del__(self):"},{"line_number":68,"context_line":"        self.sock.close()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _rpc_call(self, method, params\u003dNone):"},{"line_number":71,"context_line":"        req \u003d {}"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_82ec2d29","line":68,"updated":"2018-07-23 17:07:03.000000000","message":"This will fail in an ugly way if something in __init__ failed (like target_driver import).","commit_id":"e9c5ca2c07e513369df3bbeaaaea70014a3533d7"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"94427c69ba14abe8d26754ddab328ff27cd5434c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.sock.connect(\u0027/var/tmp/spdk.sock\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __del__(self):"},{"line_number":68,"context_line":"        self.sock.close()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _rpc_call(self, method, params\u003dNone):"},{"line_number":71,"context_line":"        req \u003d {}"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_27cbd4a4","line":68,"in_reply_to":"5f7c97a3_82ec2d29","updated":"2018-08-21 12:36:00.000000000","message":"Done","commit_id":"e9c5ca2c07e513369df3bbeaaaea70014a3533d7"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b21674ed32c6903828d1e2c0c08eeaa2585e4ded","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":250,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":251,"context_line":"        volume \u003d api.volume_get(self.ctxt, snapshot[\u0027volume_id\u0027])"},{"line_number":252,"context_line":"        spdk_name \u003d self._get_spdk_volume_name(volume.name)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        if spdk_name is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_02e01d27","line":251,"updated":"2018-07-23 17:07:03.000000000","message":"No need for db.api.volume_get here, just use snapshot.volume.","commit_id":"e9c5ca2c07e513369df3bbeaaaea70014a3533d7"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"94427c69ba14abe8d26754ddab328ff27cd5434c","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":250,"context_line":"        \"\"\"Creates a snapshot.\"\"\""},{"line_number":251,"context_line":"        volume \u003d api.volume_get(self.ctxt, snapshot[\u0027volume_id\u0027])"},{"line_number":252,"context_line":"        spdk_name \u003d self._get_spdk_volume_name(volume.name)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        if spdk_name is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_874e6837","line":251,"in_reply_to":"5f7c97a3_02e01d27","updated":"2018-08-21 12:36:00.000000000","message":"Done","commit_id":"e9c5ca2c07e513369df3bbeaaaea70014a3533d7"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bfc5d923870c5850068f86990bc9c96b38a887fc","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    CI_WIKI_NAME \u003d \"SPDK\""},{"line_number":39,"context_line":"    ONE_GIG \u003d 1024 * 1024 * 1024"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, vg_obj\u003dNone, *args, **kwargs):"},{"line_number":42,"context_line":"        # Parent sets db, host, _execute and base config"},{"line_number":43,"context_line":"        super(SPDKDriver, self).__init__(*args, **kwargs)"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_a0fd5eb2","line":41,"range":{"start_line":41,"start_character":23,"end_line":41,"end_character":34},"updated":"2018-08-21 14:50:42.000000000","message":"Don\u0027t need this arg","commit_id":"af5b9d06499155c8b3844b6cc7efcbad03725736"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"5437236c4d1bace80630c83eea50524ba0528b1a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    CI_WIKI_NAME \u003d \"SPDK\""},{"line_number":39,"context_line":"    ONE_GIG \u003d 1024 * 1024 * 1024"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, vg_obj\u003dNone, *args, **kwargs):"},{"line_number":42,"context_line":"        # Parent sets db, host, _execute and base config"},{"line_number":43,"context_line":"        super(SPDKDriver, self).__init__(*args, **kwargs)"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_0cba126d","line":41,"range":{"start_line":41,"start_character":23,"end_line":41,"end_character":34},"in_reply_to":"3f79a3b5_a0fd5eb2","updated":"2018-08-23 08:13:43.000000000","message":"Done","commit_id":"af5b9d06499155c8b3844b6cc7efcbad03725736"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"bfc5d923870c5850068f86990bc9c96b38a887fc","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.sock \u003d socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)"},{"line_number":63,"context_line":"        cmd \u003d [\u0027chmod\u0027, \u0027777\u0027, \u0027/var/tmp/spdk.sock\u0027]"},{"line_number":64,"context_line":"        utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":65,"context_line":"        self.sock.connect(\u0027/var/tmp/spdk.sock\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __del__(self):"},{"line_number":68,"context_line":"        if self.sock is not None:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_a016bef0","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":47},"updated":"2018-08-21 14:50:42.000000000","message":"This should be done in do_setup() instead of __init__","commit_id":"af5b9d06499155c8b3844b6cc7efcbad03725736"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"5437236c4d1bace80630c83eea50524ba0528b1a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.sock \u003d socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)"},{"line_number":63,"context_line":"        cmd \u003d [\u0027chmod\u0027, \u0027777\u0027, \u0027/var/tmp/spdk.sock\u0027]"},{"line_number":64,"context_line":"        utils.execute(*cmd, run_as_root\u003dTrue)"},{"line_number":65,"context_line":"        self.sock.connect(\u0027/var/tmp/spdk.sock\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __del__(self):"},{"line_number":68,"context_line":"        if self.sock is not None:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f79a3b5_acb2fe92","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":47},"in_reply_to":"3f79a3b5_a016bef0","updated":"2018-08-23 08:13:43.000000000","message":"Done","commit_id":"af5b9d06499155c8b3844b6cc7efcbad03725736"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"51e28ae0f10494ce07ad139593707aadaae14fd2","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from cinder import interface"},{"line_number":21,"context_line":"from cinder import utils"},{"line_number":22,"context_line":"from cinder.volume import driver"},{"line_number":23,"context_line":"from os_brick import initiator"},{"line_number":24,"context_line":"from os_brick.initiator import connector"},{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import importutils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_3ea1ff3a","line":26,"range":{"start_line":23,"start_character":0,"end_line":26,"end_character":29},"updated":"2018-10-02 21:46:46.000000000","message":"These along with requests should be in their own grouping after the json import for third party libraries.","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2fe3b8fad6ceccd293368a58be6fb97678e38fc3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from cinder import interface"},{"line_number":21,"context_line":"from cinder import utils"},{"line_number":22,"context_line":"from cinder.volume import driver"},{"line_number":23,"context_line":"from os_brick import initiator"},{"line_number":24,"context_line":"from os_brick.initiator import connector"},{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import importutils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_4975e732","line":26,"range":{"start_line":23,"start_character":0,"end_line":26,"end_character":29},"in_reply_to":"3f79a3b5_3ea1ff3a","updated":"2018-10-05 08:56:53.000000000","message":"Done","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"58e7a1bbd50b9bb70269d72f8ae6b63f48974118","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":38,"context_line":"    CI_WIKI_NAME \u003d \"SPDK\""},{"line_number":39,"context_line":"    ONE_GIG \u003d 1024 * 1024 * 1024"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":42,"context_line":"        # Parent sets db, host, _execute and base config"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_fed19857","line":39,"updated":"2018-09-28 11:09:51.000000000","message":"Please, use oslo_utils.units [1]\n\n[1]  https://github.com/openstack/oslo.utils/blob/master/oslo_utils/units.py#L25","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2fe3b8fad6ceccd293368a58be6fb97678e38fc3","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":38,"context_line":"    CI_WIKI_NAME \u003d \"SPDK\""},{"line_number":39,"context_line":"    ONE_GIG \u003d 1024 * 1024 * 1024"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":42,"context_line":"        # Parent sets db, host, _execute and base config"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_e9a633ad","line":39,"in_reply_to":"3f79a3b5_fed19857","updated":"2018-10-05 08:56:53.000000000","message":"Done","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"51e28ae0f10494ce07ad139593707aadaae14fd2","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.lvs \u003d []"},{"line_number":46,"context_line":"        self.ctxt \u003d context.get_admin_context()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        target_driver \u003d \\"},{"line_number":49,"context_line":"            self.target_mapping[self.configuration.safe_get(\u0027target_helper\u0027)]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        LOG.debug(\u0027SPDK attempting to initialize LVM driver with the \u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_9e67f324","line":48,"range":{"start_line":48,"start_character":24,"end_line":48,"end_character":25},"updated":"2018-10-02 21:46:46.000000000","message":"Please avoid using \\ to span multiple lines.","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2fe3b8fad6ceccd293368a58be6fb97678e38fc3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.lvs \u003d []"},{"line_number":46,"context_line":"        self.ctxt \u003d context.get_admin_context()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        target_driver \u003d \\"},{"line_number":49,"context_line":"            self.target_mapping[self.configuration.safe_get(\u0027target_helper\u0027)]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        LOG.debug(\u0027SPDK attempting to initialize LVM driver with the \u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_09a4cfa2","line":48,"range":{"start_line":48,"start_character":24,"end_line":48,"end_character":25},"in_reply_to":"3f79a3b5_9e67f324","updated":"2018-10-05 08:56:53.000000000","message":"Done","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"58e7a1bbd50b9bb70269d72f8ae6b63f48974118","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                if name in alias:"},{"line_number":129,"context_line":"                    return bdev[\u0027name\u0027]"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        return None"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def _get_spdk_lvs_uuid(self, spdk_name):"},{"line_number":134,"context_line":"        output \u003d self._rpc_call(\u0027get_bdevs\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_de337cc3","line":131,"updated":"2018-09-28 11:09:51.000000000","message":"Please, remove \u0027return None\u0027 from the end of functions.  The default value is None, so we don\u0027t need to return it","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2fe3b8fad6ceccd293368a58be6fb97678e38fc3","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                if name in alias:"},{"line_number":129,"context_line":"                    return bdev[\u0027name\u0027]"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        return None"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def _get_spdk_lvs_uuid(self, spdk_name):"},{"line_number":134,"context_line":"        output \u003d self._rpc_call(\u0027get_bdevs\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_a9b27be7","line":131,"in_reply_to":"3f79a3b5_de337cc3","updated":"2018-10-05 08:56:53.000000000","message":"Done","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"58e7a1bbd50b9bb70269d72f8ae6b63f48974118","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def do_setup(self, context):"},{"line_number":191,"context_line":"        try:"},{"line_number":192,"context_line":"            payload \u003d {\u0027method\u0027: \u0027get_bdevs\u0027}"},{"line_number":193,"context_line":"            self.url \u003d \u0027http://\u0027 + \\"},{"line_number":194,"context_line":"                self.configuration.spdk_rpc_ip + \\"},{"line_number":195,"context_line":"                \u0027:\u0027 + \\"},{"line_number":196,"context_line":"                str(self.configuration.spdk_rpc_port) + \\"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_5e476c1f","line":193,"range":{"start_line":193,"start_character":24,"end_line":193,"end_character":28},"updated":"2018-09-28 11:09:51.000000000","message":"Does it support https?","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2fe3b8fad6ceccd293368a58be6fb97678e38fc3","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def do_setup(self, context):"},{"line_number":191,"context_line":"        try:"},{"line_number":192,"context_line":"            payload \u003d {\u0027method\u0027: \u0027get_bdevs\u0027}"},{"line_number":193,"context_line":"            self.url \u003d \u0027http://\u0027 + \\"},{"line_number":194,"context_line":"                self.configuration.spdk_rpc_ip + \\"},{"line_number":195,"context_line":"                \u0027:\u0027 + \\"},{"line_number":196,"context_line":"                str(self.configuration.spdk_rpc_port) + \\"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_89e69fe7","line":193,"range":{"start_line":193,"start_character":24,"end_line":193,"end_character":28},"in_reply_to":"3f79a3b5_5e476c1f","updated":"2018-10-05 08:56:53.000000000","message":"Yes, but it requires certificates to be installed on client and server side.","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"51e28ae0f10494ce07ad139593707aadaae14fd2","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            payload \u003d {\u0027method\u0027: \u0027get_bdevs\u0027}"},{"line_number":193,"context_line":"            self.url \u003d \u0027http://\u0027 + \\"},{"line_number":194,"context_line":"                self.configuration.spdk_rpc_ip + \\"},{"line_number":195,"context_line":"                \u0027:\u0027 + \\"},{"line_number":196,"context_line":"                str(self.configuration.spdk_rpc_port) + \\"},{"line_number":197,"context_line":"                \u0027/\u0027"},{"line_number":198,"context_line":"            requests.post(self.url,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_7e1e9774","line":195,"range":{"start_line":195,"start_character":20,"end_line":195,"end_character":21},"updated":"2018-10-02 21:46:46.000000000","message":"Performing string formatting would be preferable to concatenating.\n\nself.url \u003d (\u0027http://%(ip)s:%(port)s/\u0027 %\n            {\u0027ip\u0027: self.configuration.spdk_rpc_ip,\n             \u0027port\u0027: self.configuration.spdk_rpc_port})","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2fe3b8fad6ceccd293368a58be6fb97678e38fc3","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            payload \u003d {\u0027method\u0027: \u0027get_bdevs\u0027}"},{"line_number":193,"context_line":"            self.url \u003d \u0027http://\u0027 + \\"},{"line_number":194,"context_line":"                self.configuration.spdk_rpc_ip + \\"},{"line_number":195,"context_line":"                \u0027:\u0027 + \\"},{"line_number":196,"context_line":"                str(self.configuration.spdk_rpc_port) + \\"},{"line_number":197,"context_line":"                \u0027/\u0027"},{"line_number":198,"context_line":"            requests.post(self.url,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3f79a3b5_e91b93c8","line":195,"range":{"start_line":195,"start_character":20,"end_line":195,"end_character":21},"in_reply_to":"3f79a3b5_7e1e9774","updated":"2018-10-05 08:56:53.000000000","message":"Done","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0dd253753c999e84a03341e1b527961ee91b433d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import json"},{"line_number":14,"context_line":"from os_brick import initiator"},{"line_number":15,"context_line":"from os_brick.initiator import connector"},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from oslo_utils import importutils"}],"source_content_type":"text/x-python","patch_set":23,"id":"3f79a3b5_0f0b1dd5","line":14,"updated":"2018-10-10 01:47:19.000000000","message":"Move os_brick and oslo imports to third party import group.","commit_id":"f3c478c6c6a2819cb7e01fbd0ef5b82455b69dd8"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2d0f1c18ff0e4dba2773f455250c4ade245c8265","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import json"},{"line_number":14,"context_line":"from os_brick import initiator"},{"line_number":15,"context_line":"from os_brick.initiator import connector"},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from oslo_utils import importutils"}],"source_content_type":"text/x-python","patch_set":23,"id":"3f79a3b5_1d16f059","line":14,"in_reply_to":"3f79a3b5_0f0b1dd5","updated":"2018-10-10 07:09:57.000000000","message":"Done","commit_id":"f3c478c6c6a2819cb7e01fbd0ef5b82455b69dd8"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bf4e756ad8a943076831fb3e23c96115d18543fe","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import json"},{"line_number":14,"context_line":"import requests"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from os_brick import initiator"},{"line_number":17,"context_line":"from os_brick.initiator import connector"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_61ead6a0","line":14,"updated":"2018-10-10 14:20:05.000000000","message":"requests is a third party import.","commit_id":"08517b537892d704a2b27c00657a455de2af55db"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"4966f33a7bd7b896b7469a500b2d31b7a2f025e1","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import json"},{"line_number":14,"context_line":"import requests"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from os_brick import initiator"},{"line_number":17,"context_line":"from os_brick.initiator import connector"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_90cac143","line":14,"in_reply_to":"3f79a3b5_61ead6a0","updated":"2018-10-11 14:55:00.000000000","message":"Done","commit_id":"08517b537892d704a2b27c00657a455de2af55db"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bf4e756ad8a943076831fb3e23c96115d18543fe","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        else:"},{"line_number":154,"context_line":"            LOG.debug(\u0027Could not find volume %s using SPDK driver\u0027, name)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def _create_volume(self, volume, snapshot\u003d\u0027\u0027):"},{"line_number":157,"context_line":"        output \u003d self._rpc_call(\u0027get_lvol_stores\u0027)"},{"line_number":158,"context_line":"        for lvs in output:"},{"line_number":159,"context_line":"            free_size \u003d (lvs[\u0027free_clusters\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_e1b6e689","line":156,"range":{"start_line":156,"start_character":46,"end_line":156,"end_character":48},"updated":"2018-10-10 14:20:05.000000000","message":"None seems like a better default.","commit_id":"08517b537892d704a2b27c00657a455de2af55db"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"4966f33a7bd7b896b7469a500b2d31b7a2f025e1","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        else:"},{"line_number":154,"context_line":"            LOG.debug(\u0027Could not find volume %s using SPDK driver\u0027, name)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def _create_volume(self, volume, snapshot\u003d\u0027\u0027):"},{"line_number":157,"context_line":"        output \u003d self._rpc_call(\u0027get_lvol_stores\u0027)"},{"line_number":158,"context_line":"        for lvs in output:"},{"line_number":159,"context_line":"            free_size \u003d (lvs[\u0027free_clusters\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_30d3ad04","line":156,"range":{"start_line":156,"start_character":46,"end_line":156,"end_character":48},"in_reply_to":"3f79a3b5_e1b6e689","updated":"2018-10-11 14:55:00.000000000","message":"Done","commit_id":"08517b537892d704a2b27c00657a455de2af55db"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bf4e756ad8a943076831fb3e23c96115d18543fe","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        output \u003d self._rpc_call(\u0027get_lvol_stores\u0027)"},{"line_number":158,"context_line":"        for lvs in output:"},{"line_number":159,"context_line":"            free_size \u003d (lvs[\u0027free_clusters\u0027]"},{"line_number":160,"context_line":"                         * lvs[\u0027cluster_size\u0027])"},{"line_number":161,"context_line":"            if free_size / units.Gi \u003e\u003d volume.size:"},{"line_number":162,"context_line":"                if snapshot \u003d\u003d \u0027\u0027:"},{"line_number":163,"context_line":"                    params \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_618976c5","line":160,"updated":"2018-10-10 14:20:05.000000000","message":"You have a lot of things broken into multiple lines that don\u0027t need to be. This should all fit on one line and would be more readable that way.","commit_id":"08517b537892d704a2b27c00657a455de2af55db"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"4966f33a7bd7b896b7469a500b2d31b7a2f025e1","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        output \u003d self._rpc_call(\u0027get_lvol_stores\u0027)"},{"line_number":158,"context_line":"        for lvs in output:"},{"line_number":159,"context_line":"            free_size \u003d (lvs[\u0027free_clusters\u0027]"},{"line_number":160,"context_line":"                         * lvs[\u0027cluster_size\u0027])"},{"line_number":161,"context_line":"            if free_size / units.Gi \u003e\u003d volume.size:"},{"line_number":162,"context_line":"                if snapshot \u003d\u003d \u0027\u0027:"},{"line_number":163,"context_line":"                    params \u003d {"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_d059198d","line":160,"in_reply_to":"3f79a3b5_618976c5","updated":"2018-10-11 14:55:00.000000000","message":"Done","commit_id":"08517b537892d704a2b27c00657a455de2af55db"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bf4e756ad8a943076831fb3e23c96115d18543fe","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                        \u0027size\u0027: volume.size * units.Gi,"},{"line_number":166,"context_line":"                        \u0027uuid\u0027: lvs[\u0027uuid\u0027]}"},{"line_number":167,"context_line":"                    output2 \u003d self._rpc_call(\u0027construct_lvol_bdev\u0027, params)"},{"line_number":168,"context_line":"                else:"},{"line_number":169,"context_line":"                    params \u003d {"},{"line_number":170,"context_line":"                        \u0027clone_name\u0027: volume.name,"},{"line_number":171,"context_line":"                        \u0027snapshot_name\u0027: self._get_spdk_volume_name("}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_c1688af5","line":168,"updated":"2018-10-10 14:20:05.000000000","message":"I don\u0027t see any handling for the case where the new volume being requested is larger than the original snapshot. This needs to handle that scenario.","commit_id":"08517b537892d704a2b27c00657a455de2af55db"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"4966f33a7bd7b896b7469a500b2d31b7a2f025e1","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                        \u0027size\u0027: volume.size * units.Gi,"},{"line_number":166,"context_line":"                        \u0027uuid\u0027: lvs[\u0027uuid\u0027]}"},{"line_number":167,"context_line":"                    output2 \u003d self._rpc_call(\u0027construct_lvol_bdev\u0027, params)"},{"line_number":168,"context_line":"                else:"},{"line_number":169,"context_line":"                    params \u003d {"},{"line_number":170,"context_line":"                        \u0027clone_name\u0027: volume.name,"},{"line_number":171,"context_line":"                        \u0027snapshot_name\u0027: self._get_spdk_volume_name("}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_7faed1e4","line":168,"in_reply_to":"3f79a3b5_c1688af5","updated":"2018-10-11 14:55:00.000000000","message":"Done","commit_id":"08517b537892d704a2b27c00657a455de2af55db"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bf4e756ad8a943076831fb3e23c96115d18543fe","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":281,"context_line":"        \"\"\"Fetch the image from image_service and write it to the volume.\"\"\""},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        volume[\u0027provider_location\u0027] \u003d \\"},{"line_number":284,"context_line":"            self.create_export(context, volume, None)[\u0027provider_location\u0027]"},{"line_number":285,"context_line":"        connection_data \u003d self.initialize_connection(volume, None)[\u0027data\u0027]"},{"line_number":286,"context_line":"        target_connector \u003d \\"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_c1e5eaa5","line":283,"range":{"start_line":283,"start_character":38,"end_line":283,"end_character":39},"updated":"2018-10-10 14:20:05.000000000","message":"Please avoid using \\ to span lines.","commit_id":"08517b537892d704a2b27c00657a455de2af55db"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"4966f33a7bd7b896b7469a500b2d31b7a2f025e1","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    def copy_image_to_volume(self, context, volume, image_service, image_id):"},{"line_number":281,"context_line":"        \"\"\"Fetch the image from image_service and write it to the volume.\"\"\""},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        volume[\u0027provider_location\u0027] \u003d \\"},{"line_number":284,"context_line":"            self.create_export(context, volume, None)[\u0027provider_location\u0027]"},{"line_number":285,"context_line":"        connection_data \u003d self.initialize_connection(volume, None)[\u0027data\u0027]"},{"line_number":286,"context_line":"        target_connector \u003d \\"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f79a3b5_b0c9fd24","line":283,"range":{"start_line":283,"start_character":38,"end_line":283,"end_character":39},"in_reply_to":"3f79a3b5_c1e5eaa5","updated":"2018-10-11 14:55:00.000000000","message":"Done","commit_id":"08517b537892d704a2b27c00657a455de2af55db"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0580d83df2d64c5a60ffc8480bbe876560232181","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                        \u0027uuid\u0027: lvs[\u0027uuid\u0027]}"},{"line_number":166,"context_line":"                    output2 \u003d self._rpc_call(\u0027construct_lvol_bdev\u0027, params)"},{"line_number":167,"context_line":"                else:"},{"line_number":168,"context_line":"                    snapshot_name \u003d self._get_spdk_volume_name(snapshot)"},{"line_number":169,"context_line":"                    if snapshot_name is None:"},{"line_number":170,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":171,"context_line":"                            data\u003d_(\u0027SPDK snapshot %s does not exist\u0027) %"},{"line_number":172,"context_line":"                            snapshot)"},{"line_number":173,"context_line":"                    params \u003d {\u0027name\u0027: snapshot_name}"},{"line_number":174,"context_line":"                    snapshot \u003d self._rpc_call(\u0027get_bdevs\u0027, params)"},{"line_number":175,"context_line":"                    snapshot_size \u003d (snapshot[0][\u0027block_size\u0027]"},{"line_number":176,"context_line":"                                     * snapshot[0][\u0027num_blocks\u0027]"},{"line_number":177,"context_line":"                                     / units.Gi)"},{"line_number":178,"context_line":"                    if snapshot_size \u003c volume.size:"},{"line_number":179,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":180,"context_line":"                            data\u003d_(\u0027SPDK volume size cannot be bigger\u0027"},{"line_number":181,"context_line":"                                   \u0027 than snpashot size\u0027))"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_cf560cce","line":178,"range":{"start_line":168,"start_character":20,"end_line":178,"end_character":51},"updated":"2018-10-15 23:00:14.000000000","message":"Remove all of this:\n\nif snapshot and volume[\u0027size\u0027] \u003e snapshot[\u0027volume_size\u0027]:","commit_id":"c986669cdfceddfa9a204d3159847513d7a74116"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"9b953dbb658a9a12e154962d57098db0cd93c7bb","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                        \u0027uuid\u0027: lvs[\u0027uuid\u0027]}"},{"line_number":166,"context_line":"                    output2 \u003d self._rpc_call(\u0027construct_lvol_bdev\u0027, params)"},{"line_number":167,"context_line":"                else:"},{"line_number":168,"context_line":"                    snapshot_name \u003d self._get_spdk_volume_name(snapshot)"},{"line_number":169,"context_line":"                    if snapshot_name is None:"},{"line_number":170,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":171,"context_line":"                            data\u003d_(\u0027SPDK snapshot %s does not exist\u0027) %"},{"line_number":172,"context_line":"                            snapshot)"},{"line_number":173,"context_line":"                    params \u003d {\u0027name\u0027: snapshot_name}"},{"line_number":174,"context_line":"                    snapshot \u003d self._rpc_call(\u0027get_bdevs\u0027, params)"},{"line_number":175,"context_line":"                    snapshot_size \u003d (snapshot[0][\u0027block_size\u0027]"},{"line_number":176,"context_line":"                                     * snapshot[0][\u0027num_blocks\u0027]"},{"line_number":177,"context_line":"                                     / units.Gi)"},{"line_number":178,"context_line":"                    if snapshot_size \u003c volume.size:"},{"line_number":179,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":180,"context_line":"                            data\u003d_(\u0027SPDK volume size cannot be bigger\u0027"},{"line_number":181,"context_line":"                                   \u0027 than snpashot size\u0027))"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_4a92e359","line":178,"range":{"start_line":168,"start_character":20,"end_line":178,"end_character":51},"in_reply_to":"3f79a3b5_cf560cce","updated":"2018-10-16 08:27:27.000000000","message":"Done","commit_id":"c986669cdfceddfa9a204d3159847513d7a74116"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"0580d83df2d64c5a60ffc8480bbe876560232181","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                                     * snapshot[0][\u0027num_blocks\u0027]"},{"line_number":177,"context_line":"                                     / units.Gi)"},{"line_number":178,"context_line":"                    if snapshot_size \u003c volume.size:"},{"line_number":179,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":180,"context_line":"                            data\u003d_(\u0027SPDK volume size cannot be bigger\u0027"},{"line_number":181,"context_line":"                                   \u0027 than snpashot size\u0027))"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_4f62fca8","line":179,"updated":"2018-10-15 23:00:14.000000000","message":"No, this is perfectly acceptable. Don\u0027t fail the call.","commit_id":"c986669cdfceddfa9a204d3159847513d7a74116"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"9b953dbb658a9a12e154962d57098db0cd93c7bb","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                                     * snapshot[0][\u0027num_blocks\u0027]"},{"line_number":177,"context_line":"                                     / units.Gi)"},{"line_number":178,"context_line":"                    if snapshot_size \u003c volume.size:"},{"line_number":179,"context_line":"                        raise exception.VolumeBackendAPIException("},{"line_number":180,"context_line":"                            data\u003d_(\u0027SPDK volume size cannot be bigger\u0027"},{"line_number":181,"context_line":"                                   \u0027 than snpashot size\u0027))"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"3f79a3b5_6a8d5f33","line":179,"in_reply_to":"3f79a3b5_4f62fca8","updated":"2018-10-16 08:27:27.000000000","message":"Ok, I understand now :)","commit_id":"c986669cdfceddfa9a204d3159847513d7a74116"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"839bc1d5d8b02bf2581520d1c8782ef5e929e205","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                            data\u003djson.dumps(payload),"},{"line_number":72,"context_line":"                            auth\u003d(self.configuration.spdk_rpc_username,"},{"line_number":73,"context_line":"                                  self.configuration.spdk_rpc_password),"},{"line_number":74,"context_line":"                            verify\u003dFalse,"},{"line_number":75,"context_line":"                            timeout\u003d30)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        if not req.ok:"}],"source_content_type":"text/x-python","patch_set":32,"id":"3f79a3b5_57c82e81","line":74,"updated":"2018-12-11 20:25:38.000000000","message":"The same comment as for  https://review.openstack.org/#/c/572759/22","commit_id":"02c3bbeea127d31a70be45bb429d19ced68eaee1"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"c69a8c38ba0c4846dd212b5cf0e880f767c9a858","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                            data\u003djson.dumps(payload),"},{"line_number":72,"context_line":"                            auth\u003d(self.configuration.spdk_rpc_username,"},{"line_number":73,"context_line":"                                  self.configuration.spdk_rpc_password),"},{"line_number":74,"context_line":"                            verify\u003dFalse,"},{"line_number":75,"context_line":"                            timeout\u003d30)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        if not req.ok:"}],"source_content_type":"text/x-python","patch_set":32,"id":"3f79a3b5_13713fab","line":74,"in_reply_to":"3f79a3b5_57c82e81","updated":"2018-12-13 12:43:04.000000000","message":"This is planned for next release.","commit_id":"02c3bbeea127d31a70be45bb429d19ced68eaee1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"839bc1d5d8b02bf2581520d1c8782ef5e929e205","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        LOG.debug(\u0027SPDK Updating volume stats\u0027)"},{"line_number":87,"context_line":"        status \u003d {}"},{"line_number":88,"context_line":"        lvs_entry \u003d {}"},{"line_number":89,"context_line":"        pools_status \u003d []"},{"line_number":90,"context_line":"        self.lvs[:] \u003d []"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"3f79a3b5_f7d85a50","line":88,"range":{"start_line":88,"start_character":8,"end_line":88,"end_character":22},"updated":"2018-12-11 20:25:38.000000000","message":"We don\u0027t need this line. It\u0027s re-defined in #96","commit_id":"02c3bbeea127d31a70be45bb429d19ced68eaee1"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"c69a8c38ba0c4846dd212b5cf0e880f767c9a858","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        LOG.debug(\u0027SPDK Updating volume stats\u0027)"},{"line_number":87,"context_line":"        status \u003d {}"},{"line_number":88,"context_line":"        lvs_entry \u003d {}"},{"line_number":89,"context_line":"        pools_status \u003d []"},{"line_number":90,"context_line":"        self.lvs[:] \u003d []"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"3f79a3b5_b39acbc0","line":88,"range":{"start_line":88,"start_character":8,"end_line":88,"end_character":22},"in_reply_to":"3f79a3b5_f7d85a50","updated":"2018-12-13 12:43:04.000000000","message":"Done","commit_id":"02c3bbeea127d31a70be45bb429d19ced68eaee1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"839bc1d5d8b02bf2581520d1c8782ef5e929e205","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        status \u003d {}"},{"line_number":88,"context_line":"        lvs_entry \u003d {}"},{"line_number":89,"context_line":"        pools_status \u003d []"},{"line_number":90,"context_line":"        self.lvs[:] \u003d []"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        output \u003d self._rpc_call(\u0027get_lvol_stores\u0027)"},{"line_number":93,"context_line":"        if output:"}],"source_content_type":"text/x-python","patch_set":32,"id":"3f79a3b5_37d7b224","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":24},"updated":"2018-12-11 20:25:38.000000000","message":"Can we use just \u0027self.lvs.clear()\u0027 or \u0027seld.lvs \u003d []\u0027 here?","commit_id":"02c3bbeea127d31a70be45bb429d19ced68eaee1"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"c69a8c38ba0c4846dd212b5cf0e880f767c9a858","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        status \u003d {}"},{"line_number":88,"context_line":"        lvs_entry \u003d {}"},{"line_number":89,"context_line":"        pools_status \u003d []"},{"line_number":90,"context_line":"        self.lvs[:] \u003d []"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        output \u003d self._rpc_call(\u0027get_lvol_stores\u0027)"},{"line_number":93,"context_line":"        if output:"}],"source_content_type":"text/x-python","patch_set":32,"id":"3f79a3b5_d39f47b0","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":24},"in_reply_to":"3f79a3b5_37d7b224","updated":"2018-12-13 12:43:04.000000000","message":"Done","commit_id":"02c3bbeea127d31a70be45bb429d19ced68eaee1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"839bc1d5d8b02bf2581520d1c8782ef5e929e205","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                                self.configuration.spdk_rpc_password),"},{"line_number":204,"context_line":"                          verify\u003dFalse,"},{"line_number":205,"context_line":"                          timeout\u003d30)"},{"line_number":206,"context_line":"        except Exception:"},{"line_number":207,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":208,"context_line":"                data\u003d_(\"Could not connect to SPDK target\"))"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"3f79a3b5_97e5660b","line":206,"range":{"start_line":206,"start_character":15,"end_line":206,"end_character":24},"updated":"2018-12-11 20:25:38.000000000","message":"Can we catch less general exception here?","commit_id":"02c3bbeea127d31a70be45bb429d19ced68eaee1"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"c69a8c38ba0c4846dd212b5cf0e880f767c9a858","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                                self.configuration.spdk_rpc_password),"},{"line_number":204,"context_line":"                          verify\u003dFalse,"},{"line_number":205,"context_line":"                          timeout\u003d30)"},{"line_number":206,"context_line":"        except Exception:"},{"line_number":207,"context_line":"            raise exception.VolumeBackendAPIException("},{"line_number":208,"context_line":"                data\u003d_(\"Could not connect to SPDK target\"))"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"3f79a3b5_b3e88b14","line":206,"range":{"start_line":206,"start_character":15,"end_line":206,"end_character":24},"in_reply_to":"3f79a3b5_97e5660b","updated":"2018-12-13 12:43:04.000000000","message":"Done","commit_id":"02c3bbeea127d31a70be45bb429d19ced68eaee1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"839bc1d5d8b02bf2581520d1c8782ef5e929e205","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        try:"},{"line_number":298,"context_line":"            device_info \u003d target_connector.connect_volume(connection_data)"},{"line_number":299,"context_line":"        except Exception:"},{"line_number":300,"context_line":"            LOG.debug(\u0027Could not connect SPDK target device\u0027)"},{"line_number":301,"context_line":"            return"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        connection_data[\u0027device_path\u0027] \u003d device_info[\u0027path\u0027]"}],"source_content_type":"text/x-python","patch_set":32,"id":"3f79a3b5_57b10e03","line":300,"range":{"start_line":300,"start_character":0,"end_line":300,"end_character":23},"updated":"2018-12-11 20:25:38.000000000","message":"Maybe LOG.info will be better here","commit_id":"02c3bbeea127d31a70be45bb429d19ced68eaee1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9b53634d413f2dd69197ac1e7f09a25554d2b492","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    VERSION \u003d \u00271.0.0\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":40,"context_line":"    CI_WIKI_NAME \u003d \"SPDK\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":43,"context_line":"        # Parent sets db, host, _execute and base config"}],"source_content_type":"text/x-python","patch_set":36,"id":"dfd5e7cf_5d0fc3e0","line":40,"range":{"start_line":40,"start_character":4,"end_line":40,"end_character":16},"updated":"2019-01-09 12:47:19.000000000","message":"I don\u0027t see that page created. Please get that added.","commit_id":"8af95c97b67405cde4703edf67bf04996ab41b30"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9b53634d413f2dd69197ac1e7f09a25554d2b492","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"                LOG.debug(\u0027SPDK created lvol: %s\u0027, output2)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"                return"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        LOG.error(\u0027Unable to create volume using SPDK - no resources found\u0027)"},{"line_number":189,"context_line":"        raise exception.VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":36,"id":"dfd5e7cf_5d282333","line":186,"range":{"start_line":186,"start_character":16,"end_line":186,"end_character":22},"updated":"2019-01-09 12:47:19.000000000","message":"This can be removed since it\u0027s not needed.","commit_id":"8af95c97b67405cde4703edf67bf04996ab41b30"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"7c25b4b02407480534bec9b791d85e4fb96a33eb","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"                LOG.debug(\u0027SPDK created lvol: %s\u0027, output2)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"                return"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        LOG.error(\u0027Unable to create volume using SPDK - no resources found\u0027)"},{"line_number":189,"context_line":"        raise exception.VolumeBackendAPIException("}],"source_content_type":"text/x-python","patch_set":36,"id":"dfd5e7cf_bd66ef28","line":186,"range":{"start_line":186,"start_character":16,"end_line":186,"end_character":22},"in_reply_to":"dfd5e7cf_5d282333","updated":"2019-01-09 13:02:49.000000000","message":"Without \u0027return\u0027 we will raise an exception in line 189, which is not expected.","commit_id":"8af95c97b67405cde4703edf67bf04996ab41b30"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"8d3509067e12f28e8820a6be49f328d201b493f9","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        connection_data[\u0027device_path\u0027] \u003d device_info[\u0027path\u0027]"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        try:"},{"line_number":345,"context_line":"            image_utils.fetch_to_raw(context,"},{"line_number":346,"context_line":"                                     image_service,"},{"line_number":347,"context_line":"                                     image_id,"},{"line_number":348,"context_line":"                                     device_info[\u0027path\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"dfd5e7cf_fbf4965d","line":345,"range":{"start_line":345,"start_character":12,"end_line":345,"end_character":36},"updated":"2019-01-08 16:41:07.000000000","message":"Seems like there should be exception catching here in the case that something goes wrong and the partial volume should be cleaned up if there is a failure.","commit_id":"8af95c97b67405cde4703edf67bf04996ab41b30"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"5396cd2386164985f90aea091c43ee4c5a8d6e2f","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        connection_data[\u0027device_path\u0027] \u003d device_info[\u0027path\u0027]"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        try:"},{"line_number":345,"context_line":"            image_utils.fetch_to_raw(context,"},{"line_number":346,"context_line":"                                     image_service,"},{"line_number":347,"context_line":"                                     image_id,"},{"line_number":348,"context_line":"                                     device_info[\u0027path\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"dfd5e7cf_93cbe551","line":345,"range":{"start_line":345,"start_character":12,"end_line":345,"end_character":36},"in_reply_to":"dfd5e7cf_fbf4965d","updated":"2019-01-09 07:40:18.000000000","message":"ACK","commit_id":"8af95c97b67405cde4703edf67bf04996ab41b30"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"6b9e93d03500788e5993ba77bc87b1de4e08d82d","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        connection_data[\u0027device_path\u0027] \u003d device_info[\u0027path\u0027]"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        try:"},{"line_number":345,"context_line":"            image_utils.fetch_to_raw(context,"},{"line_number":346,"context_line":"                                     image_service,"},{"line_number":347,"context_line":"                                     image_id,"},{"line_number":348,"context_line":"                                     device_info[\u0027path\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"dfd5e7cf_fd179744","line":345,"range":{"start_line":345,"start_character":12,"end_line":345,"end_character":36},"in_reply_to":"dfd5e7cf_fbf4965d","updated":"2019-01-09 12:34:25.000000000","message":"I was going through the code of other drivers and didn\u0027t find anywhere any method to clear a volume. Does Cinder implement such thing or I have to implement it on SPDK side?","commit_id":"8af95c97b67405cde4703edf67bf04996ab41b30"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9b53634d413f2dd69197ac1e7f09a25554d2b492","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        connection_data[\u0027device_path\u0027] \u003d device_info[\u0027path\u0027]"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"        try:"},{"line_number":345,"context_line":"            image_utils.fetch_to_raw(context,"},{"line_number":346,"context_line":"                                     image_service,"},{"line_number":347,"context_line":"                                     image_id,"},{"line_number":348,"context_line":"                                     device_info[\u0027path\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"dfd5e7cf_5dab4388","line":345,"range":{"start_line":345,"start_character":12,"end_line":345,"end_character":36},"in_reply_to":"dfd5e7cf_fd179744","updated":"2019-01-09 12:47:19.000000000","message":"I think it would have to be on the SPDK side since internal to the driver would know what was done so far and how to roll it back properly. But I think you\u0027re right, this isn\u0027t something we handle well as a whole. Maybe something that can be improved in a follow on.","commit_id":"8af95c97b67405cde4703edf67bf04996ab41b30"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"8d3509067e12f28e8820a6be49f328d201b493f9","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        connection_data[\u0027device_path\u0027] \u003d device_info[\u0027path\u0027]"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        try:"},{"line_number":374,"context_line":"            image_utils.upload_volume(context,"},{"line_number":375,"context_line":"                                      image_service,"},{"line_number":376,"context_line":"                                      image_meta,"},{"line_number":377,"context_line":"                                      device_info[\u0027path\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"dfd5e7cf_bbee0e86","line":374,"range":{"start_line":374,"start_character":11,"end_line":374,"end_character":38},"updated":"2019-01-08 16:41:07.000000000","message":"Same comment here.","commit_id":"8af95c97b67405cde4703edf67bf04996ab41b30"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"5396cd2386164985f90aea091c43ee4c5a8d6e2f","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        connection_data[\u0027device_path\u0027] \u003d device_info[\u0027path\u0027]"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        try:"},{"line_number":374,"context_line":"            image_utils.upload_volume(context,"},{"line_number":375,"context_line":"                                      image_service,"},{"line_number":376,"context_line":"                                      image_meta,"},{"line_number":377,"context_line":"                                      device_info[\u0027path\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"dfd5e7cf_53c57d3b","line":374,"range":{"start_line":374,"start_character":11,"end_line":374,"end_character":38},"in_reply_to":"dfd5e7cf_bbee0e86","updated":"2019-01-09 07:40:18.000000000","message":"ACK","commit_id":"8af95c97b67405cde4703edf67bf04996ab41b30"}],"cinder/volume/drivers/spdk/spdk.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2f1bafb36b3f54bda6d61db23300fbbf076344f1","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from cinder import exception"},{"line_number":16,"context_line":"from cinder.i18n import _"},{"line_number":17,"context_line":"from cinder.image import image_utils"},{"line_number":18,"context_line":"from cinder import interface"},{"line_number":19,"context_line":"from cinder import utils"},{"line_number":20,"context_line":"from cinder.volume import configuration"},{"line_number":21,"context_line":"from cinder.volume import driver"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_6a847ed3","line":18,"updated":"2018-04-25 14:02:34.000000000","message":"Imports need to be grouped by standard lib, then third party, then local imports.","commit_id":"3f955c0cc14fdf2aab81cb7bcc5c73f47ffaa172"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2463304fa49c8d0315c7d09d457a361f3af225b3","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from cinder import exception"},{"line_number":16,"context_line":"from cinder.i18n import _"},{"line_number":17,"context_line":"from cinder.image import image_utils"},{"line_number":18,"context_line":"from cinder import interface"},{"line_number":19,"context_line":"from cinder import utils"},{"line_number":20,"context_line":"from cinder.volume import configuration"},{"line_number":21,"context_line":"from cinder.volume import driver"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f6a8fd7_005b4c54","line":18,"in_reply_to":"9f6a8fd7_6a847ed3","updated":"2018-04-26 13:03:07.000000000","message":"OK, I will group them.","commit_id":"3f955c0cc14fdf2aab81cb7bcc5c73f47ffaa172"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b33774849a0c52ba69bbfe786b81105b0eec430b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"volume_opts \u003d ["},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027spdkrpc_address\u0027,"},{"line_number":34,"context_line":"               default\u003d\u0027/var/tmp/spdk.sock\u0027,"},{"line_number":35,"context_line":"               help\u003d\u0027IP address of SPDK NVMe-oF target management interface.\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027spdkrpc_port\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027None\u0027,"},{"line_number":38,"context_line":"               help\u003d\u0027Port of SPDK NVMe-oF target management interface.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_18bb5872","line":35,"range":{"start_line":35,"start_character":21,"end_line":35,"end_character":31},"updated":"2018-05-02 14:25:23.000000000","message":"Says IP address but the default is a path?","commit_id":"f04f78d382a792d56d1ca6bff9eedfa0b172a273"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b33774849a0c52ba69bbfe786b81105b0eec430b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.StrOpt(\u0027spdkrpc_address\u0027,"},{"line_number":34,"context_line":"               default\u003d\u0027/var/tmp/spdk.sock\u0027,"},{"line_number":35,"context_line":"               help\u003d\u0027IP address of SPDK NVMe-oF target management interface.\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027spdkrpc_port\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027None\u0027,"},{"line_number":38,"context_line":"               help\u003d\u0027Port of SPDK NVMe-oF target management interface.\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027spdktarget_address\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_5866b02b","line":36,"updated":"2018-05-02 14:25:23.000000000","message":"Consider PortOpt/IntOpt.","commit_id":"f04f78d382a792d56d1ca6bff9eedfa0b172a273"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b33774849a0c52ba69bbfe786b81105b0eec430b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"               help\u003d\u0027Port of SPDK NVMe-oF target management interface.\u0027),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027spdktarget_address\u0027,"},{"line_number":40,"context_line":"               help\u003d\u0027IP address of SPDK NVMe-oF target.\u0027),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027spdktarget_port\u0027,"},{"line_number":42,"context_line":"               help\u003d\u0027Port of SPDK NVMe-oF target.\u0027),"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_f86c6409","line":41,"updated":"2018-05-02 14:25:23.000000000","message":"Consider PortOpt/IntOpt.","commit_id":"f04f78d382a792d56d1ca6bff9eedfa0b172a273"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"31a377bc1d72ee2b307470d53d4f3f9139fd6287","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"@interface.volumedriver"},{"line_number":50,"context_line":"class SPDKDriver(driver.VolumeDriver):"},{"line_number":51,"context_line":"    \"\"\"Executes commands relating to Volumes.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    VERSION \u003d \u00271.0.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_bdfbb944","line":50,"range":{"start_line":50,"start_character":6,"end_line":50,"end_character":38},"updated":"2018-04-25 18:00:07.000000000","message":"why not using the abstract class in https://review.openstack.org/#/c/504944/27/cinder/volume/targets/nvmeof.py\nand implement it has another target from nvmeof. There is some duplicate code here as in the nvmet","commit_id":"f04f78d382a792d56d1ca6bff9eedfa0b172a273"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"cc8c8a62cb701d920554d593ac72c2e7b30e6332","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"@interface.volumedriver"},{"line_number":50,"context_line":"class SPDKDriver(driver.VolumeDriver):"},{"line_number":51,"context_line":"    \"\"\"Executes commands relating to Volumes.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    VERSION \u003d \u00271.0.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_ca46cf50","line":50,"range":{"start_line":50,"start_character":6,"end_line":50,"end_character":38},"in_reply_to":"9f6a8fd7_8b63fdb1","updated":"2018-05-03 08:21:56.000000000","message":"so spdk is yet another targt for NVMeof http://www.spdk.io/doc/nvmf.html. so to reduce duplication and config option please use the abstract class.","commit_id":"f04f78d382a792d56d1ca6bff9eedfa0b172a273"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2463304fa49c8d0315c7d09d457a361f3af225b3","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"@interface.volumedriver"},{"line_number":50,"context_line":"class SPDKDriver(driver.VolumeDriver):"},{"line_number":51,"context_line":"    \"\"\"Executes commands relating to Volumes.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    VERSION \u003d \u00271.0.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_c07b14bc","line":50,"range":{"start_line":50,"start_character":6,"end_line":50,"end_character":38},"in_reply_to":"9f6a8fd7_bdfbb944","updated":"2018-04-26 13:03:07.000000000","message":"Driver you mentioned is for creating NVMf target. This driver assumes that NVMf target is up and running already and this driver is used to manage blk devices / volumes on that target.","commit_id":"f04f78d382a792d56d1ca6bff9eedfa0b172a273"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"4838e39406912595e9c2c323bc1436940ce169a2","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"@interface.volumedriver"},{"line_number":50,"context_line":"class SPDKDriver(driver.VolumeDriver):"},{"line_number":51,"context_line":"    \"\"\"Executes commands relating to Volumes.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    VERSION \u003d \u00271.0.0\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_8b63fdb1","line":50,"range":{"start_line":50,"start_character":6,"end_line":50,"end_character":38},"in_reply_to":"9f6a8fd7_c07b14bc","updated":"2018-04-26 13:14:59.000000000","message":"It not assuming anything it is just an abstract class for NVMEof. The point was that is should hold the common pieces for nvmet and dpdk. \nAre you saying that there are not common parts?\nI was think that spdk is yet another target ( same as tgt and lio which are managing iscsi target) is the assumption is wrong?","commit_id":"f04f78d382a792d56d1ca6bff9eedfa0b172a273"}],"releasenotes/notes/spdk-volume-081f6e72396b30e8.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"51e28ae0f10494ce07ad139593707aadaae14fd2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new volume driver, SPDK, is added for Storage Performance"},{"line_number":5,"context_line":"    Development Kit NVMe-oF target handling, it allows cinder"},{"line_number":6,"context_line":"    to manage volumes in SPDK NVMe-oF driver."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"3f79a3b5_7eabf71c","line":5,"range":{"start_line":5,"start_character":43,"end_line":5,"end_character":46},"updated":"2018-10-02 21:46:46.000000000","message":"\". It\" or \", that allows Cinder\"","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"2fe3b8fad6ceccd293368a58be6fb97678e38fc3","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new volume driver, SPDK, is added for Storage Performance"},{"line_number":5,"context_line":"    Development Kit NVMe-oF target handling, it allows cinder"},{"line_number":6,"context_line":"    to manage volumes in SPDK NVMe-oF driver."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"3f79a3b5_09dccfdf","line":5,"range":{"start_line":5,"start_character":43,"end_line":5,"end_character":46},"in_reply_to":"3f79a3b5_7eabf71c","updated":"2018-10-05 08:56:53.000000000","message":"Done","commit_id":"2057b0c6a234a0d8213359027bc05b50994224f3"}]}
