)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d00994b8f2d6bde44aa2f446489e2edc8fc308a","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Zohar Mamedov \u003czohar.cloud@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-02-23 13:08:58 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NVMeOF connector compatibility fix"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Bug: Issue 1916264"},{"line_number":10,"context_line":"Change-Id: I94c00afc80f20965a0b391ee3bf21162b827bd31"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"450a669e_7758eb24","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":34},"updated":"2021-02-23 13:57:31.000000000","message":"-1: No one liners for commit message fixes.\nCommit message must explain visible effects of the issue, the cause of the issue, and the fix.\n\n-1: This is also missing a release note.","commit_id":"fea32f938c353a191948c078a7e76aeb39ac3306"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"e8a25e78d119dfa01aef3fde7b1e134c5376398d","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Zohar Mamedov \u003czohar.cloud@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2021-02-23 13:08:58 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NVMeOF connector compatibility fix"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Bug: Issue 1916264"},{"line_number":10,"context_line":"Change-Id: I94c00afc80f20965a0b391ee3bf21162b827bd31"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"f2464b6f_8bcb1e5f","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":34},"in_reply_to":"450a669e_7758eb24","updated":"2021-02-23 14:59:11.000000000","message":"How about the following commit message:\n\nNVMeOF connector driver connection information compatibility fix\n\nMerges the original nvmeof connector with the refactor change \"NVMeOF Connector support MDRAID replication\" such that the new features introduced in the mdraid+ change are only used when \u0027volume_replicas\u0027 is specified in the connection information.\n\nCloses-Bug: #1916264\n\n\nAlso please, what is the correct way to add a release note for this?","commit_id":"fea32f938c353a191948c078a7e76aeb39ac3306"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0d00994b8f2d6bde44aa2f446489e2edc8fc308a","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NVMeOF connector compatibility fix"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Bug: Issue 1916264"},{"line_number":10,"context_line":"Change-Id: I94c00afc80f20965a0b391ee3bf21162b827bd31"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"746989d8_1b9eeb37","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":18},"updated":"2021-02-23 13:57:31.000000000","message":"-1: Please use the correct metadata [1]:\n  Closes-Bug: #1916264\n\n[1]: https://wiki.openstack.org/wiki/GitCommitMessages#Including_external_references","commit_id":"fea32f938c353a191948c078a7e76aeb39ac3306"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"e8a25e78d119dfa01aef3fde7b1e134c5376398d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"NVMeOF connector compatibility fix"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Bug: Issue 1916264"},{"line_number":10,"context_line":"Change-Id: I94c00afc80f20965a0b391ee3bf21162b827bd31"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"e347a0c1_b42ae640","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":18},"in_reply_to":"746989d8_1b9eeb37","updated":"2021-02-23 14:59:11.000000000","message":"thank you! will include in next patchset","commit_id":"fea32f938c353a191948c078a7e76aeb39ac3306"}],"os_brick/initiator/connectors/nvmeof.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"fe6cdc32329509a19121166599d7e700e5f652f2","unresolved":true,"context_lines":[{"line_number":105,"context_line":"        except IOError:"},{"line_number":106,"context_line":"            try:"},{"line_number":107,"context_line":"                out, err \u003d self._execute("},{"line_number":108,"context_line":"                    \u0027nvme\u0027, \u0027gen-hostuuid\u0027,"},{"line_number":109,"context_line":"                    root_helper\u003dself._root_helper, run_as_root\u003dTrue)"},{"line_number":110,"context_line":"                host_nqn \u003d out.strip()"},{"line_number":111,"context_line":"                with open(\u0027/etc/nvme/hostnqn\u0027, \u0027w\u0027) as f:"}],"source_content_type":"text/x-python","patch_set":5,"id":"60edefd6_90ae30c7","side":"PARENT","line":108,"range":{"start_line":108,"start_character":29,"end_line":108,"end_character":41},"updated":"2021-02-25 18:36:38.000000000","message":"glad you found this","commit_id":"28c200a8d3c43da04c70eba18269060af44de402"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"c647e50da9b22902f3df3d610c9bbb72b0b18049","unresolved":true,"context_lines":[{"line_number":301,"context_line":"        :returns: dict"},{"line_number":302,"context_line":"        \"\"\""},{"line_number":303,"context_line":"        if connection_properties.get(\u0027volume_replicas\u0027):  # compatibility"},{"line_number":304,"context_line":"            return self.connect_volume_plus(connection_properties)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        current_nvme_devices \u003d self._get_nvme_devices()"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"d648b0b9_3f767404","line":304,"updated":"2021-02-26 12:34:16.000000000","message":"I would prefer you rename this to something internal, as the name is close to connect_volume() which is a contracted API that nova calls.  Naming this connect_volume_plus() makes it seem like it\u0027s a contract API for os-bric connectors, which it\u0027s not.","commit_id":"bd6ab8000dded0310e79df2537897788e0995db7"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"45d97c4e416b276ee2aa4378796f2f9dc74589be","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        :returns: dict"},{"line_number":302,"context_line":"        \"\"\""},{"line_number":303,"context_line":"        if connection_properties.get(\u0027volume_replicas\u0027):  # compatibility"},{"line_number":304,"context_line":"            return self.connect_volume_plus(connection_properties)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        current_nvme_devices \u003d self._get_nvme_devices()"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"690ba15d_eaeea187","line":304,"in_reply_to":"d648b0b9_3f767404","updated":"2021-02-28 09:11:51.000000000","message":"Ok, renaming it to _connect_volume_v2() - (assuming that prepending _ is good enough to make it internal and disambiguous with connect_volume contracted API) let me know if you had something else in mind","commit_id":"bd6ab8000dded0310e79df2537897788e0995db7"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"c647e50da9b22902f3df3d610c9bbb72b0b18049","unresolved":true,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    @utils.trace"},{"line_number":461,"context_line":"    def disconnect_volume_plus(self, connection_properties, device_info,"},{"line_number":462,"context_line":"                               force\u003dFalse, ignore_errors\u003dFalse):"},{"line_number":463,"context_line":"        device_path \u003d None"},{"line_number":464,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":465,"context_line":"        if device_info and device_info.get(\u0027path\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba041509_85f03cde","line":462,"updated":"2021-02-26 12:34:16.000000000","message":"same","commit_id":"bd6ab8000dded0310e79df2537897788e0995db7"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"45d97c4e416b276ee2aa4378796f2f9dc74589be","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    @utils.trace"},{"line_number":461,"context_line":"    def disconnect_volume_plus(self, connection_properties, device_info,"},{"line_number":462,"context_line":"                               force\u003dFalse, ignore_errors\u003dFalse):"},{"line_number":463,"context_line":"        device_path \u003d None"},{"line_number":464,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":465,"context_line":"        if device_info and device_info.get(\u0027path\u0027):"}],"source_content_type":"text/x-python","patch_set":5,"id":"f48a638b_536a1957","line":462,"in_reply_to":"ba041509_85f03cde","updated":"2021-02-28 09:11:51.000000000","message":"Done","commit_id":"bd6ab8000dded0310e79df2537897788e0995db7"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"c647e50da9b22902f3df3d610c9bbb72b0b18049","unresolved":true,"context_lines":[{"line_number":475,"context_line":"            if self._get_fs_type(device_path) \u003d\u003d \u0027linux_raid_member\u0027:"},{"line_number":476,"context_line":"                NVMeOFConnector.end_raid(self, device_path)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def extend_volume_plus(self, connection_properties):"},{"line_number":479,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        if volume_replicas and len(volume_replicas) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":5,"id":"46932b6f_2bbef0b1","line":478,"updated":"2021-02-26 12:34:16.000000000","message":"same","commit_id":"bd6ab8000dded0310e79df2537897788e0995db7"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"45d97c4e416b276ee2aa4378796f2f9dc74589be","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            if self._get_fs_type(device_path) \u003d\u003d \u0027linux_raid_member\u0027:"},{"line_number":476,"context_line":"                NVMeOFConnector.end_raid(self, device_path)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def extend_volume_plus(self, connection_properties):"},{"line_number":479,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        if volume_replicas and len(volume_replicas) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":5,"id":"cabcdf6d_7adbf9f5","line":478,"in_reply_to":"46932b6f_2bbef0b1","updated":"2021-02-28 09:11:51.000000000","message":"Done","commit_id":"bd6ab8000dded0310e79df2537897788e0995db7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4ed1a72ea118582defa647b752dcc4c334a96339","unresolved":true,"context_lines":[{"line_number":414,"context_line":"            raise exception.VolumePathsNotFound()"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    @utils.trace"},{"line_number":417,"context_line":"    def _connect_volume_v2(self, connection_properties):"},{"line_number":418,"context_line":"        \"\"\"connect to volume on host"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        connection_properties for NVMe-oF must include:"}],"source_content_type":"text/x-python","patch_set":6,"id":"c048add4_c6801f5f","line":417,"range":{"start_line":417,"start_character":24,"end_line":417,"end_character":26},"updated":"2021-03-02 10:50:17.000000000","message":"I\u0027m not sure that we need such suffix, but I don\u0027t have a better idea for it","commit_id":"01c61108f261faa42e31c98298b860bb7cf651c8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"3b39b7f19ffe224e859569fce8fb9630a9ab82bb","unresolved":true,"context_lines":[{"line_number":414,"context_line":"            raise exception.VolumePathsNotFound()"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    @utils.trace"},{"line_number":417,"context_line":"    def _connect_volume_v2(self, connection_properties):"},{"line_number":418,"context_line":"        \"\"\"connect to volume on host"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        connection_properties for NVMe-oF must include:"}],"source_content_type":"text/x-python","patch_set":6,"id":"4bfcaa76_93f40d0d","line":417,"range":{"start_line":417,"start_character":24,"end_line":417,"end_character":26},"in_reply_to":"01f5c51d_0232d1b4","updated":"2021-03-02 13:00:41.000000000","message":"Rather than \u0027v2\u0027 (which may be confused as having something to do with the Block Storage API v2), I\u0027d suggest a functional name, something like \u0027_connect_volume_with_replicas\u0027 here and throughout.","commit_id":"01c61108f261faa42e31c98298b860bb7cf651c8"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"39c9c921b6672f443fe23e112429d19a6b2e7efc","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            raise exception.VolumePathsNotFound()"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    @utils.trace"},{"line_number":417,"context_line":"    def _connect_volume_v2(self, connection_properties):"},{"line_number":418,"context_line":"        \"\"\"connect to volume on host"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        connection_properties for NVMe-oF must include:"}],"source_content_type":"text/x-python","patch_set":6,"id":"6f7edd7a_fb29fe11","line":417,"range":{"start_line":417,"start_character":24,"end_line":417,"end_character":26},"in_reply_to":"4bfcaa76_93f40d0d","updated":"2021-03-02 16:11:32.000000000","message":"ok, i will rename it to \u0027_connect_volume_replicated\u0027, hopefully that should be good enough","commit_id":"01c61108f261faa42e31c98298b860bb7cf651c8"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"37759c1dbd2efaa1b1ef2543fea28105fb7a2c2d","unresolved":true,"context_lines":[{"line_number":414,"context_line":"            raise exception.VolumePathsNotFound()"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    @utils.trace"},{"line_number":417,"context_line":"    def _connect_volume_v2(self, connection_properties):"},{"line_number":418,"context_line":"        \"\"\"connect to volume on host"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        connection_properties for NVMe-oF must include:"}],"source_content_type":"text/x-python","patch_set":6,"id":"01f5c51d_0232d1b4","line":417,"range":{"start_line":417,"start_character":24,"end_line":417,"end_character":26},"in_reply_to":"c048add4_c6801f5f","updated":"2021-03-02 11:13:37.000000000","message":"Agreed. What made me add it is to distinguish that it is a new API version from the original","commit_id":"01c61108f261faa42e31c98298b860bb7cf651c8"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"48112ebe7493e359102fcafa73739acc87011b36","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    def get_search_path(self):"},{"line_number":55,"context_line":"        return DEV_SEARCH_PATH"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_volume_paths(self, connection_properties):"},{"line_number":58,"context_line":"        device_path \u003d connection_properties.get(\u0027device_path\u0027)"},{"line_number":59,"context_line":"        if device_path:"},{"line_number":60,"context_line":"            return [device_path]"}],"source_content_type":"text/x-python","patch_set":8,"id":"81e2c95d_766e1e6f","line":57,"updated":"2021-03-03 13:23:47.000000000","message":"The old code had a log.debug statement in this function; not insisting that it be re-added, just want to flag that for other reviewers.\n\nhttps://opendev.org/openstack/os-brick/src/branch/stable/victoria/os_brick/initiator/connectors/nvmeof.py#L84","commit_id":"bf3f101e4a6246c2f93ad76440fc906cc252cd83"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"795efd34b2ff4b22353f68858cf8e5079d7fcd38","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    def get_search_path(self):"},{"line_number":55,"context_line":"        return DEV_SEARCH_PATH"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_volume_paths(self, connection_properties):"},{"line_number":58,"context_line":"        device_path \u003d connection_properties.get(\u0027device_path\u0027)"},{"line_number":59,"context_line":"        if device_path:"},{"line_number":60,"context_line":"            return [device_path]"}],"source_content_type":"text/x-python","patch_set":8,"id":"e95c637c_2cb0f6fd","line":57,"in_reply_to":"81e2c95d_766e1e6f","updated":"2021-03-03 13:56:42.000000000","message":"Can definitely add a debug line here, not sure if the old \"Path of volume to be extended is %(path)s\" message is the best one here though.","commit_id":"bf3f101e4a6246c2f93ad76440fc906cc252cd83"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5fb9f410b3bb4b2fcd0af64da7d8542f41bdd554","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    def get_search_path(self):"},{"line_number":55,"context_line":"        return DEV_SEARCH_PATH"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def get_volume_paths(self, connection_properties):"},{"line_number":58,"context_line":"        device_path \u003d connection_properties.get(\u0027device_path\u0027)"},{"line_number":59,"context_line":"        if device_path:"},{"line_number":60,"context_line":"            return [device_path]"}],"source_content_type":"text/x-python","patch_set":8,"id":"6c329c61_f9e7130e","line":57,"in_reply_to":"e95c637c_2cb0f6fd","updated":"2021-03-03 16:20:29.000000000","message":"Yeah, let\u0027s see what Ivan and Walt think.","commit_id":"bf3f101e4a6246c2f93ad76440fc906cc252cd83"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"48112ebe7493e359102fcafa73739acc87011b36","unresolved":true,"context_lines":[{"line_number":352,"context_line":"        :type device_info: dict"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        \"\"\""},{"line_number":355,"context_line":"        if connection_properties.get(\u0027volume_replicas\u0027):  # compatibility"},{"line_number":356,"context_line":"            return self._disconnect_volume_replicated("},{"line_number":357,"context_line":"                connection_properties, device_info,"},{"line_number":358,"context_line":"                force\u003dforce, ignore_errors\u003dignore_errors)"}],"source_content_type":"text/x-python","patch_set":8,"id":"05be488b_99a91c15","line":355,"updated":"2021-03-03 13:23:47.000000000","message":"One thing about this compatibility check that you use here and throughout: if \u0027volume_replicas\u0027 is in the connection_properties but is an empty list, this expression won\u0027t detect that.  Not sure if that\u0027s an issue or not.  If it is, .get(\u0027v_r\u0027, False) is what you need here.  (Don\u0027t use None, or someone may remove it to \"improve\" the code.)","commit_id":"bf3f101e4a6246c2f93ad76440fc906cc252cd83"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"795efd34b2ff4b22353f68858cf8e5079d7fcd38","unresolved":true,"context_lines":[{"line_number":352,"context_line":"        :type device_info: dict"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        \"\"\""},{"line_number":355,"context_line":"        if connection_properties.get(\u0027volume_replicas\u0027):  # compatibility"},{"line_number":356,"context_line":"            return self._disconnect_volume_replicated("},{"line_number":357,"context_line":"                connection_properties, device_info,"},{"line_number":358,"context_line":"                force\u003dforce, ignore_errors\u003dignore_errors)"}],"source_content_type":"text/x-python","patch_set":8,"id":"4b3b71a1_2d6141b2","line":355,"in_reply_to":"05be488b_99a91c15","updated":"2021-03-03 13:56:42.000000000","message":"Thank you for this info and some useful tips!\n\nI think empty volume_replicas being false is fine for here, since that should be treated as there are no replicas at all, which will also give a chance for the old connector code to run.","commit_id":"bf3f101e4a6246c2f93ad76440fc906cc252cd83"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"3a7ea98aab2b9596d4d3bbd7523dd47d1b4ff493","unresolved":true,"context_lines":[{"line_number":352,"context_line":"        :type device_info: dict"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        \"\"\""},{"line_number":355,"context_line":"        if connection_properties.get(\u0027volume_replicas\u0027):  # compatibility"},{"line_number":356,"context_line":"            return self._disconnect_volume_replicated("},{"line_number":357,"context_line":"                connection_properties, device_info,"},{"line_number":358,"context_line":"                force\u003dforce, ignore_errors\u003dignore_errors)"}],"source_content_type":"text/x-python","patch_set":8,"id":"de3aa469_ad672ac9","line":355,"in_reply_to":"4b3b71a1_2d6141b2","updated":"2021-03-04 04:00:25.000000000","message":"That sounds fine.","commit_id":"bf3f101e4a6246c2f93ad76440fc906cc252cd83"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"48112ebe7493e359102fcafa73739acc87011b36","unresolved":true,"context_lines":[{"line_number":826,"context_line":"    @staticmethod"},{"line_number":827,"context_line":"    def rescan(executor, target_nqn, vol_uuid):"},{"line_number":828,"context_line":"        ctr_device \u003d ("},{"line_number":829,"context_line":"            DEV_SEARCH_PATH +"},{"line_number":830,"context_line":"            NVMeOFConnector._get_nvme_controller(executor, target_nqn))"},{"line_number":831,"context_line":"        nvme_command \u003d (\u0027ns-rescan\u0027, ctr_device)"},{"line_number":832,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fc75d64a_1a4fecd4","line":829,"updated":"2021-03-03 13:23:47.000000000","message":"I\u0027d prefer that you call the function here.  Seems stupid, but if at some point the function gets more complicated, this might get missed in the refactoring.","commit_id":"bf3f101e4a6246c2f93ad76440fc906cc252cd83"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"96bf51779253e25bfe85f1faf487ac306aee4a52","unresolved":false,"context_lines":[{"line_number":826,"context_line":"    @staticmethod"},{"line_number":827,"context_line":"    def rescan(executor, target_nqn, vol_uuid):"},{"line_number":828,"context_line":"        ctr_device \u003d ("},{"line_number":829,"context_line":"            DEV_SEARCH_PATH +"},{"line_number":830,"context_line":"            NVMeOFConnector._get_nvme_controller(executor, target_nqn))"},{"line_number":831,"context_line":"        nvme_command \u003d (\u0027ns-rescan\u0027, ctr_device)"},{"line_number":832,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"b9bf29b1_e73b10ff","line":829,"in_reply_to":"51d5c954_f019d4e5","updated":"2021-03-04 10:03:14.000000000","message":"Done","commit_id":"bf3f101e4a6246c2f93ad76440fc906cc252cd83"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"5fb9f410b3bb4b2fcd0af64da7d8542f41bdd554","unresolved":true,"context_lines":[{"line_number":826,"context_line":"    @staticmethod"},{"line_number":827,"context_line":"    def rescan(executor, target_nqn, vol_uuid):"},{"line_number":828,"context_line":"        ctr_device \u003d ("},{"line_number":829,"context_line":"            DEV_SEARCH_PATH +"},{"line_number":830,"context_line":"            NVMeOFConnector._get_nvme_controller(executor, target_nqn))"},{"line_number":831,"context_line":"        nvme_command \u003d (\u0027ns-rescan\u0027, ctr_device)"},{"line_number":832,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"51d5c954_f019d4e5","line":829,"in_reply_to":"630e1fd2_75544908","updated":"2021-03-03 16:20:29.000000000","message":"OK, I think make get_search_path() a static method up at line 54.  Then it can be used here and it can also be called on any instance of the class, so it won\u0027t break the interface if any external code is calling it on an instance.","commit_id":"bf3f101e4a6246c2f93ad76440fc906cc252cd83"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"795efd34b2ff4b22353f68858cf8e5079d7fcd38","unresolved":true,"context_lines":[{"line_number":826,"context_line":"    @staticmethod"},{"line_number":827,"context_line":"    def rescan(executor, target_nqn, vol_uuid):"},{"line_number":828,"context_line":"        ctr_device \u003d ("},{"line_number":829,"context_line":"            DEV_SEARCH_PATH +"},{"line_number":830,"context_line":"            NVMeOFConnector._get_nvme_controller(executor, target_nqn))"},{"line_number":831,"context_line":"        nvme_command \u003d (\u0027ns-rescan\u0027, ctr_device)"},{"line_number":832,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"630e1fd2_75544908","line":829,"in_reply_to":"fc75d64a_1a4fecd4","updated":"2021-03-03 13:56:42.000000000","message":"Sounds good, the only weird part is that rescan() is a static method, while get_search_path() is an instance method (as is in other connectors) - so we need to either instantiate a dummy NVMeOFConnector to call it, or pass it a None self reference (which pycharm ide apparently reports an error on)\n\nLet me know which way (or other alternative) is prefered.","commit_id":"bf3f101e4a6246c2f93ad76440fc906cc252cd83"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"99e09abc4f576f49fa18b2403099be5301fcac1a","unresolved":true,"context_lines":[{"line_number":89,"context_line":"        if uuid:"},{"line_number":90,"context_line":"            ret[\u0027uuid\u0027] \u003d uuid"},{"line_number":91,"context_line":"        if suuid:"},{"line_number":92,"context_line":"            ret[\u0027system uuid\u0027] \u003d suuid  # compatibility"},{"line_number":93,"context_line":"        if nqn:"},{"line_number":94,"context_line":"            ret[\u0027nqn\u0027] \u003d nqn"},{"line_number":95,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":11,"id":"1c6e33d6_723ab40b","line":92,"range":{"start_line":92,"start_character":17,"end_line":92,"end_character":28},"updated":"2021-03-05 12:28:20.000000000","message":"This will work but I would\u0027ve preferred it system_uuid (with underscore) unless there is a specific reason to set it this way","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"f16c4fc3634d8528df8fab87e5c29b0c3d73b8f3","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        if uuid:"},{"line_number":90,"context_line":"            ret[\u0027uuid\u0027] \u003d uuid"},{"line_number":91,"context_line":"        if suuid:"},{"line_number":92,"context_line":"            ret[\u0027system uuid\u0027] \u003d suuid  # compatibility"},{"line_number":93,"context_line":"        if nqn:"},{"line_number":94,"context_line":"            ret[\u0027nqn\u0027] \u003d nqn"},{"line_number":95,"context_line":"        return ret"}],"source_content_type":"text/x-python","patch_set":11,"id":"6fdc91da_9afc5ba8","line":92,"range":{"start_line":92,"start_character":17,"end_line":92,"end_character":28},"in_reply_to":"1c6e33d6_723ab40b","updated":"2021-03-05 12:57:08.000000000","message":"this is for backward compatibility, it is the code the original connector had, so this patch is bringing it back to ensure backwards compatibility.","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"033bcd12bdcf25f7646323f0e3d1da1ce2532555","unresolved":true,"context_lines":[{"line_number":117,"context_line":"                f.close()"},{"line_number":118,"context_line":"        except IOError:"},{"line_number":119,"context_line":"            try:"},{"line_number":120,"context_line":"                self._execute("},{"line_number":121,"context_line":"                    \u0027mkdir\u0027, \u0027-p\u0027, \u0027/etc/nvme\u0027,"},{"line_number":122,"context_line":"                    root_helper\u003dself._root_helper, run_as_root\u003dTrue)"},{"line_number":123,"context_line":"                out, err \u003d self._execute("},{"line_number":124,"context_line":"                    \u0027nvme\u0027, \u0027gen-hostnqn\u0027,"},{"line_number":125,"context_line":"                    root_helper\u003dself._root_helper, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ce99fc87_2012717f","line":122,"range":{"start_line":120,"start_character":0,"end_line":122,"end_character":68},"updated":"2021-03-05 09:03:50.000000000","message":"-1: If we create the directory as root and don\u0027t allow normal users access then L128-L130 will fail. I believe we need to set the mode here with `-m`, right?","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"24323767f600d1b04d3ae5c708c096d7df09e28f","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                f.close()"},{"line_number":118,"context_line":"        except IOError:"},{"line_number":119,"context_line":"            try:"},{"line_number":120,"context_line":"                self._execute("},{"line_number":121,"context_line":"                    \u0027mkdir\u0027, \u0027-p\u0027, \u0027/etc/nvme\u0027,"},{"line_number":122,"context_line":"                    root_helper\u003dself._root_helper, run_as_root\u003dTrue)"},{"line_number":123,"context_line":"                out, err \u003d self._execute("},{"line_number":124,"context_line":"                    \u0027nvme\u0027, \u0027gen-hostnqn\u0027,"},{"line_number":125,"context_line":"                    root_helper\u003dself._root_helper, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9062726a_7b2d1d24","line":122,"range":{"start_line":120,"start_character":0,"end_line":122,"end_character":68},"in_reply_to":"ce99fc87_2012717f","updated":"2021-03-05 11:12:10.000000000","message":"Done","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"033bcd12bdcf25f7646323f0e3d1da1ce2532555","unresolved":true,"context_lines":[{"line_number":136,"context_line":"        # RSD requires system_uuid to let Cinder RSD Driver identify"},{"line_number":137,"context_line":"        # Nova node for later RSD volume attachment."},{"line_number":138,"context_line":"        try:"},{"line_number":139,"context_line":"            out, err \u003d self._execute(\u0027cat\u0027, \u0027/sys/class/dmi/id/product_uuid\u0027,"},{"line_number":140,"context_line":"                                     root_helper\u003dself._root_helper,"},{"line_number":141,"context_line":"                                     run_as_root\u003dTrue)"},{"line_number":142,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":143,"context_line":"            try:"},{"line_number":144,"context_line":"                out, err \u003d self._execute(\u0027dmidecode\u0027, \u0027-ssystem-uuid\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"f5d97517_bae18431","line":141,"range":{"start_line":139,"start_character":0,"end_line":141,"end_character":54},"updated":"2021-03-05 09:03:50.000000000","message":"I understand that this is just adding back this code as it was, but as a reminder, at some point (not in this patch) we should do this using privsep.","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"24323767f600d1b04d3ae5c708c096d7df09e28f","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        # RSD requires system_uuid to let Cinder RSD Driver identify"},{"line_number":137,"context_line":"        # Nova node for later RSD volume attachment."},{"line_number":138,"context_line":"        try:"},{"line_number":139,"context_line":"            out, err \u003d self._execute(\u0027cat\u0027, \u0027/sys/class/dmi/id/product_uuid\u0027,"},{"line_number":140,"context_line":"                                     root_helper\u003dself._root_helper,"},{"line_number":141,"context_line":"                                     run_as_root\u003dTrue)"},{"line_number":142,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":143,"context_line":"            try:"},{"line_number":144,"context_line":"                out, err \u003d self._execute(\u0027dmidecode\u0027, \u0027-ssystem-uuid\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"d854dc9a_5baab8a4","line":141,"range":{"start_line":139,"start_character":0,"end_line":141,"end_character":54},"in_reply_to":"f5d97517_bae18431","updated":"2021-03-05 11:12:10.000000000","message":"Ack","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"99e09abc4f576f49fa18b2403099be5301fcac1a","unresolved":true,"context_lines":[{"line_number":183,"context_line":"    @utils.retry(exceptions\u003dexception.VolumePathsNotFound)"},{"line_number":184,"context_line":"    def _get_device_path(self, current_nvme_devices):"},{"line_number":185,"context_line":"        all_nvme_devices \u003d self._get_nvme_devices()"},{"line_number":186,"context_line":"        LOG.debug(\"all_nvme_devices are %(all_nvme_devices)s\","},{"line_number":187,"context_line":"                  {\u0027all_nvme_devices\u0027: all_nvme_devices})"},{"line_number":188,"context_line":"        path \u003d set(all_nvme_devices) - set(current_nvme_devices)"},{"line_number":189,"context_line":"        if not path:"},{"line_number":190,"context_line":"            raise exception.VolumePathsNotFound()"}],"source_content_type":"text/x-python","patch_set":11,"id":"925a15fe_c4a3656a","line":187,"range":{"start_line":186,"start_character":0,"end_line":187,"end_character":57},"updated":"2021-03-05 12:28:20.000000000","message":"this logs the same value as L#169-170, any reason for the duplicate logging?","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"f16c4fc3634d8528df8fab87e5c29b0c3d73b8f3","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    @utils.retry(exceptions\u003dexception.VolumePathsNotFound)"},{"line_number":184,"context_line":"    def _get_device_path(self, current_nvme_devices):"},{"line_number":185,"context_line":"        all_nvme_devices \u003d self._get_nvme_devices()"},{"line_number":186,"context_line":"        LOG.debug(\"all_nvme_devices are %(all_nvme_devices)s\","},{"line_number":187,"context_line":"                  {\u0027all_nvme_devices\u0027: all_nvme_devices})"},{"line_number":188,"context_line":"        path \u003d set(all_nvme_devices) - set(current_nvme_devices)"},{"line_number":189,"context_line":"        if not path:"},{"line_number":190,"context_line":"            raise exception.VolumePathsNotFound()"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba88f270_00681290","line":187,"range":{"start_line":186,"start_character":0,"end_line":187,"end_character":57},"in_reply_to":"925a15fe_c4a3656a","updated":"2021-03-05 12:57:08.000000000","message":"this is the original code for backward compatibility (in essense this is a revert + merge)","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"99e09abc4f576f49fa18b2403099be5301fcac1a","unresolved":true,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def _wait_for_blk(self, nvme_transport_type, conn_nqn,"},{"line_number":236,"context_line":"                      target_portal, port):"},{"line_number":237,"context_line":"        # Find nvme name in subsystem list and wait max 15 seconds"},{"line_number":238,"context_line":"        # until new volume will be available in kernel"},{"line_number":239,"context_line":"        nvme_name \u003d \"\""},{"line_number":240,"context_line":"        nvme_address \u003d \"traddr\u003d%s trsvcid\u003d%s\" % (target_portal, port)"}],"source_content_type":"text/x-python","patch_set":11,"id":"17102710_ff9e6dea","line":237,"range":{"start_line":237,"start_character":52,"end_line":237,"end_character":66},"updated":"2021-03-05 12:28:20.000000000","message":"any reason for this specific wait time?","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"f16c4fc3634d8528df8fab87e5c29b0c3d73b8f3","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def _wait_for_blk(self, nvme_transport_type, conn_nqn,"},{"line_number":236,"context_line":"                      target_portal, port):"},{"line_number":237,"context_line":"        # Find nvme name in subsystem list and wait max 15 seconds"},{"line_number":238,"context_line":"        # until new volume will be available in kernel"},{"line_number":239,"context_line":"        nvme_name \u003d \"\""},{"line_number":240,"context_line":"        nvme_address \u003d \"traddr\u003d%s trsvcid\u003d%s\" % (target_portal, port)"}],"source_content_type":"text/x-python","patch_set":11,"id":"c8831833_531e00a0","line":237,"range":{"start_line":237,"start_character":52,"end_line":237,"end_character":66},"in_reply_to":"17102710_ff9e6dea","updated":"2021-03-05 12:57:08.000000000","message":"original code","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"99e09abc4f576f49fa18b2403099be5301fcac1a","unresolved":true,"context_lines":[{"line_number":270,"context_line":"        return self._is_nvme_available(nvme_name)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def _try_disconnect_volume(self, conn_nqn, ignore_errors\u003dFalse):"},{"line_number":273,"context_line":"        cmd \u003d ["},{"line_number":274,"context_line":"            \u0027nvme\u0027,"},{"line_number":275,"context_line":"            \u0027disconnect\u0027,"},{"line_number":276,"context_line":"            \u0027-n\u0027,"},{"line_number":277,"context_line":"            conn_nqn]"},{"line_number":278,"context_line":"        try:"},{"line_number":279,"context_line":"            self._execute("},{"line_number":280,"context_line":"                *cmd,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9bd70196_8c0a68cf","line":277,"range":{"start_line":273,"start_character":8,"end_line":277,"end_character":21},"updated":"2021-03-05 12:28:20.000000000","message":"any reason for this formatting? would be more readable in a single line","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"f16c4fc3634d8528df8fab87e5c29b0c3d73b8f3","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        return self._is_nvme_available(nvme_name)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def _try_disconnect_volume(self, conn_nqn, ignore_errors\u003dFalse):"},{"line_number":273,"context_line":"        cmd \u003d ["},{"line_number":274,"context_line":"            \u0027nvme\u0027,"},{"line_number":275,"context_line":"            \u0027disconnect\u0027,"},{"line_number":276,"context_line":"            \u0027-n\u0027,"},{"line_number":277,"context_line":"            conn_nqn]"},{"line_number":278,"context_line":"        try:"},{"line_number":279,"context_line":"            self._execute("},{"line_number":280,"context_line":"                *cmd,"}],"source_content_type":"text/x-python","patch_set":11,"id":"55b5c932_69996c31","line":277,"range":{"start_line":273,"start_character":8,"end_line":277,"end_character":21},"in_reply_to":"9bd70196_8c0a68cf","updated":"2021-03-05 12:57:08.000000000","message":"original code, rather leave it as it was.","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"99e09abc4f576f49fa18b2403099be5301fcac1a","unresolved":true,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        conn_nqn \u003d connection_properties[\u0027nqn\u0027]"},{"line_number":362,"context_line":"        if device_info and device_info.get(\u0027path\u0027):"},{"line_number":363,"context_line":"            device_path \u003d device_info.get(\u0027path\u0027)"},{"line_number":364,"context_line":"        else:"},{"line_number":365,"context_line":"            device_path \u003d connection_properties[\u0027device_path\u0027] or \u0027\u0027"},{"line_number":366,"context_line":"        current_nvme_devices \u003d self._get_nvme_devices()"}],"source_content_type":"text/x-python","patch_set":11,"id":"f6f395ae_bdc96657","line":363,"range":{"start_line":363,"start_character":37,"end_line":363,"end_character":49},"updated":"2021-03-05 12:28:20.000000000","message":"better to use [\u0027path\u0027]","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"f16c4fc3634d8528df8fab87e5c29b0c3d73b8f3","unresolved":false,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        conn_nqn \u003d connection_properties[\u0027nqn\u0027]"},{"line_number":362,"context_line":"        if device_info and device_info.get(\u0027path\u0027):"},{"line_number":363,"context_line":"            device_path \u003d device_info.get(\u0027path\u0027)"},{"line_number":364,"context_line":"        else:"},{"line_number":365,"context_line":"            device_path \u003d connection_properties[\u0027device_path\u0027] or \u0027\u0027"},{"line_number":366,"context_line":"        current_nvme_devices \u003d self._get_nvme_devices()"}],"source_content_type":"text/x-python","patch_set":11,"id":"ae66865f_b5178615","line":363,"range":{"start_line":363,"start_character":37,"end_line":363,"end_character":49},"in_reply_to":"f6f395ae_bdc96657","updated":"2021-03-05 12:57:08.000000000","message":"original code, rather leave it as it was.","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"033bcd12bdcf25f7646323f0e3d1da1ce2532555","unresolved":true,"context_lines":[{"line_number":424,"context_line":"        vol_uuid - UUID for volume/replica"},{"line_number":425,"context_line":"        \"\"\""},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":428,"context_line":"        volume_alias \u003d connection_properties.get(\u0027alias\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        if volume_replicas:"}],"source_content_type":"text/x-python","patch_set":11,"id":"75919b2c_5275a1c7","line":427,"updated":"2021-03-05 09:03:50.000000000","message":"nit: We don\u0027t need to use get, we can directly do [\u0027volume_replicas\u0027] since we know the key exists based on L356","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"99e09abc4f576f49fa18b2403099be5301fcac1a","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        vol_uuid - UUID for volume/replica"},{"line_number":425,"context_line":"        \"\"\""},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":428,"context_line":"        volume_alias \u003d connection_properties.get(\u0027alias\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        if volume_replicas:"}],"source_content_type":"text/x-python","patch_set":11,"id":"8d09631d_57e4cd5c","line":427,"in_reply_to":"0d0e766c_0f7e36ea","updated":"2021-03-05 12:28:20.000000000","message":"Zohar, do you mean the \u0027volume_replicas\u0027 key can exist with None value hence the need for this?\nconnection_properties{\u0027volume_replicas\u0027: None, ...}","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"24323767f600d1b04d3ae5c708c096d7df09e28f","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        vol_uuid - UUID for volume/replica"},{"line_number":425,"context_line":"        \"\"\""},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":428,"context_line":"        volume_alias \u003d connection_properties.get(\u0027alias\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        if volume_replicas:"}],"source_content_type":"text/x-python","patch_set":11,"id":"0d0e766c_0f7e36ea","line":427,"in_reply_to":"75919b2c_5275a1c7","updated":"2021-03-05 11:12:10.000000000","message":"after irc discussion, we decided to add a different check in the parent connect_volume method that can result in volume_replicas being not populated by connection info from the driver.","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"033bcd12bdcf25f7646323f0e3d1da1ce2532555","unresolved":true,"context_lines":[{"line_number":425,"context_line":"        \"\"\""},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":428,"context_line":"        volume_alias \u003d connection_properties.get(\u0027alias\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        if volume_replicas:"},{"line_number":431,"context_line":"            host_device_paths \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"a8f05fb2_f67e7921","line":428,"updated":"2021-03-05 09:03:50.000000000","message":"-1: I haven\u0027t looked at the Cinder driver, but it doesn\u0027t sound like this could be missing when `volume_replicas` is present.  If it can be missing or be `None`, then we would raise an unexpected exception when we try to concatenate it on L600 and L618.","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"24323767f600d1b04d3ae5c708c096d7df09e28f","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        \"\"\""},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":428,"context_line":"        volume_alias \u003d connection_properties.get(\u0027alias\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        if volume_replicas:"},{"line_number":431,"context_line":"            host_device_paths \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"469d28f4_970a5cfc","line":428,"in_reply_to":"a8f05fb2_f67e7921","updated":"2021-03-05 11:12:10.000000000","message":"same as comment on 427","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"033bcd12bdcf25f7646323f0e3d1da1ce2532555","unresolved":true,"context_lines":[{"line_number":427,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":428,"context_line":"        volume_alias \u003d connection_properties.get(\u0027alias\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        if volume_replicas:"},{"line_number":431,"context_line":"            host_device_paths \u003d []"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"            for replica in volume_replicas:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ded8383_986cf122","line":430,"range":{"start_line":430,"start_character":0,"end_line":430,"end_character":27},"updated":"2021-03-05 09:03:50.000000000","message":"-1: We no longer need to do this check, it was the prerequisite to call this method on L356","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"24323767f600d1b04d3ae5c708c096d7df09e28f","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        volume_replicas \u003d connection_properties.get(\u0027volume_replicas\u0027)"},{"line_number":428,"context_line":"        volume_alias \u003d connection_properties.get(\u0027alias\u0027)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        if volume_replicas:"},{"line_number":431,"context_line":"            host_device_paths \u003d []"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"            for replica in volume_replicas:"}],"source_content_type":"text/x-python","patch_set":11,"id":"d142abe4_2a5a3917","line":430,"range":{"start_line":430,"start_character":0,"end_line":430,"end_character":27},"in_reply_to":"1ded8383_986cf122","updated":"2021-03-05 11:12:10.000000000","message":"same as comment on 427","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"033bcd12bdcf25f7646323f0e3d1da1ce2532555","unresolved":true,"context_lines":[{"line_number":449,"context_line":"            else:"},{"line_number":450,"context_line":"                device_path \u003d self._handle_single_replica("},{"line_number":451,"context_line":"                    host_device_paths, volume_alias)"},{"line_number":452,"context_line":"        else:"},{"line_number":453,"context_line":"            device_path \u003d self._connect_target_volume("},{"line_number":454,"context_line":"                connection_properties[\u0027target_nqn\u0027],"},{"line_number":455,"context_line":"                connection_properties[\u0027vol_uuid\u0027],"},{"line_number":456,"context_line":"                connection_properties[\u0027portals\u0027])"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        if nvmeof_agent:"},{"line_number":459,"context_line":"            nvmeof_agent.NVMeOFAgent.ensure_running(self)"}],"source_content_type":"text/x-python","patch_set":11,"id":"d3741376_c8cada41","line":456,"range":{"start_line":452,"start_character":0,"end_line":456,"end_character":49},"updated":"2021-03-05 09:03:50.000000000","message":"This is dead code, based on L356, right?","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"24323767f600d1b04d3ae5c708c096d7df09e28f","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            else:"},{"line_number":450,"context_line":"                device_path \u003d self._handle_single_replica("},{"line_number":451,"context_line":"                    host_device_paths, volume_alias)"},{"line_number":452,"context_line":"        else:"},{"line_number":453,"context_line":"            device_path \u003d self._connect_target_volume("},{"line_number":454,"context_line":"                connection_properties[\u0027target_nqn\u0027],"},{"line_number":455,"context_line":"                connection_properties[\u0027vol_uuid\u0027],"},{"line_number":456,"context_line":"                connection_properties[\u0027portals\u0027])"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"        if nvmeof_agent:"},{"line_number":459,"context_line":"            nvmeof_agent.NVMeOFAgent.ensure_running(self)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9d592117_6b6cca31","line":456,"range":{"start_line":452,"start_character":0,"end_line":456,"end_character":49},"in_reply_to":"d3741376_c8cada41","updated":"2021-03-05 11:12:10.000000000","message":"same as comment on 427","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"033bcd12bdcf25f7646323f0e3d1da1ce2532555","unresolved":true,"context_lines":[{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        if not host_device_path:"},{"line_number":508,"context_line":"            any_connect \u003d NVMeOFConnector.connect_to_portals("},{"line_number":509,"context_line":"                self, target_nqn, portals)"},{"line_number":510,"context_line":"            if not any_connect:"},{"line_number":511,"context_line":"                LOG.error("},{"line_number":512,"context_line":"                    \"No successful connections: %(host_devices)s\","}],"source_content_type":"text/x-python","patch_set":11,"id":"96ac6ebc_5f7c7cb6","line":509,"updated":"2021-03-05 09:03:50.000000000","message":"nit: unnecessary change","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"24323767f600d1b04d3ae5c708c096d7df09e28f","unresolved":false,"context_lines":[{"line_number":506,"context_line":""},{"line_number":507,"context_line":"        if not host_device_path:"},{"line_number":508,"context_line":"            any_connect \u003d NVMeOFConnector.connect_to_portals("},{"line_number":509,"context_line":"                self, target_nqn, portals)"},{"line_number":510,"context_line":"            if not any_connect:"},{"line_number":511,"context_line":"                LOG.error("},{"line_number":512,"context_line":"                    \"No successful connections: %(host_devices)s\","}],"source_content_type":"text/x-python","patch_set":11,"id":"42f40b49_94418f1c","line":509,"in_reply_to":"96ac6ebc_5f7c7cb6","updated":"2021-03-05 11:12:10.000000000","message":"Ack","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"033bcd12bdcf25f7646323f0e3d1da1ce2532555","unresolved":true,"context_lines":[{"line_number":512,"context_line":"                    \"No successful connections: %(host_devices)s\","},{"line_number":513,"context_line":"                    {\u0027host_devices\u0027: target_nqn})"},{"line_number":514,"context_line":"                raise exception.VolumeDeviceNotFound(device\u003dtarget_nqn)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"            host_device_path \u003d NVMeOFConnector.get_nvme_device_path("},{"line_number":517,"context_line":"                self, target_nqn, vol_uuid)"},{"line_number":518,"context_line":"            if not host_device_path:"}],"source_content_type":"text/x-python","patch_set":11,"id":"f31d3f70_d3dfe774","line":515,"updated":"2021-03-05 09:03:50.000000000","message":"ditto","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"24323767f600d1b04d3ae5c708c096d7df09e28f","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                    \"No successful connections: %(host_devices)s\","},{"line_number":513,"context_line":"                    {\u0027host_devices\u0027: target_nqn})"},{"line_number":514,"context_line":"                raise exception.VolumeDeviceNotFound(device\u003dtarget_nqn)"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"            host_device_path \u003d NVMeOFConnector.get_nvme_device_path("},{"line_number":517,"context_line":"                self, target_nqn, vol_uuid)"},{"line_number":518,"context_line":"            if not host_device_path:"}],"source_content_type":"text/x-python","patch_set":11,"id":"4f9c39e7_217cb794","line":515,"in_reply_to":"f31d3f70_d3dfe774","updated":"2021-03-05 11:12:10.000000000","message":"Ack","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"033bcd12bdcf25f7646323f0e3d1da1ce2532555","unresolved":true,"context_lines":[{"line_number":616,"context_line":"    def _handle_single_replica(self, host_device_paths, volume_alias):"},{"line_number":617,"context_line":"        if self._get_fs_type(host_device_paths[0]) \u003d\u003d \u0027linux_raid_member\u0027:"},{"line_number":618,"context_line":"            md_path \u003d \u0027/dev/md/\u0027 + volume_alias"},{"line_number":619,"context_line":"            NVMeOFConnector.stop_and_assemble_raid("},{"line_number":620,"context_line":"                self, host_device_paths, md_path, False)"},{"line_number":621,"context_line":"            return md_path"},{"line_number":622,"context_line":"        return host_device_paths[0]"}],"source_content_type":"text/x-python","patch_set":11,"id":"25042db0_1eb32940","line":619,"range":{"start_line":619,"start_character":12,"end_line":619,"end_character":27},"updated":"2021-03-05 09:03:50.000000000","message":"-1: Please use `self`, it doesn\u0027t matter if it\u0027s a static method.","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"24323767f600d1b04d3ae5c708c096d7df09e28f","unresolved":false,"context_lines":[{"line_number":616,"context_line":"    def _handle_single_replica(self, host_device_paths, volume_alias):"},{"line_number":617,"context_line":"        if self._get_fs_type(host_device_paths[0]) \u003d\u003d \u0027linux_raid_member\u0027:"},{"line_number":618,"context_line":"            md_path \u003d \u0027/dev/md/\u0027 + volume_alias"},{"line_number":619,"context_line":"            NVMeOFConnector.stop_and_assemble_raid("},{"line_number":620,"context_line":"                self, host_device_paths, md_path, False)"},{"line_number":621,"context_line":"            return md_path"},{"line_number":622,"context_line":"        return host_device_paths[0]"}],"source_content_type":"text/x-python","patch_set":11,"id":"c8b1e328_b9f6221f","line":619,"range":{"start_line":619,"start_character":12,"end_line":619,"end_character":27},"in_reply_to":"25042db0_1eb32940","updated":"2021-03-05 11:12:10.000000000","message":"Agreed, though the entire connector is using it this way (somewhat of a legacy approach) - we will clean this up as part of a future code grooming patch. For now keeping it consistent with the current connector code. Thank you!","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"99e09abc4f576f49fa18b2403099be5301fcac1a","unresolved":true,"context_lines":[{"line_number":709,"context_line":""},{"line_number":710,"context_line":"            try:"},{"line_number":711,"context_line":"                assembled \u003d NVMeOFConnector.assemble_raid("},{"line_number":712,"context_line":"                    executor, drives, md_path, read_only)"},{"line_number":713,"context_line":"            except Exception:"},{"line_number":714,"context_line":"                i +\u003d 1"},{"line_number":715,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"d9887d04_781edbbd","line":712,"range":{"start_line":712,"start_character":47,"end_line":712,"end_character":56},"updated":"2021-03-05 12:28:20.000000000","message":"I don\u0027t think this change should matter cause we\u0027re always passing read_only\u003dFalse in the calling functions but this looks better.","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":16721,"name":"Zohar Mamedov","email":"zohar.cloud@gmail.com","username":"zohar"},"change_message_id":"f16c4fc3634d8528df8fab87e5c29b0c3d73b8f3","unresolved":false,"context_lines":[{"line_number":709,"context_line":""},{"line_number":710,"context_line":"            try:"},{"line_number":711,"context_line":"                assembled \u003d NVMeOFConnector.assemble_raid("},{"line_number":712,"context_line":"                    executor, drives, md_path, read_only)"},{"line_number":713,"context_line":"            except Exception:"},{"line_number":714,"context_line":"                i +\u003d 1"},{"line_number":715,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fe23c792_d5d56ec1","line":712,"range":{"start_line":712,"start_character":47,"end_line":712,"end_character":56},"in_reply_to":"d9887d04_781edbbd","updated":"2021-03-05 12:57:08.000000000","message":"You are right.\n\nThis whole read_only thing is a legacy code of the new connector mode of operation. This will get cleaned up in follow-up grooming patches.\n\nThis is also interesting because there is a whole discussion to be had about treating read_only here (given it being an option of mdraid, but should we use it? - anyway, this could be a separate discussion from this patch)","commit_id":"e912d3c4c086ee113e8347ade77c72b10bd095bc"},{"author":{"_account_id":31016,"name":"Ivan Pchelintsev","email":"i.pchelintsev@yadro.com","username":"pcheli"},"change_message_id":"ad984cb4079ea9881050155f6c8798f4f761df86","unresolved":true,"context_lines":[{"line_number":254,"context_line":"            return False"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        # Find nvme name among subsystems"},{"line_number":257,"context_line":"        for i in range(0, int(len(subsystems) / 2)):"},{"line_number":258,"context_line":"            subsystem \u003d subsystems[i * 2]"},{"line_number":259,"context_line":"            if \u0027NQN\u0027 in subsystem and subsystem[\u0027NQN\u0027] \u003d\u003d conn_nqn:"},{"line_number":260,"context_line":"                for path in subsystems[i * 2 + 1][\u0027Paths\u0027]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"73b89d7d_557e7e35","line":257,"range":{"start_line":257,"start_character":17,"end_line":257,"end_character":51},"updated":"2021-03-05 16:04:04.000000000","message":"minor nit: don\u0027t need to explicitly set start position.","commit_id":"5e71a2daa40b0b8da93a784c78a304185bc84480"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cc452827c057407fba05ba0c0b4c4ca01fcd541d","unresolved":true,"context_lines":[{"line_number":254,"context_line":"            return False"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        # Find nvme name among subsystems"},{"line_number":257,"context_line":"        for i in range(0, int(len(subsystems) / 2)):"},{"line_number":258,"context_line":"            subsystem \u003d subsystems[i * 2]"},{"line_number":259,"context_line":"            if \u0027NQN\u0027 in subsystem and subsystem[\u0027NQN\u0027] \u003d\u003d conn_nqn:"},{"line_number":260,"context_line":"                for path in subsystems[i * 2 + 1][\u0027Paths\u0027]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"cf7a94e9_702861d3","line":257,"range":{"start_line":257,"start_character":17,"end_line":257,"end_character":51},"in_reply_to":"73b89d7d_557e7e35","updated":"2021-03-05 16:29:51.000000000","message":"This is the original code we had, so he is adding it back as it was for the old connector case.","commit_id":"5e71a2daa40b0b8da93a784c78a304185bc84480"},{"author":{"_account_id":31016,"name":"Ivan Pchelintsev","email":"i.pchelintsev@yadro.com","username":"pcheli"},"change_message_id":"ad984cb4079ea9881050155f6c8798f4f761df86","unresolved":true,"context_lines":[{"line_number":256,"context_line":"        # Find nvme name among subsystems"},{"line_number":257,"context_line":"        for i in range(0, int(len(subsystems) / 2)):"},{"line_number":258,"context_line":"            subsystem \u003d subsystems[i * 2]"},{"line_number":259,"context_line":"            if \u0027NQN\u0027 in subsystem and subsystem[\u0027NQN\u0027] \u003d\u003d conn_nqn:"},{"line_number":260,"context_line":"                for path in subsystems[i * 2 + 1][\u0027Paths\u0027]:"},{"line_number":261,"context_line":"                    if (path[\u0027Transport\u0027] \u003d\u003d nvme_transport_type"},{"line_number":262,"context_line":"                            and path[\u0027Address\u0027] \u003d\u003d nvme_address):"}],"source_content_type":"text/x-python","patch_set":15,"id":"48840dad_0385637d","line":259,"range":{"start_line":259,"start_character":12,"end_line":259,"end_character":67},"updated":"2021-03-05 16:04:04.000000000","message":"minor nit: this can be replaced with subsystem.get(\u0027NQN\u0027) \u003d\u003d conn_nqn.","commit_id":"5e71a2daa40b0b8da93a784c78a304185bc84480"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cc452827c057407fba05ba0c0b4c4ca01fcd541d","unresolved":true,"context_lines":[{"line_number":256,"context_line":"        # Find nvme name among subsystems"},{"line_number":257,"context_line":"        for i in range(0, int(len(subsystems) / 2)):"},{"line_number":258,"context_line":"            subsystem \u003d subsystems[i * 2]"},{"line_number":259,"context_line":"            if \u0027NQN\u0027 in subsystem and subsystem[\u0027NQN\u0027] \u003d\u003d conn_nqn:"},{"line_number":260,"context_line":"                for path in subsystems[i * 2 + 1][\u0027Paths\u0027]:"},{"line_number":261,"context_line":"                    if (path[\u0027Transport\u0027] \u003d\u003d nvme_transport_type"},{"line_number":262,"context_line":"                            and path[\u0027Address\u0027] \u003d\u003d nvme_address):"}],"source_content_type":"text/x-python","patch_set":15,"id":"0e6b6930_fe39d807","line":259,"range":{"start_line":259,"start_character":12,"end_line":259,"end_character":67},"in_reply_to":"48840dad_0385637d","updated":"2021-03-05 16:29:51.000000000","message":"This is the original code we had, so he is adding it back as it was for the old connector case.","commit_id":"5e71a2daa40b0b8da93a784c78a304185bc84480"}],"os_brick/tests/initiator/connectors/test_nvmeof.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f9d2b74d92285335114c3f78cd703e73e10d6e95","unresolved":true,"context_lines":[{"line_number":15,"context_line":"from unittest import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import ddt"},{"line_number":18,"context_line":"import glob"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from os_brick import exception"},{"line_number":21,"context_line":"from os_brick import executor"}],"source_content_type":"text/x-python","patch_set":10,"id":"146eaec4_a1a01f3c","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":11},"updated":"2021-03-04 19:23:48.000000000","message":"This needs to be moved to between lines 13 and 14.","commit_id":"763a4893ce9a961da597a31ee3d0416d8300f103"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"8946e90a9a0718b7b727b6fd2030a8fd687f3d6d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from unittest import mock"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import ddt"},{"line_number":18,"context_line":"import glob"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from os_brick import exception"},{"line_number":21,"context_line":"from os_brick import executor"}],"source_content_type":"text/x-python","patch_set":10,"id":"2fa3113c_1c6b491f","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":11},"in_reply_to":"146eaec4_a1a01f3c","updated":"2021-03-04 20:36:50.000000000","message":"Done","commit_id":"763a4893ce9a961da597a31ee3d0416d8300f103"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"f9d2b74d92285335114c3f78cd703e73e10d6e95","unresolved":true,"context_lines":[{"line_number":22,"context_line":"from os_brick.initiator.connectors import nvmeof"},{"line_number":23,"context_line":"from os_brick.initiator import linuxscsi"},{"line_number":24,"context_line":"from os_brick.tests.initiator import test_connector"},{"line_number":25,"context_line":"from oslo_concurrency import processutils as putils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"TARGET_NQN \u003d \u0027target.nqn\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"130ed6d5_08dda48a","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":51},"updated":"2021-03-04 19:23:48.000000000","message":"this needs to be moved to immediately after \u0027import ddt\u0027","commit_id":"763a4893ce9a961da597a31ee3d0416d8300f103"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"8946e90a9a0718b7b727b6fd2030a8fd687f3d6d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from os_brick.initiator.connectors import nvmeof"},{"line_number":23,"context_line":"from os_brick.initiator import linuxscsi"},{"line_number":24,"context_line":"from os_brick.tests.initiator import test_connector"},{"line_number":25,"context_line":"from oslo_concurrency import processutils as putils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"TARGET_NQN \u003d \u0027target.nqn\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"f5f66bec_e71d519e","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":51},"in_reply_to":"130ed6d5_08dda48a","updated":"2021-03-04 20:36:50.000000000","message":"Done","commit_id":"763a4893ce9a961da597a31ee3d0416d8300f103"}],"releasenotes/notes/update-nvmeof-connector-6260a658c15a9a6e.yaml":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cc452827c057407fba05ba0c0b4c4ca01fcd541d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":15,"id":"57c3cd86_ccee78be","line":15,"updated":"2021-03-05 16:29:51.000000000","message":"nit: unnecessary empty lines","commit_id":"5e71a2daa40b0b8da93a784c78a304185bc84480"}]}
