)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11968,"name":"Aviram Bar-Haim","email":"avirambh@gmail.com","username":"aviramb"},"change_message_id":"5bf79085729e3e293d520396aeaaccbd664e7045","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding NVMEoF target for LVM driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added changes to LVM driver for supporting NVMe target CLI."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I168bcddde419aa9174822bb325e7a8608271aace"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1f1a1f67_83ba6e6b","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":59},"updated":"2017-07-16 11:44:11.000000000","message":"Please elaborate","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"32459a32d2cd6c93fea20be27029e6384d44359e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding NVMEoF target for LVM driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added changes to LVM driver for supporting NVMe target CLI."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I168bcddde419aa9174822bb325e7a8608271aace"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1f1a1f67_44b32a4e","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":59},"in_reply_to":"1f1a1f67_83ba6e6b","updated":"2017-07-17 13:33:54.000000000","message":"Done","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ec59f81faa6e83283cd8e017ceb0b9012ef045c1","unresolved":false,"context_lines":[{"line_number":15,"context_line":"nvmet_subsystem_name. The target IP and port, that will be used by"},{"line_number":16,"context_line":"nvmecli OS-brick’s NVMe connector, are taken from iscsi_ip_address"},{"line_number":17,"context_line":"and iscsi_port in cinder.conf for now."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I168bcddde419aa9174822bb325e7a8608271aace"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"1f1a1f67_e843adae","line":18,"updated":"2017-07-20 13:31:55.000000000","message":"Is there an os-brick patch needed for this as well? If so, link that with Depends-on here.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"6736bd6819053859aff541c0186e3e89488e39d4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"nvmet_subsystem_name. The target IP and port, that will be used by"},{"line_number":16,"context_line":"nvmecli OS-brick’s NVMe connector, are taken from iscsi_ip_address"},{"line_number":17,"context_line":"and iscsi_port in cinder.conf for now."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I168bcddde419aa9174822bb325e7a8608271aace"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"ff346bd7_1212acb2","line":18,"in_reply_to":"1f1a1f67_e843adae","updated":"2017-07-21 17:39:39.000000000","message":"Done","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"A new target, NVMET, is added for the LVM driver, and allows"},{"line_number":11,"context_line":"cinder to use nvmetcli in order to create/delete subsystems"},{"line_number":12,"context_line":"on attaching/detaching an LVM volume."},{"line_number":13,"context_line":"By choosing iscsi_helper as nvmet, other parameters can be configured"},{"line_number":14,"context_line":"too in cinder.conf like nvmet_port_id, nvmet_ns_id (for namespace) and"},{"line_number":15,"context_line":"nvmet_subsystem_name. The target IP and port, that will be used by"},{"line_number":16,"context_line":"nvmecli OS-brick’s NVMe connector, are taken from iscsi_ip_address"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"7f287b81_8b665751","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":16},"updated":"2017-08-22 21:05:01.000000000","message":"Should have a blank line before this line.","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":10,"context_line":"A new target, NVMET, is added for the LVM driver, and allows"},{"line_number":11,"context_line":"cinder to use nvmetcli in order to create/delete subsystems"},{"line_number":12,"context_line":"on attaching/detaching an LVM volume."},{"line_number":13,"context_line":"By choosing iscsi_helper as nvmet, other parameters can be configured"},{"line_number":14,"context_line":"too in cinder.conf like nvmet_port_id, nvmet_ns_id (for namespace) and"},{"line_number":15,"context_line":"nvmet_subsystem_name. The target IP and port, that will be used by"},{"line_number":16,"context_line":"nvmecli OS-brick’s NVMe connector, are taken from iscsi_ip_address"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"7f287b81_595cb84a","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":16},"in_reply_to":"7f287b81_8b665751","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"}],"cinder/volume/driver.py":[{"author":{"_account_id":11968,"name":"Aviram Bar-Haim","email":"avirambh@gmail.com","username":"aviramb"},"change_message_id":"5bf79085729e3e293d520396aeaaccbd664e7045","unresolved":false,"context_lines":[{"line_number":87,"context_line":"               help\u003d\u0027The flag to pass to ionice to alter the i/o priority \u0027"},{"line_number":88,"context_line":"                    \u0027of the process used to zero a volume after deletion, \u0027"},{"line_number":89,"context_line":"                    \u0027for example \"-c3\" for idle only priority.\u0027),"},{"line_number":90,"context_line":"    cfg.StrOpt(\u0027iscsi_helper\u0027,"},{"line_number":91,"context_line":"               default\u003d\u0027tgtadm\u0027,"},{"line_number":92,"context_line":"               choices\u003d[\u0027tgtadm\u0027, \u0027lioadm\u0027, \u0027scstadmin\u0027, \u0027iscsictl\u0027,"},{"line_number":93,"context_line":"                        \u0027ietadm\u0027, \u0027fake\u0027, \u0027nvmetadm\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_03a65e54","line":90,"range":{"start_line":90,"start_character":0,"end_line":90,"end_character":30},"updated":"2017-07-16 11:44:11.000000000","message":"IMO we should change iscsi_ prefix to target_ in a future change","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"32459a32d2cd6c93fea20be27029e6384d44359e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"               help\u003d\u0027The flag to pass to ionice to alter the i/o priority \u0027"},{"line_number":88,"context_line":"                    \u0027of the process used to zero a volume after deletion, \u0027"},{"line_number":89,"context_line":"                    \u0027for example \"-c3\" for idle only priority.\u0027),"},{"line_number":90,"context_line":"    cfg.StrOpt(\u0027iscsi_helper\u0027,"},{"line_number":91,"context_line":"               default\u003d\u0027tgtadm\u0027,"},{"line_number":92,"context_line":"               choices\u003d[\u0027tgtadm\u0027, \u0027lioadm\u0027, \u0027scstadmin\u0027, \u0027iscsictl\u0027,"},{"line_number":93,"context_line":"                        \u0027ietadm\u0027, \u0027fake\u0027, \u0027nvmetadm\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_a4de7e6a","line":90,"range":{"start_line":90,"start_character":0,"end_line":90,"end_character":30},"in_reply_to":"1f1a1f67_03a65e54","updated":"2017-07-17 13:33:54.000000000","message":"Yes I agree with you","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":11968,"name":"Aviram Bar-Haim","email":"avirambh@gmail.com","username":"aviramb"},"change_message_id":"5bf79085729e3e293d520396aeaaccbd664e7045","unresolved":false,"context_lines":[{"line_number":272,"context_line":"               help\u003d\u0027Availability zone for this volume backend. If not set, \u0027"},{"line_number":273,"context_line":"                    \u0027the storage_availability_zone option value is used as \u0027"},{"line_number":274,"context_line":"                    \u0027the default for all backends.\u0027),"},{"line_number":275,"context_line":"    cfg.StrOpt(\u0027target_ip\u0027,"},{"line_number":276,"context_line":"               default\u003d\u0027$my_ip\u0027,"},{"line_number":277,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":278,"context_line":"    cfg.IntOpt(\u0027target_port\u0027,"},{"line_number":279,"context_line":"               default\u003d1023,"},{"line_number":280,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":281,"context_line":"    cfg.IntOpt(\u0027port_id\u0027,"},{"line_number":282,"context_line":"               default\u003d1,"},{"line_number":283,"context_line":"               help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_23a95a23","line":280,"range":{"start_line":275,"start_character":0,"end_line":280,"end_character":24},"updated":"2017-07-16 11:44:11.000000000","message":"Same as before, I think we should keep using iscsi_ parameters for now (ip_address, port etc.) for LVM parameters, and rename it in the future to target_ (like for iscsi_helper)","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"32459a32d2cd6c93fea20be27029e6384d44359e","unresolved":false,"context_lines":[{"line_number":272,"context_line":"               help\u003d\u0027Availability zone for this volume backend. If not set, \u0027"},{"line_number":273,"context_line":"                    \u0027the storage_availability_zone option value is used as \u0027"},{"line_number":274,"context_line":"                    \u0027the default for all backends.\u0027),"},{"line_number":275,"context_line":"    cfg.StrOpt(\u0027target_ip\u0027,"},{"line_number":276,"context_line":"               default\u003d\u0027$my_ip\u0027,"},{"line_number":277,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":278,"context_line":"    cfg.IntOpt(\u0027target_port\u0027,"},{"line_number":279,"context_line":"               default\u003d1023,"},{"line_number":280,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":281,"context_line":"    cfg.IntOpt(\u0027port_id\u0027,"},{"line_number":282,"context_line":"               default\u003d1,"},{"line_number":283,"context_line":"               help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_04f092fd","line":280,"range":{"start_line":275,"start_character":0,"end_line":280,"end_character":24},"in_reply_to":"1f1a1f67_23a95a23","updated":"2017-07-17 13:33:54.000000000","message":"Done","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":11968,"name":"Aviram Bar-Haim","email":"avirambh@gmail.com","username":"aviramb"},"change_message_id":"5bf79085729e3e293d520396aeaaccbd664e7045","unresolved":false,"context_lines":[{"line_number":278,"context_line":"    cfg.IntOpt(\u0027target_port\u0027,"},{"line_number":279,"context_line":"               default\u003d1023,"},{"line_number":280,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":281,"context_line":"    cfg.IntOpt(\u0027port_id\u0027,"},{"line_number":282,"context_line":"               default\u003d1,"},{"line_number":283,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":284,"context_line":"    cfg.IntOpt(\u0027ns_id\u0027,"},{"line_number":285,"context_line":"               default\u003d10,"},{"line_number":286,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":287,"context_line":"    cfg.StrOpt(\u0027subsystem_name\u0027,"},{"line_number":288,"context_line":"               default\u003d\u0027default_subsys\u0027,"},{"line_number":289,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":290,"context_line":"]"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"# for backward compatibility"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_637872c3","line":289,"range":{"start_line":281,"start_character":0,"end_line":289,"end_character":24},"updated":"2017-07-16 11:44:11.000000000","message":"I think we should add nvmet_ prefix to nvme specific params","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"32459a32d2cd6c93fea20be27029e6384d44359e","unresolved":false,"context_lines":[{"line_number":278,"context_line":"    cfg.IntOpt(\u0027target_port\u0027,"},{"line_number":279,"context_line":"               default\u003d1023,"},{"line_number":280,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":281,"context_line":"    cfg.IntOpt(\u0027port_id\u0027,"},{"line_number":282,"context_line":"               default\u003d1,"},{"line_number":283,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":284,"context_line":"    cfg.IntOpt(\u0027ns_id\u0027,"},{"line_number":285,"context_line":"               default\u003d10,"},{"line_number":286,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":287,"context_line":"    cfg.StrOpt(\u0027subsystem_name\u0027,"},{"line_number":288,"context_line":"               default\u003d\u0027default_subsys\u0027,"},{"line_number":289,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":290,"context_line":"]"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"# for backward compatibility"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_e4f0f6ff","line":289,"range":{"start_line":281,"start_character":0,"end_line":289,"end_character":24},"in_reply_to":"1f1a1f67_637872c3","updated":"2017-07-17 13:33:54.000000000","message":"Done","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ec59f81faa6e83283cd8e017ceb0b9012ef045c1","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                    \u0027the storage_availability_zone option value is used as \u0027"},{"line_number":274,"context_line":"                    \u0027the default for all backends.\u0027),"},{"line_number":275,"context_line":"    cfg.IntOpt(\u0027nvmet_port_id\u0027,"},{"line_number":276,"context_line":"               default\u003d1,"},{"line_number":277,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":278,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":279,"context_line":"               default\u003d10,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_2879a52e","line":276,"range":{"start_line":276,"start_character":23,"end_line":276,"end_character":24},"updated":"2017-07-20 13:31:55.000000000","message":"Is 1 an appropriate default for this?","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"6736bd6819053859aff541c0186e3e89488e39d4","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                    \u0027the storage_availability_zone option value is used as \u0027"},{"line_number":274,"context_line":"                    \u0027the default for all backends.\u0027),"},{"line_number":275,"context_line":"    cfg.IntOpt(\u0027nvmet_port_id\u0027,"},{"line_number":276,"context_line":"               default\u003d1,"},{"line_number":277,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":278,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":279,"context_line":"               default\u003d10,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff346bd7_b27520fd","line":276,"range":{"start_line":276,"start_character":23,"end_line":276,"end_character":24},"in_reply_to":"1f1a1f67_2879a52e","updated":"2017-07-21 17:39:39.000000000","message":"AFAIK yes","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ec59f81faa6e83283cd8e017ceb0b9012ef045c1","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                    \u0027the default for all backends.\u0027),"},{"line_number":275,"context_line":"    cfg.IntOpt(\u0027nvmet_port_id\u0027,"},{"line_number":276,"context_line":"               default\u003d1,"},{"line_number":277,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":278,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":279,"context_line":"               default\u003d10,"},{"line_number":280,"context_line":"               help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_c88d912b","line":277,"range":{"start_line":277,"start_character":20,"end_line":277,"end_character":22},"updated":"2017-07-20 13:31:55.000000000","message":"Add actual help text when you move this.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"6736bd6819053859aff541c0186e3e89488e39d4","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                    \u0027the default for all backends.\u0027),"},{"line_number":275,"context_line":"    cfg.IntOpt(\u0027nvmet_port_id\u0027,"},{"line_number":276,"context_line":"               default\u003d1,"},{"line_number":277,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":278,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":279,"context_line":"               default\u003d10,"},{"line_number":280,"context_line":"               help\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff346bd7_92721c11","line":277,"range":{"start_line":277,"start_character":20,"end_line":277,"end_character":22},"in_reply_to":"1f1a1f67_c88d912b","updated":"2017-07-21 17:39:39.000000000","message":"Done","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"19370a02015f7a17ec5a31da87634be148d03a57","unresolved":false,"context_lines":[{"line_number":272,"context_line":"               help\u003d\u0027Availability zone for this volume backend. If not set, \u0027"},{"line_number":273,"context_line":"                    \u0027the storage_availability_zone option value is used as \u0027"},{"line_number":274,"context_line":"                    \u0027the default for all backends.\u0027),"},{"line_number":275,"context_line":"    cfg.IntOpt(\u0027nvmet_port_id\u0027,"},{"line_number":276,"context_line":"               default\u003d1,"},{"line_number":277,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":278,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":279,"context_line":"               default\u003d10,"},{"line_number":280,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":281,"context_line":"    cfg.StrOpt(\u0027nvmet_subsystem_name\u0027,"},{"line_number":282,"context_line":"               default\u003d\u0027default_subsys\u0027,"},{"line_number":283,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":284,"context_line":"]"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"# for backward compatibility"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_74b90113","line":283,"range":{"start_line":275,"start_character":0,"end_line":283,"end_character":24},"updated":"2017-07-18 17:54:09.000000000","message":"These three options should be defined in targets/nvme.py instead of driver.py.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"90f9a08df1483de289687fb343c6bd4cf34d8c36","unresolved":false,"context_lines":[{"line_number":272,"context_line":"               help\u003d\u0027Availability zone for this volume backend. If not set, \u0027"},{"line_number":273,"context_line":"                    \u0027the storage_availability_zone option value is used as \u0027"},{"line_number":274,"context_line":"                    \u0027the default for all backends.\u0027),"},{"line_number":275,"context_line":"    cfg.IntOpt(\u0027nvmet_port_id\u0027,"},{"line_number":276,"context_line":"               default\u003d1,"},{"line_number":277,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":278,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":279,"context_line":"               default\u003d10,"},{"line_number":280,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":281,"context_line":"    cfg.StrOpt(\u0027nvmet_subsystem_name\u0027,"},{"line_number":282,"context_line":"               default\u003d\u0027default_subsys\u0027,"},{"line_number":283,"context_line":"               help\u003d\u0027\u0027),"},{"line_number":284,"context_line":"]"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"# for backward compatibility"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_1bc9ba57","line":283,"range":{"start_line":275,"start_character":0,"end_line":283,"end_character":24},"in_reply_to":"1f1a1f67_74b90113","updated":"2017-07-19 13:56:08.000000000","message":"yes I\u0027ll fix it.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"e96d5ed33edefafab3494c64f55f8a9fead3ea49","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            \u0027tgtadm\u0027: \u0027cinder.volume.targets.tgt.TgtAdm\u0027,"},{"line_number":390,"context_line":"            \u0027scstadmin\u0027: \u0027cinder.volume.targets.scst.SCSTAdm\u0027,"},{"line_number":391,"context_line":"            \u0027iscsictl\u0027: \u0027cinder.volume.targets.cxt.CxtAdm\u0027,"},{"line_number":392,"context_line":"            \u0027nvmetadm\u0027: \u0027cinder.volume.targets.nvmet.NVMETAdm\u0027}"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        # set True by manager after successful check_for_setup"},{"line_number":395,"context_line":"        self._initialized \u003d False"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_585e8a12","line":392,"updated":"2017-07-26 18:39:04.000000000","message":"I don\u0027t understand why \"nvmetadm\" is the preferred short name for this target -- shouldn\u0027t it just be \"nvmet\" or similar?\n\n\"tgtadm\" or \"ietadm\" made sense because it was a command that existed -- \"lioadm\" did not really ever make sense and should have just been \"lio\".  I don\u0027t think you should follow this example.","commit_id":"22540e3078b42dfd5bd463458ac3d6e5e5901494"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"b697b5f1d3e3b700bda55712c2177d4ad5187257","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            \u0027tgtadm\u0027: \u0027cinder.volume.targets.tgt.TgtAdm\u0027,"},{"line_number":390,"context_line":"            \u0027scstadmin\u0027: \u0027cinder.volume.targets.scst.SCSTAdm\u0027,"},{"line_number":391,"context_line":"            \u0027iscsictl\u0027: \u0027cinder.volume.targets.cxt.CxtAdm\u0027,"},{"line_number":392,"context_line":"            \u0027nvmetadm\u0027: \u0027cinder.volume.targets.nvmet.NVMETAdm\u0027}"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        # set True by manager after successful check_for_setup"},{"line_number":395,"context_line":"        self._initialized \u003d False"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff346bd7_db86d8b9","line":392,"in_reply_to":"ff346bd7_585e8a12","updated":"2017-07-27 12:13:56.000000000","message":"Yes i see your point and I agree with that ! (y)\nWill change it in next PS.","commit_id":"22540e3078b42dfd5bd463458ac3d6e5e5901494"}],"cinder/volume/drivers/lvm.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"12946e64de3ad4973eab88a98cbbe27c094b5d62","unresolved":false,"context_lines":[{"line_number":825,"context_line":"            context,"},{"line_number":826,"context_line":"            volume,"},{"line_number":827,"context_line":"            volume_path)"},{"line_number":828,"context_line":"        if self.configuration.iscsi_helper \u003d\u003d \u0027nvmet\u0027:"},{"line_number":829,"context_line":"            return export_info"},{"line_number":830,"context_line":"        else:"},{"line_number":831,"context_line":"            return {\u0027provider_location\u0027: export_info[\u0027location\u0027],"},{"line_number":832,"context_line":"                    \u0027provider_auth\u0027: export_info[\u0027auth\u0027], }"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def remove_export(self, context, volume):"},{"line_number":835,"context_line":"        self.target_driver.remove_export(context, volume)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f436f4f_23e0c2fa","line":832,"range":{"start_line":828,"start_character":7,"end_line":832,"end_character":59},"updated":"2017-08-17 14:47:02.000000000","message":"I haven\u0027t seen a corresponding Nova change for this, but we can\u0027t just change the response type from a public method like this.  I\u0027m unclear on why you\u0027re doing this anyway, as there\u0027s nothing in the caller to deal with it.","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"b319731b34438bdf8ba122053c8144b0e551eb91","unresolved":false,"context_lines":[{"line_number":825,"context_line":"            context,"},{"line_number":826,"context_line":"            volume,"},{"line_number":827,"context_line":"            volume_path)"},{"line_number":828,"context_line":"        if self.configuration.iscsi_helper \u003d\u003d \u0027nvmet\u0027:"},{"line_number":829,"context_line":"            return export_info"},{"line_number":830,"context_line":"        else:"},{"line_number":831,"context_line":"            return {\u0027provider_location\u0027: export_info[\u0027location\u0027],"},{"line_number":832,"context_line":"                    \u0027provider_auth\u0027: export_info[\u0027auth\u0027], }"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def remove_export(self, context, volume):"},{"line_number":835,"context_line":"        self.target_driver.remove_export(context, volume)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_23c19581","line":832,"range":{"start_line":828,"start_character":7,"end_line":832,"end_character":59},"in_reply_to":"9f436f4f_23e0c2fa","updated":"2017-08-24 14:53:38.000000000","message":"Sorry we missed your comment!\nwe changed the return value since we are using these connection properties (nqn, target_port, target_portal, nvme_transport_type)\nin the NVMe connector (https://review.openstack.org/#/c/482642/16/os_brick/initiator/connectors/nvme.py), and these values are \nbeing set in “NVMET.create_export” (https://review.openstack.org/#/c/482562/21/cinder/volume/targets/nvmet.py)\nIn order to avoid the change in this method, we can use the following approach: \nWe don\u0027t change lvm.py at all, and serialize nvme connction properties and assign it to \"location\" in  nvmet.py \n(e.g. \u0027location\u0027: \u0027%s;%s;%s;%s\u0027 % (nqn, target_port, target_portal, nvme_transport_type)),\nand deserialize it in https://review.openstack.org/#/c/482642/16/os_brick/initiator/connectors/nvme.py:\n\ndeserialization code snibt: http://paste.openstack.org/show/619326/ \n\nWe’ll be happy to get your advice here!","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"60e229e78ba795c81ca3305789c7be38b3848e7f","unresolved":false,"context_lines":[{"line_number":825,"context_line":"            context,"},{"line_number":826,"context_line":"            volume,"},{"line_number":827,"context_line":"            volume_path)"},{"line_number":828,"context_line":"        if self.configuration.iscsi_helper \u003d\u003d \u0027nvmet\u0027:"},{"line_number":829,"context_line":"            return export_info"},{"line_number":830,"context_line":"        else:"},{"line_number":831,"context_line":"            return {\u0027provider_location\u0027: export_info[\u0027location\u0027],"},{"line_number":832,"context_line":"                    \u0027provider_auth\u0027: export_info[\u0027auth\u0027], }"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def remove_export(self, context, volume):"},{"line_number":835,"context_line":"        self.target_driver.remove_export(context, volume)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7f287b81_88d084f9","line":832,"range":{"start_line":828,"start_character":0,"end_line":832,"end_character":59},"updated":"2017-08-23 14:44:08.000000000","message":"Same question as in Patch 20 still stands","commit_id":"29858c790c4379237a5e288786e88283ac3a878e"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"4331bb015a18c4b387eb83b0c58897249d785b47","unresolved":false,"context_lines":[{"line_number":825,"context_line":"            context,"},{"line_number":826,"context_line":"            volume,"},{"line_number":827,"context_line":"            volume_path)"},{"line_number":828,"context_line":"        if self.configuration.iscsi_helper \u003d\u003d \u0027nvmet\u0027:"},{"line_number":829,"context_line":"            return export_info"},{"line_number":830,"context_line":"        else:"},{"line_number":831,"context_line":"            return {\u0027provider_location\u0027: export_info[\u0027location\u0027],"},{"line_number":832,"context_line":"                    \u0027provider_auth\u0027: export_info[\u0027auth\u0027], }"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"    def remove_export(self, context, volume):"},{"line_number":835,"context_line":"        self.target_driver.remove_export(context, volume)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7f287b81_4acfa955","line":832,"range":{"start_line":828,"start_character":0,"end_line":832,"end_character":59},"in_reply_to":"7f287b81_88d084f9","updated":"2017-08-29 10:31:14.000000000","message":"Done","commit_id":"29858c790c4379237a5e288786e88283ac3a878e"}],"cinder/volume/targets/nvme.py":[{"author":{"_account_id":11968,"name":"Aviram Bar-Haim","email":"avirambh@gmail.com","username":"aviramb"},"change_message_id":"5bf79085729e3e293d520396aeaaccbd664e7045","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        }"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @staticmethod"},{"line_number":52,"context_line":"    @utils.synchronized(\u0027lioadm\u0027, external\u003dTrue)"},{"line_number":53,"context_line":"    def _execute(*args, **kwargs):"},{"line_number":54,"context_line":"        \"\"\"Locked execution to prevent racing issues."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_237efaae","line":52,"range":{"start_line":52,"start_character":25,"end_line":52,"end_character":31},"updated":"2017-07-16 11:44:11.000000000","message":"nvmetadm?","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"32459a32d2cd6c93fea20be27029e6384d44359e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        }"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @staticmethod"},{"line_number":52,"context_line":"    @utils.synchronized(\u0027lioadm\u0027, external\u003dTrue)"},{"line_number":53,"context_line":"    def _execute(*args, **kwargs):"},{"line_number":54,"context_line":"        \"\"\"Locked execution to prevent racing issues."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_8496e292","line":52,"range":{"start_line":52,"start_character":25,"end_line":52,"end_character":31},"in_reply_to":"1f1a1f67_237efaae","updated":"2017-07-17 13:33:54.000000000","message":"Done","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":11968,"name":"Aviram Bar-Haim","email":"avirambh@gmail.com","username":"aviramb"},"change_message_id":"5bf79085729e3e293d520396aeaaccbd664e7045","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    @staticmethod"},{"line_number":52,"context_line":"    @utils.synchronized(\u0027lioadm\u0027, external\u003dTrue)"},{"line_number":53,"context_line":"    def _execute(*args, **kwargs):"},{"line_number":54,"context_line":"        \"\"\"Locked execution to prevent racing issues."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        Racing issues are derived from a bug in RTSLib:"},{"line_number":57,"context_line":"            https://github.com/agrover/rtslib-fb/issues/36"},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        return utils.execute(*args, **kwargs)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_e34da29a","line":58,"range":{"start_line":54,"start_character":0,"end_line":58,"end_character":11},"updated":"2017-07-16 11:44:11.000000000","message":"I think that this is for lioadm","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"32459a32d2cd6c93fea20be27029e6384d44359e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    @staticmethod"},{"line_number":52,"context_line":"    @utils.synchronized(\u0027lioadm\u0027, external\u003dTrue)"},{"line_number":53,"context_line":"    def _execute(*args, **kwargs):"},{"line_number":54,"context_line":"        \"\"\"Locked execution to prevent racing issues."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        Racing issues are derived from a bug in RTSLib:"},{"line_number":57,"context_line":"            https://github.com/agrover/rtslib-fb/issues/36"},{"line_number":58,"context_line":"        \"\"\""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        return utils.execute(*args, **kwargs)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_2486ee67","line":58,"range":{"start_line":54,"start_character":0,"end_line":58,"end_character":11},"in_reply_to":"1f1a1f67_e34da29a","updated":"2017-07-17 13:33:54.000000000","message":"Done","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":11968,"name":"Aviram Bar-Haim","email":"avirambh@gmail.com","username":"aviramb"},"change_message_id":"5bf79085729e3e293d520396aeaaccbd664e7045","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                      volume[\u0027id\u0027])"},{"line_number":67,"context_line":"            return"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def create_export(self, context, volume, volume_path):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # Create NVME subsystem for previously created LV"},{"line_number":72,"context_line":"        nvmf_subsystems \u003d self._get_available_nvmf_subsystems()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_c352a63b","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":21},"updated":"2017-07-16 11:44:11.000000000","message":"let\u0027s break this into functions","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"32459a32d2cd6c93fea20be27029e6384d44359e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                      volume[\u0027id\u0027])"},{"line_number":67,"context_line":"            return"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def create_export(self, context, volume, volume_path):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # Create NVME subsystem for previously created LV"},{"line_number":72,"context_line":"        nvmf_subsystems \u003d self._get_available_nvmf_subsystems()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_a499dec4","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":21},"in_reply_to":"1f1a1f67_c352a63b","updated":"2017-07-17 13:33:54.000000000","message":"Done","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":11968,"name":"Aviram Bar-Haim","email":"avirambh@gmail.com","username":"aviramb"},"change_message_id":"5bf79085729e3e293d520396aeaaccbd664e7045","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def ensure_export(self, context, volume, volume_path):"},{"line_number":138,"context_line":"        pass"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def remove_export(self, context, volume):"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        nvmf_subsystem \u003d self._get_nvmf_subsystem(volume[\u0027id\u0027])"},{"line_number":143,"context_line":"        if nvmf_subsystem is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_a3432a6c","line":140,"range":{"start_line":140,"start_character":8,"end_line":140,"end_character":21},"updated":"2017-07-16 11:44:11.000000000","message":"ditto","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"32459a32d2cd6c93fea20be27029e6384d44359e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def ensure_export(self, context, volume, volume_path):"},{"line_number":138,"context_line":"        pass"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def remove_export(self, context, volume):"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        nvmf_subsystem \u003d self._get_nvmf_subsystem(volume[\u0027id\u0027])"},{"line_number":143,"context_line":"        if nvmf_subsystem is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_448c4a7e","line":140,"range":{"start_line":140,"start_character":8,"end_line":140,"end_character":21},"in_reply_to":"1f1a1f67_a3432a6c","updated":"2017-07-17 13:33:54.000000000","message":"Done","commit_id":"c69194ddc34dfef9b4181881f1c8359c94a9f140"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"19370a02015f7a17ec5a31da87634be148d03a57","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from cinder import exception"},{"line_number":14,"context_line":"from cinder.i18n import _"},{"line_number":15,"context_line":"from cinder import utils"},{"line_number":16,"context_line":"from cinder.volume.targets import driver"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_54d5e542","line":13,"updated":"2017-07-18 17:54:09.000000000","message":"See \"import order template\" here:\n\n    https://docs.openstack.org/hacking/latest/user/hacking.html#imports\n\nAll of the imports here should be reorganized per those rules.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"90f9a08df1483de289687fb343c6bd4cf34d8c36","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from cinder import exception"},{"line_number":14,"context_line":"from cinder.i18n import _"},{"line_number":15,"context_line":"from cinder import utils"},{"line_number":16,"context_line":"from cinder.volume.targets import driver"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_9be26ad4","line":13,"in_reply_to":"1f1a1f67_54d5e542","updated":"2017-07-19 13:56:08.000000000","message":"Thanks! I\u0027ll check it","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"19370a02015f7a17ec5a31da87634be148d03a57","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class NVMETAdm(driver.Target):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    \"\"\"Target object for block storage devices with RDMA transport.\"\"\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_3466e9c2","line":30,"updated":"2017-07-18 17:54:09.000000000","message":"Why the name \"nvmetadm\"?  Would this not be better named just \"nvmet\" etc?","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"90f9a08df1483de289687fb343c6bd4cf34d8c36","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class NVMETAdm(driver.Target):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    \"\"\"Target object for block storage devices with RDMA transport.\"\"\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_9b302a58","line":30,"in_reply_to":"1f1a1f67_3466e9c2","updated":"2017-07-19 13:56:08.000000000","message":"Because I think it\u0027s better to make it similar to lioadm and tgtadm. As they all do target management.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"19370a02015f7a17ec5a31da87634be148d03a57","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    \"\"\"Target object for block storage devices with RDMA transport.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    _nvmetcli_subsystems_out_file \u003d \u0027/tmp/get_nvmf_subsystems.json\u0027"},{"line_number":35,"context_line":"    _nvmetcli_subsystems_in_file \u003d \u0027/tmp/create_nvmf_subsystems.json\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    protocol \u003d \u0027nvmetadm\u0027"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_748b4167","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":69},"updated":"2017-07-18 17:54:09.000000000","message":"These need to be generated filenames that are unique per-instance of this class to prevent collisions between multiple instantations of this target driver.\n\nUse tempfile.mkstemp() for these.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"90f9a08df1483de289687fb343c6bd4cf34d8c36","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    \"\"\"Target object for block storage devices with RDMA transport.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    _nvmetcli_subsystems_out_file \u003d \u0027/tmp/get_nvmf_subsystems.json\u0027"},{"line_number":35,"context_line":"    _nvmetcli_subsystems_in_file \u003d \u0027/tmp/create_nvmf_subsystems.json\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    protocol \u003d \u0027nvmetadm\u0027"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_5b84d2d2","line":35,"range":{"start_line":34,"start_character":0,"end_line":35,"end_character":69},"in_reply_to":"1f1a1f67_748b4167","updated":"2017-07-19 13:56:08.000000000","message":"yea, i thought about it, but there\u0027s a limitation when using nvmetcli that we need to update the next state of the server every time we add a new subsystem or delete it.\n# nvmetcli restore $file\n# nvmetcli save $file\nso we need something like a lock and to write on the same place.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"19370a02015f7a17ec5a31da87634be148d03a57","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    _nvmetcli_subsystems_out_file \u003d \u0027/tmp/get_nvmf_subsystems.json\u0027"},{"line_number":35,"context_line":"    _nvmetcli_subsystems_in_file \u003d \u0027/tmp/create_nvmf_subsystems.json\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    protocol \u003d \u0027nvmetadm\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_d4769570","line":37,"updated":"2017-07-18 17:54:09.000000000","message":"\"nvmetadm\" is not a protocol: this should just be \"nvme\" I think?","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ec59f81faa6e83283cd8e017ceb0b9012ef045c1","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if newly_added_subsystem is None:"},{"line_number":75,"context_line":"            LOG.error(\u0027Failed to add subsystem.\u0027)"},{"line_number":76,"context_line":"            raise"},{"line_number":77,"context_line":"        LOG.info(\u0027Added subsystem {0}\u0027.format(newly_added_subsystem))"},{"line_number":78,"context_line":"        return {"},{"line_number":79,"context_line":"            \u0027target_portal\u0027: self.configuration.iscsi_ip_address,"},{"line_number":80,"context_line":"            \u0027nqn\u0027: \"{0}\".format(newly_added_subsystem),"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_68eafdac","line":77,"range":{"start_line":77,"start_character":38,"end_line":77,"end_character":46},"updated":"2017-07-20 13:31:55.000000000","message":"Do not use .format here. Change to , to pass in newly_added_subsystem as an arg to the logger. And change the format string to use %s then.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"6736bd6819053859aff541c0186e3e89488e39d4","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if newly_added_subsystem is None:"},{"line_number":75,"context_line":"            LOG.error(\u0027Failed to add subsystem.\u0027)"},{"line_number":76,"context_line":"            raise"},{"line_number":77,"context_line":"        LOG.info(\u0027Added subsystem {0}\u0027.format(newly_added_subsystem))"},{"line_number":78,"context_line":"        return {"},{"line_number":79,"context_line":"            \u0027target_portal\u0027: self.configuration.iscsi_ip_address,"},{"line_number":80,"context_line":"            \u0027nqn\u0027: \"{0}\".format(newly_added_subsystem),"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff346bd7_527dd4e5","line":77,"range":{"start_line":77,"start_character":38,"end_line":77,"end_character":46},"in_reply_to":"1f1a1f67_68eafdac","updated":"2017-07-21 17:39:39.000000000","message":"why not using .format ? is it like a standard ?","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ec59f81faa6e83283cd8e017ceb0b9012ef045c1","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        nvmf_subsystems[\u0027subsystems\u0027].append(subsystem_section)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        LOG.debug("},{"line_number":129,"context_line":"            \u0027Adding subsystem {0}-{1}\u0027.format(nvmet_subsystem_name,"},{"line_number":130,"context_line":"                                              volume_id))"},{"line_number":131,"context_line":"        LOG.debug("},{"line_number":132,"context_line":"            \u0027Trying to load the following subsystems {0}\u0027.format("}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_88fe7969","line":129,"range":{"start_line":129,"start_character":39,"end_line":129,"end_character":45},"updated":"2017-07-20 13:31:55.000000000","message":"Same throughout.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"19370a02015f7a17ec5a31da87634be148d03a57","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                missing\u003d\u0027initiator\u0027)"},{"line_number":251,"context_line":"        return True"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":254,"context_line":"        data \u003d {"},{"line_number":255,"context_line":"            \u0027volume_backend_name\u0027: \u0027NVMe\u0027,"},{"line_number":256,"context_line":"            \u0027vendor_name\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_d4fb35be","line":253,"updated":"2017-07-18 17:54:09.000000000","message":"This method is not needed for a target driver, this is for volume drivers.","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"90f9a08df1483de289687fb343c6bd4cf34d8c36","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                missing\u003d\u0027initiator\u0027)"},{"line_number":251,"context_line":"        return True"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def get_volume_stats(self, refresh\u003dFalse):"},{"line_number":254,"context_line":"        data \u003d {"},{"line_number":255,"context_line":"            \u0027volume_backend_name\u0027: \u0027NVMe\u0027,"},{"line_number":256,"context_line":"            \u0027vendor_name\u0027: \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1f1a1f67_9b670a4e","line":253,"in_reply_to":"1f1a1f67_d4fb35be","updated":"2017-07-19 13:56:08.000000000","message":"Done","commit_id":"b4ee926c3bd0ce022bb3df09641eea58c5a57285"}],"cinder/volume/targets/nvmet.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b05889649b4784aa8fe4e76f68a37529fc96966a","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class NVMET(driver.Target):"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    \"\"\"Target object for block storage devices with RDMA transport.\"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    _nvmetcli_subsystems_out_file \u003d \u0027/tmp/get_nvmf_subsystems.json\u0027"},{"line_number":52,"context_line":"    _nvmetcli_subsystems_in_file \u003d \u0027/tmp/create_nvmf_subsystems.json\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"df3967d1_3379f9fb","line":49,"updated":"2017-08-01 01:18:50.000000000","message":"The naming seems confusing, NVMET should be able to work with other fabric (e.g. FC), right?  please revise and make it more generic.","commit_id":"f902e4328bf693c7220185979fb59895844ce5ce"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"1106bdd8b3c31a9ef5b816de0e88deb5747fd887","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            \"namespaces\": ["},{"line_number":159,"context_line":"                {"},{"line_number":160,"context_line":"                    \"device\": {"},{"line_number":161,"context_line":"                        \"nguid\": str(uuid.uuid4()),"},{"line_number":162,"context_line":"                        \"path\": volume_path,"},{"line_number":163,"context_line":"                    },"},{"line_number":164,"context_line":"                    \"enable\": 1,"}],"source_content_type":"text/x-python","patch_set":17,"id":"df3967d1_09db0b4f","line":161,"range":{"start_line":161,"start_character":33,"end_line":161,"end_character":50},"updated":"2017-08-03 08:44:10.000000000","message":"consider to use uuidutils.generate_uuid","commit_id":"34f96aa15e4014ca93692b1184c003b0cd925872"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"611512d09c5e5344435fdae7fc4d9fec87202609","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            \"namespaces\": ["},{"line_number":159,"context_line":"                {"},{"line_number":160,"context_line":"                    \"device\": {"},{"line_number":161,"context_line":"                        \"nguid\": str(uuid.uuid4()),"},{"line_number":162,"context_line":"                        \"path\": volume_path,"},{"line_number":163,"context_line":"                    },"},{"line_number":164,"context_line":"                    \"enable\": 1,"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf3e73b7_5cb71a88","line":161,"range":{"start_line":161,"start_character":33,"end_line":161,"end_character":50},"in_reply_to":"df3967d1_09db0b4f","updated":"2017-08-06 13:55:12.000000000","message":"Done","commit_id":"34f96aa15e4014ca93692b1184c003b0cd925872"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"1106bdd8b3c31a9ef5b816de0e88deb5747fd887","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            LOG.debug("},{"line_number":242,"context_line":"                \u0027Newly loaded subsystems will be: %s\u0027, nvmf_subsystems)"},{"line_number":243,"context_line":"            with open(self._nvmetcli_subsystems_in_file, \u0027w\u0027) as json_file:"},{"line_number":244,"context_line":"                json.dump(nvmf_subsystems, json_file)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            cmd \u003d ["},{"line_number":247,"context_line":"                \u0027nvmetcli\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"df3967d1_89c7fb64","line":244,"range":{"start_line":244,"start_character":16,"end_line":244,"end_character":25},"updated":"2017-08-03 08:44:10.000000000","message":"consider to use oslo_serialization json dump","commit_id":"34f96aa15e4014ca93692b1184c003b0cd925872"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"611512d09c5e5344435fdae7fc4d9fec87202609","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            LOG.debug("},{"line_number":242,"context_line":"                \u0027Newly loaded subsystems will be: %s\u0027, nvmf_subsystems)"},{"line_number":243,"context_line":"            with open(self._nvmetcli_subsystems_in_file, \u0027w\u0027) as json_file:"},{"line_number":244,"context_line":"                json.dump(nvmf_subsystems, json_file)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            cmd \u003d ["},{"line_number":247,"context_line":"                \u0027nvmetcli\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf3e73b7_dcaaea17","line":244,"range":{"start_line":244,"start_character":16,"end_line":244,"end_character":25},"in_reply_to":"df3967d1_89c7fb64","updated":"2017-08-06 13:55:12.000000000","message":"Will be fixed in the import section","commit_id":"34f96aa15e4014ca93692b1184c003b0cd925872"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"1106bdd8b3c31a9ef5b816de0e88deb5747fd887","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                \u0027restore\u0027,"},{"line_number":249,"context_line":"                self._nvmetcli_subsystems_in_file]"},{"line_number":250,"context_line":"            try:"},{"line_number":251,"context_line":"                (out, err) \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":252,"context_line":"            except putils.ProcessExecutionError:"},{"line_number":253,"context_line":"                LOG.error(\u0027Failed to run nvmetcli restore.\u0027)"},{"line_number":254,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"df3967d1_69c4d75f","line":251,"range":{"start_line":251,"start_character":16,"end_line":251,"end_character":17},"updated":"2017-08-03 08:44:10.000000000","message":"redundant","commit_id":"34f96aa15e4014ca93692b1184c003b0cd925872"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"611512d09c5e5344435fdae7fc4d9fec87202609","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                \u0027restore\u0027,"},{"line_number":249,"context_line":"                self._nvmetcli_subsystems_in_file]"},{"line_number":250,"context_line":"            try:"},{"line_number":251,"context_line":"                (out, err) \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":252,"context_line":"            except putils.ProcessExecutionError:"},{"line_number":253,"context_line":"                LOG.error(\u0027Failed to run nvmetcli restore.\u0027)"},{"line_number":254,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf3e73b7_9c622216","line":251,"range":{"start_line":251,"start_character":16,"end_line":251,"end_character":17},"in_reply_to":"df3967d1_69c4d75f","updated":"2017-08-06 13:55:12.000000000","message":"Done","commit_id":"34f96aa15e4014ca93692b1184c003b0cd925872"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"1106bdd8b3c31a9ef5b816de0e88deb5747fd887","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            \u0027save\u0027,"},{"line_number":271,"context_line":"            self._nvmetcli_subsystems_out_file]"},{"line_number":272,"context_line":"        try:"},{"line_number":273,"context_line":"            (out, err) \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":274,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":275,"context_line":"            LOG.error(\u0027Failed to run nvmetcli save\u0027)"},{"line_number":276,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"df3967d1_49a353b3","line":273,"range":{"start_line":273,"start_character":12,"end_line":273,"end_character":13},"updated":"2017-08-03 08:44:10.000000000","message":"ditto","commit_id":"34f96aa15e4014ca93692b1184c003b0cd925872"},{"author":{"_account_id":18937,"name":"Rawan Herzallah","email":"rawan.a.herzallah@gmail.com","username":"RawanHerzallah"},"change_message_id":"611512d09c5e5344435fdae7fc4d9fec87202609","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            \u0027save\u0027,"},{"line_number":271,"context_line":"            self._nvmetcli_subsystems_out_file]"},{"line_number":272,"context_line":"        try:"},{"line_number":273,"context_line":"            (out, err) \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":274,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":275,"context_line":"            LOG.error(\u0027Failed to run nvmetcli save\u0027)"},{"line_number":276,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf3e73b7_5c6cba07","line":273,"range":{"start_line":273,"start_character":12,"end_line":273,"end_character":13},"in_reply_to":"df3967d1_49a353b3","updated":"2017-08-06 13:55:12.000000000","message":"Done","commit_id":"34f96aa15e4014ca93692b1184c003b0cd925872"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"0abefadfc4f78304faf2d78387d2cfd71bc0b841","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from oslo_utils import uuidutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"nvmet_opts \u003d ["},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027nvmet_port_id\u0027,"},{"line_number":31,"context_line":"               default\u003d1,"},{"line_number":32,"context_line":"               help\u003d\u0027The port that the NVMe target is listening on\u0027),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_4f7fa0df","line":30,"updated":"2017-08-15 18:37:17.000000000","message":"Should use cfg.PortOpt here.","commit_id":"df35cad47419956332003b0c3927837116d834c8"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"51ab71570dea302ff46f01cb7d5e2d7217dfd11e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from oslo_utils import uuidutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"nvmet_opts \u003d ["},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027nvmet_port_id\u0027,"},{"line_number":31,"context_line":"               default\u003d1,"},{"line_number":32,"context_line":"               help\u003d\u0027The port that the NVMe target is listening on\u0027),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_4e9d3808","line":30,"in_reply_to":"9f436f4f_4f7fa0df","updated":"2017-08-17 07:27:07.000000000","message":"Done","commit_id":"df35cad47419956332003b0c3927837116d834c8"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"0abefadfc4f78304faf2d78387d2cfd71bc0b841","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    \"\"\"Target object for block storage devices with RDMA transport.\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    _nvmetcli_subsystems_out_file \u003d \u0027/tmp/get_nvmf_subsystems.json\u0027"},{"line_number":58,"context_line":"    _nvmetcli_subsystems_in_file \u003d \u0027/tmp/create_nvmf_subsystems.json\u0027"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    protocol \u003d \u0027nvmet\u0027"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_cfd830f0","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":69},"updated":"2017-08-15 18:37:17.000000000","message":"These files should be generated with a call like tempfile.mkstemp instead of having hard-coded names.  This will let the temp files go into different directories, and ensure there aren\u0027t collisions between multiple processes.","commit_id":"df35cad47419956332003b0c3927837116d834c8"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"51ab71570dea302ff46f01cb7d5e2d7217dfd11e","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    \"\"\"Target object for block storage devices with RDMA transport.\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    _nvmetcli_subsystems_out_file \u003d \u0027/tmp/get_nvmf_subsystems.json\u0027"},{"line_number":58,"context_line":"    _nvmetcli_subsystems_in_file \u003d \u0027/tmp/create_nvmf_subsystems.json\u0027"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    protocol \u003d \u0027nvmet\u0027"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"9f436f4f_ee850cae","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":69},"in_reply_to":"9f436f4f_cfd830f0","updated":"2017-08-17 07:27:07.000000000","message":"Done","commit_id":"df35cad47419956332003b0c3927837116d834c8"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":30,"context_line":"nvmet_opts \u003d ["},{"line_number":31,"context_line":"    cfg.PortOpt(\u0027nvmet_port_id\u0027,"},{"line_number":32,"context_line":"                default\u003d1,"},{"line_number":33,"context_line":"                help\u003d\u0027The port that the NVMe target is listening on\u0027),"},{"line_number":34,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":35,"context_line":"               default\u003d10,"},{"line_number":36,"context_line":"               help\u003d\u0027The namespace id associated with the subsystem \u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_2bb1a390","line":33,"range":{"start_line":33,"start_character":64,"end_line":33,"end_character":67},"updated":"2017-08-22 21:05:01.000000000","message":"Please add periods for these strings at EOL.","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":30,"context_line":"nvmet_opts \u003d ["},{"line_number":31,"context_line":"    cfg.PortOpt(\u0027nvmet_port_id\u0027,"},{"line_number":32,"context_line":"                default\u003d1,"},{"line_number":33,"context_line":"                help\u003d\u0027The port that the NVMe target is listening on\u0027),"},{"line_number":34,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":35,"context_line":"               default\u003d10,"},{"line_number":36,"context_line":"               help\u003d\u0027The namespace id associated with the subsystem \u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_f5180ed4","line":33,"range":{"start_line":33,"start_character":64,"end_line":33,"end_character":67},"in_reply_to":"7f287b81_2bb1a390","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":35,"context_line":"               default\u003d10,"},{"line_number":36,"context_line":"               help\u003d\u0027The namespace id associated with the subsystem \u0027"},{"line_number":37,"context_line":"                    \u0027that will be created with the path for the LVM volume\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027nvmet_subsystem_name\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027default_subsys\u0027,"},{"line_number":40,"context_line":"               help\u003d\u0027The prefix for the NVMe subsystem that will created\u0027),"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_8b677726","line":37,"range":{"start_line":37,"start_character":72,"end_line":37,"end_character":74},"updated":"2017-08-22 21:05:01.000000000","message":"Ditto","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.IntOpt(\u0027nvmet_ns_id\u0027,"},{"line_number":35,"context_line":"               default\u003d10,"},{"line_number":36,"context_line":"               help\u003d\u0027The namespace id associated with the subsystem \u0027"},{"line_number":37,"context_line":"                    \u0027that will be created with the path for the LVM volume\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027nvmet_subsystem_name\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027default_subsys\u0027,"},{"line_number":40,"context_line":"               help\u003d\u0027The prefix for the NVMe subsystem that will created\u0027),"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_d50d1291","line":37,"range":{"start_line":37,"start_character":72,"end_line":37,"end_character":74},"in_reply_to":"7f287b81_8b677726","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                    \u0027that will be created with the path for the LVM volume\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027nvmet_subsystem_name\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027default_subsys\u0027,"},{"line_number":40,"context_line":"               help\u003d\u0027The prefix for the NVMe subsystem that will created\u0027),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027nvme_transport_type\u0027,"},{"line_number":42,"context_line":"               default\u003d\u0027rdma\u0027,"},{"line_number":43,"context_line":"               choices\u003d[\u0027rdma\u0027],"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_6b6c4b08","line":40,"range":{"start_line":40,"start_character":64,"end_line":40,"end_character":72},"updated":"2017-08-22 21:05:01.000000000","message":"will be created.","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                    \u0027that will be created with the path for the LVM volume\u0027),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027nvmet_subsystem_name\u0027,"},{"line_number":39,"context_line":"               default\u003d\u0027default_subsys\u0027,"},{"line_number":40,"context_line":"               help\u003d\u0027The prefix for the NVMe subsystem that will created\u0027),"},{"line_number":41,"context_line":"    cfg.StrOpt(\u0027nvme_transport_type\u0027,"},{"line_number":42,"context_line":"               default\u003d\u0027rdma\u0027,"},{"line_number":43,"context_line":"               choices\u003d[\u0027rdma\u0027],"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_b51286b0","line":40,"range":{"start_line":40,"start_character":64,"end_line":40,"end_character":72},"in_reply_to":"7f287b81_6b6c4b08","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":42,"context_line":"               default\u003d\u0027rdma\u0027,"},{"line_number":43,"context_line":"               choices\u003d[\u0027rdma\u0027],"},{"line_number":44,"context_line":"               help\u003d\u0027Network fabric being used for an NVMe-over-Fabrics\u0027"},{"line_number":45,"context_line":"                    \u0027 network.\u0027),"},{"line_number":46,"context_line":"]"},{"line_number":47,"context_line":"CONF \u003d cfg.CONF"},{"line_number":48,"context_line":"CONF.register_opts(nvmet_opts, group\u003dconfiguration.SHARED_CONF_GROUP)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_ab4b5385","line":45,"range":{"start_line":45,"start_character":20,"end_line":45,"end_character":22},"updated":"2017-08-22 21:05:01.000000000","message":"Move blank to the end of the previous line for consistency.","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":42,"context_line":"               default\u003d\u0027rdma\u0027,"},{"line_number":43,"context_line":"               choices\u003d[\u0027rdma\u0027],"},{"line_number":44,"context_line":"               help\u003d\u0027Network fabric being used for an NVMe-over-Fabrics\u0027"},{"line_number":45,"context_line":"                    \u0027 network.\u0027),"},{"line_number":46,"context_line":"]"},{"line_number":47,"context_line":"CONF \u003d cfg.CONF"},{"line_number":48,"context_line":"CONF.register_opts(nvmet_opts, group\u003dconfiguration.SHARED_CONF_GROUP)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_351e96ba","line":45,"range":{"start_line":45,"start_character":20,"end_line":45,"end_character":22},"in_reply_to":"7f287b81_ab4b5385","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                self.nvmet_subsystem_name,"},{"line_number":112,"context_line":"                self.nvmet_ns_id, volume[\u0027id\u0027], volume_path)"},{"line_number":113,"context_line":"            if newly_added_subsystem is None:"},{"line_number":114,"context_line":"                LOG.error(\u0027Failed to add subsystem.\u0027)"},{"line_number":115,"context_line":"                raise"},{"line_number":116,"context_line":"            LOG.info(\u0027Added subsystem %s\u0027, newly_added_subsystem)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_8b1e576e","line":114,"range":{"start_line":114,"start_character":26,"end_line":114,"end_character":52},"updated":"2017-08-22 21:05:01.000000000","message":"Should indicate the subsystem here.","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                self.nvmet_subsystem_name,"},{"line_number":112,"context_line":"                self.nvmet_ns_id, volume[\u0027id\u0027], volume_path)"},{"line_number":113,"context_line":"            if newly_added_subsystem is None:"},{"line_number":114,"context_line":"                LOG.error(\u0027Failed to add subsystem.\u0027)"},{"line_number":115,"context_line":"                raise"},{"line_number":116,"context_line":"            LOG.info(\u0027Added subsystem %s\u0027, newly_added_subsystem)"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_d5e99280","line":114,"range":{"start_line":114,"start_character":26,"end_line":114,"end_character":52},"in_reply_to":"7f287b81_8b1e576e","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                              volume_id)}"},{"line_number":170,"context_line":"        nvmf_subsystems[\u0027subsystems\u0027].append(subsystem_section)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        LOG.debug("},{"line_number":173,"context_line":"            \u0027Adding subsystem %s-%s\u0027, nvmet_subsystem_name,"},{"line_number":174,"context_line":"            volume_id)"},{"line_number":175,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_0b0a6725","line":172,"range":{"start_line":172,"start_character":12,"end_line":172,"end_character":18},"updated":"2017-08-22 21:05:01.000000000","message":"This seems like it should be a LOG.info .","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                              volume_id)}"},{"line_number":170,"context_line":"        nvmf_subsystems[\u0027subsystems\u0027].append(subsystem_section)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        LOG.debug("},{"line_number":173,"context_line":"            \u0027Adding subsystem %s-%s\u0027, nvmet_subsystem_name,"},{"line_number":174,"context_line":"            volume_id)"},{"line_number":175,"context_line":"        LOG.debug("}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_75009e35","line":172,"range":{"start_line":172,"start_character":12,"end_line":172,"end_character":18},"in_reply_to":"7f287b81_0b0a6725","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":191,"context_line":"            LOG.error(\u0027Failed to run nvmetcli restore.\u0027)"},{"line_number":192,"context_line":"            raise"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        return \u0027%s-%s\u0027 % (nvmet_subsystem_name, volume_id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_560db635","line":191,"range":{"start_line":191,"start_character":22,"end_line":191,"end_character":55},"updated":"2017-08-22 21:05:01.000000000","message":"Would append the error information here.","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":191,"context_line":"            LOG.error(\u0027Failed to run nvmetcli restore.\u0027)"},{"line_number":192,"context_line":"            raise"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        return \u0027%s-%s\u0027 % (nvmet_subsystem_name, volume_id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_7894158c","line":191,"range":{"start_line":191,"start_character":22,"end_line":191,"end_character":55},"in_reply_to":"7f287b81_560db635","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                                                  volume[\u0027id\u0027])"},{"line_number":205,"context_line":"        if nvmf_subsystem is None:"},{"line_number":206,"context_line":"            LOG.info(\"Skipping remove_export. No NVMe subsystem \""},{"line_number":207,"context_line":"                     \"for volume %s\", volume[\u0027id\u0027])"},{"line_number":208,"context_line":"            volume[\u0027provider_location\u0027] \u003d None"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_363b4ad2","line":207,"range":{"start_line":207,"start_character":26,"end_line":207,"end_character":32},"updated":"2017-08-22 21:05:01.000000000","message":"volume:","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                                                  volume[\u0027id\u0027])"},{"line_number":205,"context_line":"        if nvmf_subsystem is None:"},{"line_number":206,"context_line":"            LOG.info(\"Skipping remove_export. No NVMe subsystem \""},{"line_number":207,"context_line":"                     \"for volume %s\", volume[\u0027id\u0027])"},{"line_number":208,"context_line":"            volume[\u0027provider_location\u0027] \u003d None"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_7573fee8","line":207,"range":{"start_line":207,"start_character":26,"end_line":207,"end_character":32},"in_reply_to":"7f287b81_363b4ad2","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                nvmf_subsystems, subsystem_name)"},{"line_number":218,"context_line":"            if removed_subsystem is None:"},{"line_number":219,"context_line":"                LOG.error("},{"line_number":220,"context_line":"                    \u0027Failed to delete subsystem %s\u0027, subsystem_name)"},{"line_number":221,"context_line":"                raise"},{"line_number":222,"context_line":"            elif removed_subsystem \u003d\u003d subsystem_name:"},{"line_number":223,"context_line":"                LOG.info("}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_d6188676","line":220,"range":{"start_line":220,"start_character":38,"end_line":220,"end_character":47},"updated":"2017-08-22 21:05:01.000000000","message":"subsystem:","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                nvmf_subsystems, subsystem_name)"},{"line_number":218,"context_line":"            if removed_subsystem is None:"},{"line_number":219,"context_line":"                LOG.error("},{"line_number":220,"context_line":"                    \u0027Failed to delete subsystem %s\u0027, subsystem_name)"},{"line_number":221,"context_line":"                raise"},{"line_number":222,"context_line":"            elif removed_subsystem \u003d\u003d subsystem_name:"},{"line_number":223,"context_line":"                LOG.info("}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_f5500e35","line":220,"range":{"start_line":220,"start_character":38,"end_line":220,"end_character":47},"in_reply_to":"7f287b81_d6188676","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                raise"},{"line_number":222,"context_line":"            elif removed_subsystem \u003d\u003d subsystem_name:"},{"line_number":223,"context_line":"                LOG.info("},{"line_number":224,"context_line":"                    \u0027Managed to delete subsystem %s\u0027, subsystem_name)"},{"line_number":225,"context_line":"                volume[\u0027provider_location\u0027] \u003d None"},{"line_number":226,"context_line":"                return removed_subsystem"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_b64cda76","line":224,"range":{"start_line":224,"start_character":21,"end_line":224,"end_character":49},"updated":"2017-08-22 21:05:01.000000000","message":"Successfully deleted subsystem: %s","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                raise"},{"line_number":222,"context_line":"            elif removed_subsystem \u003d\u003d subsystem_name:"},{"line_number":223,"context_line":"                LOG.info("},{"line_number":224,"context_line":"                    \u0027Managed to delete subsystem %s\u0027, subsystem_name)"},{"line_number":225,"context_line":"                volume[\u0027provider_location\u0027] \u003d None"},{"line_number":226,"context_line":"                return removed_subsystem"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_d5451272","line":224,"range":{"start_line":224,"start_character":21,"end_line":224,"end_character":49},"in_reply_to":"7f287b81_b64cda76","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        try:"},{"line_number":276,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":277,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":278,"context_line":"            LOG.error(\u0027Failed to run nvmetcli save\u0027)"},{"line_number":279,"context_line":"            raise"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        cmd \u003d [\u0027cat\u0027, tmp_file_path]"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_d6464650","line":278,"range":{"start_line":278,"start_character":23,"end_line":278,"end_character":50},"updated":"2017-08-22 21:05:01.000000000","message":"Please append the error encountered.","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        try:"},{"line_number":276,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":277,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":278,"context_line":"            LOG.error(\u0027Failed to run nvmetcli save\u0027)"},{"line_number":279,"context_line":"            raise"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        cmd \u003d [\u0027cat\u0027, tmp_file_path]"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_b8a95de0","line":278,"range":{"start_line":278,"start_character":23,"end_line":278,"end_character":50},"in_reply_to":"7f287b81_d6464650","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1bd647004e90fd5801c7f0428607f7286dd767d4","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        try:"},{"line_number":283,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":284,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":285,"context_line":"            LOG.error(\u0027Failed to read %s\u0027.format(tmp_file_path))"},{"line_number":286,"context_line":"            raise"},{"line_number":287,"context_line":"        nvmf_subsystems \u003d json.loads(out)"},{"line_number":288,"context_line":"        return nvmf_subsystems"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_b675fa9a","line":285,"range":{"start_line":285,"start_character":33,"end_line":285,"end_character":37},"updated":"2017-08-22 21:05:01.000000000","message":"read:","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"},{"author":{"_account_id":22948,"name":"Hamdy Khader","email":"hamdyk@mellanox.com","username":"hamdyk"},"change_message_id":"36f7ff073ef134ac97be0850c79f18c47a172688","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        try:"},{"line_number":283,"context_line":"            out, err \u003d self._execute(*cmd, run_as_root\u003dTrue)"},{"line_number":284,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":285,"context_line":"            LOG.error(\u0027Failed to read %s\u0027.format(tmp_file_path))"},{"line_number":286,"context_line":"            raise"},{"line_number":287,"context_line":"        nvmf_subsystems \u003d json.loads(out)"},{"line_number":288,"context_line":"        return nvmf_subsystems"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_189bd1c9","line":285,"range":{"start_line":285,"start_character":33,"end_line":285,"end_character":37},"in_reply_to":"7f287b81_b675fa9a","updated":"2017-08-23 13:38:48.000000000","message":"Done","commit_id":"675f44b21713dcf0310e880e11624554ddaaeb1a"}]}
