)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"45d4d9192ac6a1c8560d7bdab30fe89d38acf6d5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Pawel Kaminski \u003cpawelx.kaminski@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-07-24 11:05:10 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"connectors/nvme: Wait utill nvme device show up in kernel"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When using nvme connect NNMe device"},{"line_number":10,"context_line":"not show up immediately in kernel."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7faddb67_1ba3a551","line":7,"range":{"start_line":7,"start_character":40,"end_line":7,"end_character":44},"updated":"2019-07-24 12:12:47.000000000","message":"shows","commit_id":"045bc76d212dbafe0d00f7a11416d138b156df69"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"45d4d9192ac6a1c8560d7bdab30fe89d38acf6d5","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Pawel Kaminski \u003cpawelx.kaminski@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-07-24 11:05:10 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"connectors/nvme: Wait utill nvme device show up in kernel"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When using nvme connect NNMe device"},{"line_number":10,"context_line":"not show up immediately in kernel."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7faddb67_5b991d1d","line":7,"range":{"start_line":7,"start_character":22,"end_line":7,"end_character":27},"updated":"2019-07-24 12:12:47.000000000","message":"until","commit_id":"045bc76d212dbafe0d00f7a11416d138b156df69"},{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"45d4d9192ac6a1c8560d7bdab30fe89d38acf6d5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"connectors/nvme: Wait utill nvme device show up in kernel"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When using nvme connect NNMe device"},{"line_number":10,"context_line":"not show up immediately in kernel."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I5f34793e29bd91f3312aaf6f42866c2f2c0b2494"},{"line_number":13,"context_line":"Signed-off-by: Pawel Kaminski \u003cpawelx.kaminski@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7faddb67_7b9179f1","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":3},"updated":"2019-07-24 12:12:47.000000000","message":"does not","commit_id":"045bc76d212dbafe0d00f7a11416d138b156df69"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"be414912bfb8d5cbdff7f21825e7664d3c62015d","unresolved":false,"context_lines":[{"line_number":9,"context_line":"When using nvme connect NNMe device"},{"line_number":10,"context_line":"does not show up immediately in kernel."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I5f34793e29bd91f3312aaf6f42866c2f2c0b2494"},{"line_number":13,"context_line":"Signed-off-by: Pawel Kaminski \u003cpawelx.kaminski@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3fa7e38b_772436c7","line":12,"updated":"2019-09-18 09:48:40.000000000","message":"We should have a bug report explaining the issue this patch is fixing.","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"}],"os_brick/initiator/connectors/nvme.py":[{"author":{"_account_id":28050,"name":"Maciej Szwed","email":"maciej.szwed@intel.com","username":"maciejszwed"},"change_message_id":"45d4d9192ac6a1c8560d7bdab30fe89d38acf6d5","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    def _wait_for_blk(self, current_nvme_devices):"},{"line_number":131,"context_line":"        i \u003d 0"},{"line_number":132,"context_line":"        while i \u003c 15:"},{"line_number":133,"context_line":"            lsblk_cmd \u003d subprocess.Popen([\"lsblk\", \"-l\", \"-o\", \"NAME\"],"},{"line_number":134,"context_line":"                                         stdin\u003dsubprocess.PIPE,"},{"line_number":135,"context_line":"                                         stdout\u003dsubprocess.PIPE)"},{"line_number":136,"context_line":"            grep_cmd \u003d subprocess.Popen([\u0027grep\u0027, \u0027-E\u0027, \u0027nvme[0-9]+n[0-9]+\u0027],"},{"line_number":137,"context_line":"                                        stdin\u003dlsblk_cmd.stdout,"},{"line_number":138,"context_line":"                                        stdout\u003dsubprocess.PIPE)"},{"line_number":139,"context_line":"            wcl_cmd \u003d subprocess.Popen([\u0027wc\u0027, \u0027-l\u0027], stdin\u003dgrep_cmd.stdout,"},{"line_number":140,"context_line":"                                       stdout\u003dsubprocess.PIPE)"},{"line_number":141,"context_line":"            nvme_num \u003d wcl_cmd.communicate()[0].decode(\u0027utf-8\u0027).strip()"},{"line_number":142,"context_line":"            if int(nvme_num) \u003e len(current_nvme_devices):"},{"line_number":143,"context_line":"                return 0"},{"line_number":144,"context_line":"            i +\u003d 1"}],"source_content_type":"text/x-python","patch_set":6,"id":"7faddb67_de3c1bc1","line":141,"range":{"start_line":133,"start_character":12,"end_line":141,"end_character":71},"updated":"2019-07-24 12:12:47.000000000","message":"Please use here _get_nvme_devices function instead.","commit_id":"045bc76d212dbafe0d00f7a11416d138b156df69"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1aaa8e90dc889f9df21a421dd933e44b8f9c0f7b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self._execute(*cmd, root_helper\u003dself._root_helper,"},{"line_number":127,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _wait_for_blk(self, current_nvme_devices):"},{"line_number":130,"context_line":"        i \u003d 0"},{"line_number":131,"context_line":"        while i \u003c 15:"},{"line_number":132,"context_line":"            if len(self._get_nvme_devices()) \u003e len(current_nvme_devices):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_bc0020ad","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":21},"updated":"2019-08-12 21:42:39.000000000","message":"Why you don\u0027t return True/False? It could be more readable","commit_id":"c0b2796d439acdc284e2b82c94ca67554127c4df"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"a365df73c6c8edca612fc4f3a156670e7b420d7e","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def _wait_for_blk(self, current_nvme_devices):"},{"line_number":130,"context_line":"        i \u003d 0"},{"line_number":131,"context_line":"        while i \u003c 15:"},{"line_number":132,"context_line":"            if len(self._get_nvme_devices()) \u003e len(current_nvme_devices):"},{"line_number":133,"context_line":"                return 0"},{"line_number":134,"context_line":"            i +\u003d 1"},{"line_number":135,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_72c75666","line":132,"updated":"2019-08-09 14:09:55.000000000","message":"Are there cases where this condition might not be true even when the device is connected?\n\ni.e. you are waiting for a volume to connect, but while doing so, a different volume or two were disconnected?","commit_id":"c0b2796d439acdc284e2b82c94ca67554127c4df"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"d5d072c049102b608651c88965c3bef95a098d9c","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def _wait_for_blk(self, current_nvme_devices):"},{"line_number":130,"context_line":"        i \u003d 0"},{"line_number":131,"context_line":"        while i \u003c 15:"},{"line_number":132,"context_line":"            if len(self._get_nvme_devices()) \u003e len(current_nvme_devices):"},{"line_number":133,"context_line":"                return 0"},{"line_number":134,"context_line":"            i +\u003d 1"},{"line_number":135,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_bfd10032","line":132,"in_reply_to":"7faddb67_72c75666","updated":"2019-08-12 11:53:36.000000000","message":"Ok, thanks. I will be working on this.","commit_id":"c0b2796d439acdc284e2b82c94ca67554127c4df"}],"os_brick/initiator/connectors/nvmeof.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"be414912bfb8d5cbdff7f21825e7664d3c62015d","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self._execute(*cmd, root_helper\u003dself._root_helper,"},{"line_number":127,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _get_nvme_subsys(self):"},{"line_number":130,"context_line":"        cmd \u003d [\u0027nvme\u0027, \u0027list-subsys\u0027]"},{"line_number":131,"context_line":"        ret_val \u003d self._execute(*cmd, root_helper\u003dself._root_helper,"},{"line_number":132,"context_line":"                                run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_6247964d","line":129,"updated":"2019-09-18 09:48:40.000000000","message":"Please add an example output so people have an easier time understanding the algorithm in _wait_for_blk.","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"d828f903b94a2b35eb84f5f6f883d4b9c7dc663f","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self._execute(*cmd, root_helper\u003dself._root_helper,"},{"line_number":127,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _get_nvme_subsys(self):"},{"line_number":130,"context_line":"        cmd \u003d [\u0027nvme\u0027, \u0027list-subsys\u0027]"},{"line_number":131,"context_line":"        ret_val \u003d self._execute(*cmd, root_helper\u003dself._root_helper,"},{"line_number":132,"context_line":"                                run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_77bd9d00","line":129,"in_reply_to":"3fa7e38b_6247964d","updated":"2019-09-25 13:11:26.000000000","message":"Done","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"be414912bfb8d5cbdff7f21825e7664d3c62015d","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _get_nvme_subsys(self):"},{"line_number":130,"context_line":"        cmd \u003d [\u0027nvme\u0027, \u0027list-subsys\u0027]"},{"line_number":131,"context_line":"        ret_val \u003d self._execute(*cmd, root_helper\u003dself._root_helper,"},{"line_number":132,"context_line":"                                run_as_root\u003dTrue)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_0237c2b2","line":130,"updated":"2019-09-18 09:48:40.000000000","message":"I though nvme supported the `-o json` option... That would make the parsing so much easier...","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"d828f903b94a2b35eb84f5f6f883d4b9c7dc663f","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                      run_as_root\u003dTrue)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _get_nvme_subsys(self):"},{"line_number":130,"context_line":"        cmd \u003d [\u0027nvme\u0027, \u0027list-subsys\u0027]"},{"line_number":131,"context_line":"        ret_val \u003d self._execute(*cmd, root_helper\u003dself._root_helper,"},{"line_number":132,"context_line":"                                run_as_root\u003dTrue)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_d7c49193","line":130,"in_reply_to":"3fa7e38b_0237c2b2","updated":"2019-09-25 13:11:26.000000000","message":"Done","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"be414912bfb8d5cbdff7f21825e7664d3c62015d","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def _wait_for_blk(self, nvme_transport_type, conn_nqn,"},{"line_number":137,"context_line":"                      target_portal, port):"},{"line_number":138,"context_line":"        i \u003d 0"},{"line_number":139,"context_line":"        (out, err) \u003d self._get_nvme_subsys()"},{"line_number":140,"context_line":"        nqn_found \u003d False"},{"line_number":141,"context_line":"        nvme_name \u003d \"\""},{"line_number":142,"context_line":"        nvme_pattern \u003d \"%s traddr\u003d%s trsvcid\u003d%s\" % (nvme_transport_type,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_82c5f290","line":139,"updated":"2019-09-18 09:48:40.000000000","message":"What happens if nvme process returns an error and the _execute raises an exception?","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"d828f903b94a2b35eb84f5f6f883d4b9c7dc663f","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def _wait_for_blk(self, nvme_transport_type, conn_nqn,"},{"line_number":137,"context_line":"                      target_portal, port):"},{"line_number":138,"context_line":"        i \u003d 0"},{"line_number":139,"context_line":"        (out, err) \u003d self._get_nvme_subsys()"},{"line_number":140,"context_line":"        nqn_found \u003d False"},{"line_number":141,"context_line":"        nvme_name \u003d \"\""},{"line_number":142,"context_line":"        nvme_pattern \u003d \"%s traddr\u003d%s trsvcid\u003d%s\" % (nvme_transport_type,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_77c35d39","line":139,"in_reply_to":"3fa7e38b_82c5f290","updated":"2019-09-25 13:11:26.000000000","message":"Done","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"be414912bfb8d5cbdff7f21825e7664d3c62015d","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (out, err) \u003d self._get_nvme_subsys()"},{"line_number":140,"context_line":"        nqn_found \u003d False"},{"line_number":141,"context_line":"        nvme_name \u003d \"\""},{"line_number":142,"context_line":"        nvme_pattern \u003d \"%s traddr\u003d%s trsvcid\u003d%s\" % (nvme_transport_type,"},{"line_number":143,"context_line":"                                                    target_portal, port)"},{"line_number":144,"context_line":"        for line in out.split(\"\\n\"):"},{"line_number":145,"context_line":"            res \u003d re.match(\"nvme-subsys[0-9]+ - NQN\u003d*\", line)"},{"line_number":146,"context_line":"            if res:"},{"line_number":147,"context_line":"                if conn_nqn in line:"},{"line_number":148,"context_line":"                    nqn_found \u003d True"},{"line_number":149,"context_line":"                else:"},{"line_number":150,"context_line":"                    nqn_found \u003d False"},{"line_number":151,"context_line":"            if nqn_found and nvme_pattern in line:"},{"line_number":152,"context_line":"                result \u003d re.search(\" nvme[0-9]+ \", line)"},{"line_number":153,"context_line":"                if result:"},{"line_number":154,"context_line":"                    nvme_name \u003d result.group(0).strip()"},{"line_number":155,"context_line":"                break"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if not nvme_name:"},{"line_number":158,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_a2ab4ed4","line":155,"range":{"start_line":142,"start_character":0,"end_line":155,"end_character":21},"updated":"2019-09-18 09:48:40.000000000","message":"I understand what the code is doing, but why are we doing a series os line splitting and regexes instead of a unique multiline regex?","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"d828f903b94a2b35eb84f5f6f883d4b9c7dc663f","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        (out, err) \u003d self._get_nvme_subsys()"},{"line_number":140,"context_line":"        nqn_found \u003d False"},{"line_number":141,"context_line":"        nvme_name \u003d \"\""},{"line_number":142,"context_line":"        nvme_pattern \u003d \"%s traddr\u003d%s trsvcid\u003d%s\" % (nvme_transport_type,"},{"line_number":143,"context_line":"                                                    target_portal, port)"},{"line_number":144,"context_line":"        for line in out.split(\"\\n\"):"},{"line_number":145,"context_line":"            res \u003d re.match(\"nvme-subsys[0-9]+ - NQN\u003d*\", line)"},{"line_number":146,"context_line":"            if res:"},{"line_number":147,"context_line":"                if conn_nqn in line:"},{"line_number":148,"context_line":"                    nqn_found \u003d True"},{"line_number":149,"context_line":"                else:"},{"line_number":150,"context_line":"                    nqn_found \u003d False"},{"line_number":151,"context_line":"            if nqn_found and nvme_pattern in line:"},{"line_number":152,"context_line":"                result \u003d re.search(\" nvme[0-9]+ \", line)"},{"line_number":153,"context_line":"                if result:"},{"line_number":154,"context_line":"                    nvme_name \u003d result.group(0).strip()"},{"line_number":155,"context_line":"                break"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if not nvme_name:"},{"line_number":158,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_d7ca514c","line":155,"range":{"start_line":142,"start_character":0,"end_line":155,"end_character":21},"in_reply_to":"3fa7e38b_a2ab4ed4","updated":"2019-09-25 13:11:26.000000000","message":"I changed output format of _get_nvme_subsys to json.","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"be414912bfb8d5cbdff7f21825e7664d3c62015d","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        if not nvme_name:"},{"line_number":158,"context_line":"            return False"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        while i \u003c 15:"},{"line_number":161,"context_line":"            for nvme_name_tmp in self._get_nvme_devices():"},{"line_number":162,"context_line":"                if re.match(\"/dev/%sn[0-9]+\" % nvme_name, nvme_name_tmp):"},{"line_number":163,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_c27d2a6f","line":160,"updated":"2019-09-18 09:48:40.000000000","message":"Shouldn\u0027t we mention somewhere in a docstring, comment or something that we have this 15 seconds timeout?","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"d828f903b94a2b35eb84f5f6f883d4b9c7dc663f","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        if not nvme_name:"},{"line_number":158,"context_line":"            return False"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        while i \u003c 15:"},{"line_number":161,"context_line":"            for nvme_name_tmp in self._get_nvme_devices():"},{"line_number":162,"context_line":"                if re.match(\"/dev/%sn[0-9]+\" % nvme_name, nvme_name_tmp):"},{"line_number":163,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_579c210e","line":160,"in_reply_to":"3fa7e38b_c27d2a6f","updated":"2019-09-25 13:11:26.000000000","message":"Done","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"be414912bfb8d5cbdff7f21825e7664d3c62015d","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        while i \u003c 15:"},{"line_number":161,"context_line":"            for nvme_name_tmp in self._get_nvme_devices():"},{"line_number":162,"context_line":"                if re.match(\"/dev/%sn[0-9]+\" % nvme_name, nvme_name_tmp):"},{"line_number":163,"context_line":"                    return True"},{"line_number":164,"context_line":"            i +\u003d 1"},{"line_number":165,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_22ee7e22","line":162,"range":{"start_line":162,"start_character":28,"end_line":162,"end_character":56},"updated":"2019-09-18 09:48:40.000000000","message":"This is going to be the same for all the loops, so we should have it done before L160","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"d828f903b94a2b35eb84f5f6f883d4b9c7dc663f","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        while i \u003c 15:"},{"line_number":161,"context_line":"            for nvme_name_tmp in self._get_nvme_devices():"},{"line_number":162,"context_line":"                if re.match(\"/dev/%sn[0-9]+\" % nvme_name, nvme_name_tmp):"},{"line_number":163,"context_line":"                    return True"},{"line_number":164,"context_line":"            i +\u003d 1"},{"line_number":165,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_f79c2d0f","line":162,"range":{"start_line":162,"start_character":28,"end_line":162,"end_character":56},"in_reply_to":"3fa7e38b_22ee7e22","updated":"2019-09-25 13:11:26.000000000","message":"Done","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"be414912bfb8d5cbdff7f21825e7664d3c62015d","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            for nvme_name_tmp in self._get_nvme_devices():"},{"line_number":162,"context_line":"                if re.match(\"/dev/%sn[0-9]+\" % nvme_name, nvme_name_tmp):"},{"line_number":163,"context_line":"                    return True"},{"line_number":164,"context_line":"            i +\u003d 1"},{"line_number":165,"context_line":"            time.sleep(1)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_e2f706f5","line":164,"updated":"2019-09-18 09:48:40.000000000","message":"Why are we using a while instead of a for loop?","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"d828f903b94a2b35eb84f5f6f883d4b9c7dc663f","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            for nvme_name_tmp in self._get_nvme_devices():"},{"line_number":162,"context_line":"                if re.match(\"/dev/%sn[0-9]+\" % nvme_name, nvme_name_tmp):"},{"line_number":163,"context_line":"                    return True"},{"line_number":164,"context_line":"            i +\u003d 1"},{"line_number":165,"context_line":"            time.sleep(1)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_3806351e","line":164,"in_reply_to":"3fa7e38b_e2f706f5","updated":"2019-09-25 13:11:26.000000000","message":"Done","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"be414912bfb8d5cbdff7f21825e7664d3c62015d","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            cmd.extend([\u0027-q\u0027, host_nqn])"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self._try_connect_nvme(cmd)"},{"line_number":202,"context_line":"        if not self._wait_for_blk(current_nvme_devices):"},{"line_number":203,"context_line":"            LOG.error(\"Waiting for nvme failed\")"},{"line_number":204,"context_line":"            raise exception.NotFound(message\u003d\"nvme connect: NVMe device \""},{"line_number":205,"context_line":"                                             \"not found\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_d7188a82","line":202,"updated":"2019-09-18 09:48:40.000000000","message":"-1: Shouldn\u0027t we disconnect the volume?  Otherwise, if the volume appears after a couple more seconds, we would have a leftover device","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"d828f903b94a2b35eb84f5f6f883d4b9c7dc663f","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            cmd.extend([\u0027-q\u0027, host_nqn])"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self._try_connect_nvme(cmd)"},{"line_number":202,"context_line":"        if not self._wait_for_blk(current_nvme_devices):"},{"line_number":203,"context_line":"            LOG.error(\"Waiting for nvme failed\")"},{"line_number":204,"context_line":"            raise exception.NotFound(message\u003d\"nvme connect: NVMe device \""},{"line_number":205,"context_line":"                                             \"not found\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_d2c6d868","line":202,"in_reply_to":"3fa7e38b_d7188a82","updated":"2019-09-25 13:11:26.000000000","message":"I need to rebase on https://review.opendev.org/#/c/683917/","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"be414912bfb8d5cbdff7f21825e7664d3c62015d","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        if not self._wait_for_blk(current_nvme_devices):"},{"line_number":203,"context_line":"            LOG.error(\"Waiting for nvme failed\")"},{"line_number":204,"context_line":"            raise exception.NotFound(message\u003d\"nvme connect: NVMe device \""},{"line_number":205,"context_line":"                                             \"not found\")"},{"line_number":206,"context_line":"        path \u003d self._get_device_path(current_nvme_devices)"},{"line_number":207,"context_line":"        device_info[\u0027path\u0027] \u003d path[0]"},{"line_number":208,"context_line":"        LOG.debug(\"NVMe device to be connected to is %(path)s\","}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_770d163d","line":205,"updated":"2019-09-18 09:48:40.000000000","message":"Why not raise the exception in the `_wait_for_blk` method instead?","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"d828f903b94a2b35eb84f5f6f883d4b9c7dc663f","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        if not self._wait_for_blk(current_nvme_devices):"},{"line_number":203,"context_line":"            LOG.error(\"Waiting for nvme failed\")"},{"line_number":204,"context_line":"            raise exception.NotFound(message\u003d\"nvme connect: NVMe device \""},{"line_number":205,"context_line":"                                             \"not found\")"},{"line_number":206,"context_line":"        path \u003d self._get_device_path(current_nvme_devices)"},{"line_number":207,"context_line":"        device_info[\u0027path\u0027] \u003d path[0]"},{"line_number":208,"context_line":"        LOG.debug(\"NVMe device to be connected to is %(path)s\","}],"source_content_type":"text/x-python","patch_set":11,"id":"3fa7e38b_f2719445","line":205,"in_reply_to":"3fa7e38b_770d163d","updated":"2019-09-25 13:11:26.000000000","message":"False is returned in 3 places in _wait_for_blk. It is easier to raise exception here.","commit_id":"c90e55f1dd831f74cc7efd805bb4e671420c52d7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"af99a623c07bea65fc8303c688323b2d84e674b8","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":169,"context_line":"            LOG.error(\"Failed to get nvme subsystems\")"},{"line_number":170,"context_line":"            raise"},{"line_number":171,"context_line":"        # Get subsystem list. Throw excpetion if out is currupt or empty"},{"line_number":172,"context_line":"        try:"},{"line_number":173,"context_line":"            subsystems \u003d json.loads(out)[\u0027Subsystems\u0027]"},{"line_number":174,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_311cf912","line":171,"range":{"start_line":171,"start_character":36,"end_line":171,"end_character":45},"updated":"2020-02-11 20:18:27.000000000","message":"nit: typo","commit_id":"7f4eb28948d91aa3a1a6720aa5da51ce2108ba46"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"2ec8271a9c5fc544ee0b6984aa1d9d00e13477bd","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        except putils.ProcessExecutionError:"},{"line_number":169,"context_line":"            LOG.error(\"Failed to get nvme subsystems\")"},{"line_number":170,"context_line":"            raise"},{"line_number":171,"context_line":"        # Get subsystem list. Throw excpetion if out is currupt or empty"},{"line_number":172,"context_line":"        try:"},{"line_number":173,"context_line":"            subsystems \u003d json.loads(out)[\u0027Subsystems\u0027]"},{"line_number":174,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_c21b4e81","line":171,"range":{"start_line":171,"start_character":36,"end_line":171,"end_character":45},"in_reply_to":"3fa7e38b_311cf912","updated":"2020-02-12 11:29:14.000000000","message":"Done","commit_id":"7f4eb28948d91aa3a1a6720aa5da51ce2108ba46"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"af99a623c07bea65fc8303c688323b2d84e674b8","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            subsystem \u003d subsystems[i * 2]"},{"line_number":180,"context_line":"            if \u0027NQN\u0027 in subsystem and subsystem[\u0027NQN\u0027] \u003d\u003d conn_nqn:"},{"line_number":181,"context_line":"                for path in subsystems[i * 2 + 1][\u0027Paths\u0027]:"},{"line_number":182,"context_line":"                    if path[\u0027Transport\u0027] \u003d\u003d nvme_transport_type \\"},{"line_number":183,"context_line":"                            and path[\u0027Address\u0027] \u003d\u003d nvme_address:"},{"line_number":184,"context_line":"                        nvme_name \u003d path[\u0027Name\u0027]"},{"line_number":185,"context_line":"                        break"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_110f7dd4","line":182,"range":{"start_line":182,"start_character":64,"end_line":182,"end_character":65},"updated":"2020-02-11 20:18:27.000000000","message":"In general we have tried to avoid to avoid \\ to span multiple lines. For \"reasons\". It would be better to wrap the conditions in () to accomplish this.","commit_id":"7f4eb28948d91aa3a1a6720aa5da51ce2108ba46"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"2ec8271a9c5fc544ee0b6984aa1d9d00e13477bd","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            subsystem \u003d subsystems[i * 2]"},{"line_number":180,"context_line":"            if \u0027NQN\u0027 in subsystem and subsystem[\u0027NQN\u0027] \u003d\u003d conn_nqn:"},{"line_number":181,"context_line":"                for path in subsystems[i * 2 + 1][\u0027Paths\u0027]:"},{"line_number":182,"context_line":"                    if path[\u0027Transport\u0027] \u003d\u003d nvme_transport_type \\"},{"line_number":183,"context_line":"                            and path[\u0027Address\u0027] \u003d\u003d nvme_address:"},{"line_number":184,"context_line":"                        nvme_name \u003d path[\u0027Name\u0027]"},{"line_number":185,"context_line":"                        break"}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_a22092b2","line":182,"range":{"start_line":182,"start_character":64,"end_line":182,"end_character":65},"in_reply_to":"3fa7e38b_110f7dd4","updated":"2020-02-12 11:29:14.000000000","message":"Done","commit_id":"7f4eb28948d91aa3a1a6720aa5da51ce2108ba46"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"af99a623c07bea65fc8303c688323b2d84e674b8","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            for nvme_dev_name in self._get_nvme_devices():"},{"line_number":195,"context_line":"                if re.match(nvme_name_pattern, nvme_dev_name):"},{"line_number":196,"context_line":"                    return True"},{"line_number":197,"context_line":"            time.sleep(1)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        return False"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_91d84d51","line":197,"range":{"start_line":197,"start_character":12,"end_line":197,"end_character":25},"updated":"2020-02-11 20:18:27.000000000","message":"This needs to be mocked in the unit test:\n\nos_brick.tests.initiator.connectors.test_nvmeof.NVMeOFConnectorTestCase.test__wait_for_blk_2                  15.024","commit_id":"7f4eb28948d91aa3a1a6720aa5da51ce2108ba46"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"2ec8271a9c5fc544ee0b6984aa1d9d00e13477bd","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            for nvme_dev_name in self._get_nvme_devices():"},{"line_number":195,"context_line":"                if re.match(nvme_name_pattern, nvme_dev_name):"},{"line_number":196,"context_line":"                    return True"},{"line_number":197,"context_line":"            time.sleep(1)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        return False"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3fa7e38b_02364602","line":197,"range":{"start_line":197,"start_character":12,"end_line":197,"end_character":25},"in_reply_to":"3fa7e38b_91d84d51","updated":"2020-02-12 11:29:14.000000000","message":"Done","commit_id":"7f4eb28948d91aa3a1a6720aa5da51ce2108ba46"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"7810177b420ced5fc14bfa5157075777cfa192b9","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            for nvme_dev_name in self._get_nvme_devices():"},{"line_number":196,"context_line":"                if re.match(nvme_name_pattern, nvme_dev_name):"},{"line_number":197,"context_line":"                    return True"},{"line_number":198,"context_line":"            time.sleep(1)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        return False"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_c5efd8f7","line":198,"range":{"start_line":198,"start_character":12,"end_line":198,"end_character":25},"updated":"2020-02-12 11:49:25.000000000","message":"IIUC the timing is the factor here and not how many times you retry during that duration.\nwith that in mind, can we use an exponential backoff factor here like,\n2 ** i that will result the retries in 1,2,4,8... seconds respectively.","commit_id":"002feced6fa0a6451773806a899a677d7a9b38f6"},{"author":{"_account_id":30729,"name":"Pawel Kaminski","email":"pawelx.kaminski@intel.com","username":"pawelkax"},"change_message_id":"aeaeaa258311357f82455aab5dc0bb79af652ac5","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            for nvme_dev_name in self._get_nvme_devices():"},{"line_number":196,"context_line":"                if re.match(nvme_name_pattern, nvme_dev_name):"},{"line_number":197,"context_line":"                    return True"},{"line_number":198,"context_line":"            time.sleep(1)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        return False"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_96953f34","line":198,"range":{"start_line":198,"start_character":12,"end_line":198,"end_character":25},"in_reply_to":"3fa7e38b_4648cb88","updated":"2020-02-18 15:15:16.000000000","message":"I hope it is better now.","commit_id":"002feced6fa0a6451773806a899a677d7a9b38f6"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"ce8ab5205d0375f6cd1c6c5cc003dea05228c7bf","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            for nvme_dev_name in self._get_nvme_devices():"},{"line_number":196,"context_line":"                if re.match(nvme_name_pattern, nvme_dev_name):"},{"line_number":197,"context_line":"                    return True"},{"line_number":198,"context_line":"            time.sleep(1)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        return False"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3fa7e38b_4648cb88","line":198,"range":{"start_line":198,"start_character":12,"end_line":198,"end_character":25},"in_reply_to":"3fa7e38b_c5efd8f7","updated":"2020-02-12 17:35:29.000000000","message":"Could be very useful to move this out into a separate call and decorate that with https://github.com/openstack/os-brick/blob/master/os_brick/utils.py#L32","commit_id":"002feced6fa0a6451773806a899a677d7a9b38f6"}],"os_brick/tests/initiator/connectors/test_nvme.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"1aaa8e90dc889f9df21a421dd933e44b8f9c0f7b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.assertEqual(expected, actual)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @mock.patch.object(nvme.NVMeConnector, \u0027_get_nvme_devices\u0027)"},{"line_number":79,"context_line":"    def test__wait_for_blk(self, mock_devices):"},{"line_number":80,"context_line":"        expected \u003d 1"},{"line_number":81,"context_line":"        mock_devices.return_value \u003d ["},{"line_number":82,"context_line":"            \u0027/dev/nvme0n1\u0027, \u0027/dev/nvme0n2\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"7faddb67_1cf294e4","line":79,"updated":"2019-08-12 21:42:39.000000000","message":"Could you please change this test using ddt library?","commit_id":"c0b2796d439acdc284e2b82c94ca67554127c4df"}]}
